这篇文章发布于 2010年03月29日,星期一,18:00,归类于 CSS相关。 阅读 80280 次, 今日 1 次 17 条评论
by zhangxinxu from http://www.zhangxinxu.com
本文地址:http://www.zhangxinxu.com/wordpress/?p=699
一、效果抢先预览
与之前文章婆婆妈妈的开头不同,本文首先展示使用CSS实现的炫酷效果:
横向移动滚动条,您会发现,易拉罐随着滚动条的滚动,自身也在滚动。但是,如果您现在使用的是IE6浏览器或是IE6为内核的浏览器,我只能说声”I’m sorry!”,首先IE6不支持png32透明或半透明的背景,其次不支持背景图片的fixed固定定位。
二、原理解剖
首先,说几个关键字,fixed,mask,用中文解释就是:背景图片固定定位,半透明png图片遮罩。
使用的素材
使用的素材有两个,一个是背景图片,一个是覆盖图片(起类似flash中的遮罩效果),如下:
背景图片固定定位
我们应该都知道,background有个属性是background-attachment,此属性有两个值,一个是fixed,另外一个是scroll,而后面的值为默认的。这两个值的意思是:“当页面的其余部分滚动时,背景图像不会移动”以及“背景图像会随着页面其余部分的滚动而移动”。此CSS具体属性可点击这里查看。
本文的效果可以说是活用了这个CSS特性,当滚动时,背景图片(红色的可口可乐包装)的位置是不随着滚动条的滚动而滚动的。
半透明图片的覆盖
半透明图片的作用是易拉罐的头尾,形成易拉罐的形状,形成阴影效果,使效果更为逼真。我们通过让半透明图片覆盖在背景图片上,就可以形成大致的易拉罐滚动效果。注意这里的“大致”一次,如果我们只是一个背景图片固定加上一个半透明遮罩,那么实现的效果就是个狠生硬的,“大致的”易拉罐3D滚动效果。
不信您可以狠狠地点击这里:生硬的3D易拉罐滚动效果
更多的工作
之所以仅仅通过背景固定于覆盖实现的滚动效果是相当生硬不自然的,为什么呢?因为透视的关系,我看一个3D物体,比如说这里的易拉罐,其边缘的图形呈现到我们眼睛里的应该是压缩的,扁平的,否则,如同一个平面,效果不佳。这就是上面“效果生硬”的原因。该如何解决呢?有经验的同行们应该知道,使用多标签来模拟此效果,也就是易拉罐的背景图片不是由一个标签形成,而是由很多个标签以符合人眼透视规律的形式拼接成一个完成的易拉罐背景。这里的规律也就是上面提到的“边缘背景图片的收缩,中间图片的平面化”。
例如买本实例中,共使用了55个p标签拼接成易拉罐背景。
您可以狠狠地点击这里:易拉罐3D滚动效果demo及代码
代码您可以参见demo,这里就不显示了。
注意:由于滚动也受控于body的滚动条,所以,为了避免干扰,需要使用框架调用滚动效果的单页面。
三、感慨 – 结语兼废话
CSS的潜力真是惊人,我有时不得不感叹人类的智慧。我常想,要是CSS3成为了主流,那会是怎样的一个世界,五花八门,千奇百怪的CSS技术以及一些叹为观止的效果会让你犹如进入爱丽丝的梦游仙境。
还有,如果您发现文章中有表述不准确或是有相关问题需要交流可以通过评论或是去这里进行提问交流。
参考文章:Pure CSS Coke Can
本文为原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com]
本文地址:http://www.zhangxinxu.com/wordpress/?p=699
(本篇完)
- 小tip:IE不支持CSS3多背景的替代解决方案 (0.482)
- CSS clip:rect矩形剪裁功能及一些应用介绍 (0.421)
- 关于gif图片(或png8)杂边锯齿的问题 (0.411)
- Stylus-NodeJS下构建更富表现力/动态/健壮的CSS (0.246)
- jQuery与MooTools库的一些比对 (0.236)
- quickLayout.css-快速构建结构兼容的web页面 (0.236)
- 是时候好好安利下LuLu UI框架了! (0.236)
- 巧用:is()或:where()伪类让scoped的style依然全局匹配 (0.236)
- 对html与body的一些研究与理解 (0.200)
- 纯CSS实现标题栏、表格头水平滚动垂直不滚动 (0.193)
- jQuery图片文本滚动切换插件jCarousel中文翻译与详解 (RANDOM - 0.055)
突然发现易拉罐滚动旋转方向与前进方向矛盾……
既然很多手机不支持Fixed背景。。。
代码已经扒出来整理好了,在百度云盘中,可以参考学习
http://pan.baidu.com/s/1i4G2tM1
我的背景的图就显示不全为什么?请教
好
永恒之哥 受教了 但是还是看不太懂位置坐标是怎么实现的
感觉不是讲的很清楚,特别是为什么出现了滚动效果
为什么用多个标签会有3d的效果呢,有点想不明白
为什么呢,为什么用多个标签会有3d的效果呢,谁能告诉???
怎么没有滚动效果了,我记得以前有的啊
var oAppend = document.getElementById(“appendHTML”);
var appendHtml = “”;
for(var i=1; i<=55; i+=1){
appendHtml += '’;
}
oAppend.innerHTML = appendHtml;
虽说是纯css不过,还是有这么一点的js代码啊~~~
不这样写就得手动写55个p标签了
这种技术在很实际项目中应该不常用到!
*改正:….這種 創意 不會在國内流行起來….
“我常想,要是CSS3成为了主流,那会是怎样的一个世界,五花八门,千奇百怪的CSS技术以及一些叹为观止的效果会让你犹如进入爱丽丝的梦游仙境。”——這個不會國内流行起來,有的只會是滿屏的圆角、半透明、陰影、光效….連正文都是這樣。
鑫是平面出身吗?
做过平面,但谈不上出身。