在Firefox 3.5中实现的CSS特性中还有一个很有意思的──盒子阴影。这个特性允许在任何支持盒子模型的元素上投射出“阴影”效果。
由于CSS3的盒子阴影属性目前还在发展中,所以Firefox特化的把他实现为-moz-box-shadow
。这种特化方式是Firefox实现CSS中的实验属性的方法之一,在属性前面加上前缀“-moz-”。等到这个属性最终被CSS3确定之后,属性会重新命名为“box-shadow”。
怎么来用呢
为元素添加盒子阴影效果非常直观。CSS3标准中允许的取值为:
none | <shadow> [ <shadow> ]*
</shadow></shadow>
这里<shadow></shadow>
被定义为:
<shadow> = inset? && [ <length>{2,4} && <color>? ]
</color></length></shadow>
前面两个length长度取值对应着影子在水平和竖直方向的位移。第三个length长度取值是模糊半径(还记得之前介绍过的text-shadow 属性吗,里面也有模糊半径)。最后第四个length长度取值是传播半径,使用正数表示影子拉长,使用负数表示影子缩短,而这个长度是相对于父元素的大小而言的。
inset
(嵌入)关键字用标准里面的话来说就是:
如果出现,他把向外投射的阴影(把盒子投射到画布上的阴影,可以理解为从画布上把盒子提起来)改变为向内投射的阴影(把画布投射到盒子上的阴影,可以理解为把盒子从画布上切下来然后移到画布后面)。
让我们来看看实战的例子。
简单画一个阴影,主需要定义好位移和颜色:
-moz-box-shadow: 1px 1px 10px #00f;
(文中的每个例子我们都会先给出一个实际运行代码的效果,接着一个在Mac OSX上的Firefox 3.5的渲染截图。)
同样,您可以使用前面提到的关键字画一个嵌入的阴影。
-moz-box-shadow: inset 1px 1px 10px #888;
借助传播半径的力量,您还可以定义相对于应用元素的更小(或者更大)的阴影:
-moz-box-shadow: 0px 20px 10px -10px #888;
如果你需要,你还可以定义多个阴影,使用逗号隔开(例子来自Markus Stange):
-moz-box-shadow: 0 0 20px black, 20px 15px 30px yellow, -20px 15px 30px lime, -20px -15px 30px blue, 20px -15px 30px red;
不同的阴影效果非常柔和的融合在一起,您也可能注意到,他们的定义顺序不同产生的效果也不同。因为box-shadow
是CSS3的特性,而Firefox 3.5遵循的是CSS3的绘画顺序。也就是说,最先定义的影子显示在顶端,所以在设计多阴影的时候需要注意这一点。
最后,我们来看一个例子,使用-moz-box-shadow
和RGBA颜色定义。RGBA同RGB相同,不过他添加了一个附加值标示透明度的Alpha通道。让我们在黄色的背景上做一个黑色的拥有50%透明的模糊阴影:
-moz-box-shadow: inset 5px 5px 0 rgba(0, 0, 0, .5);
您可以看到,黄色的背景可以透过半透明阴影看到。这个特性在使用背景图片时会更加有趣,因为你可以透过阴影看到图片内容。
跨浏览器兼容性
作为全新的正在工作进程中的CSS3属性,box-shadow还没有被浏览器制造商广泛接受。
-moz-box-shadow
特化来支持这个属性,包括多阴影、inset
关键字和传播半径。-webkit-box-shadow
特化来支持阴影。多阴影从4.0版本开始支持,但是还不支持inset关键字和传播半径。为了获得最大程度的支持,我们建议您定义全部三个属性,包括-moz
、-webkit
和标准的CSS3词法。相应的浏览器会选择相应的属性进行实现。例如:
-moz-box-shadow: 1px 1px 10px #00f;
-webkit-box-shadow: 1px 1px 10px #00f;
box-shadow: 1px 1px 10px #00f;
好消息是box-shadow
属性在不支持的浏览器上会优雅的降级。例如,上面所有的例子在微软IE浏览器上看起来都是平淡无奇的盒子而没有任何阴影效果。
结论
CSS3的box-shadow
属性还没有在浏览器中被广泛支持(用户也是),这跟text-shadow
属性类似,但是随着WebKit和Firefox 3.5对盒子阴影的支持,越来越多的用户可以看到这种CSS阴影效果。作为网页开发人员,您可以使用这个特性,能够给用户提供一个全新的现代浏览器体验。
更多资源
文档
例子
本文由 Jackchen Design 1984 作者:jackchen 发表,转载请注明来源!