Home > Develop > 跨浏览器 CSS 阴影
2010March . 28th

跨浏览器 CSS 阴影

跨浏览器CSS阴影效果阴影是最常用的 CSS 效果之一,CSS3 标准已经增加了阴影属性,下面讨论一下阴影在各种浏览器里的实现方法。

CSS3 阴影

CSS3 里使用 box-shadow 属性定义块的阴影,基本语法如下:

1
box-shadow: 3px 3px 4px #000;

上面的样式里,前面两个 “3px” 表示阴影在 xy 两个坐标轴上的偏移量,x轴的正方向向右,y轴正方向向下。这个坐标和我们平时用的有点出入。在 Firefox 和 Webkit 等浏览器里,为了达到最高效率,建议通过私有的 hack 实现 CSS 阴影,可以这样写:

1
2
-moz-box-shadow: 3px 3px 4px #000;
-webkit-box-shadow: 3px 3px 4px #000;

CSS 阴影在 IE 浏览器里的实现

在 IE 里,我们只能通过滤镜才能实现纯 CSS 的阴影。要实现和上面的样式一样的效果,可以这样写:

1
2
3
4
/* For IE 5.5 - 7 */
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');
/* For IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";

在 IE 的 shadow 滤镜里, Strength 表示阴影的浓度, Direction 表示阴影的角度,为了方便理解,我们可以理解为光线从极坐标 135° 的方向照下来,产生阴影。

整合代码

整合同一个效果的 hack 时,我们遵循按兼容性从强到差的顺序进行整合,也就是标准代码写在最前。

1
2
3
4
5
box-shadow: 3px 3px 4px #000;
-moz-box-shadow: 3px 3px 4px #000;
-webkit-box-shadow: 3px 3px 4px #000;
filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');
-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";
推荐到豆瓣
  1. 2010March . 28th - 7:56 PM

    速度沙发

  2. 2010March . 28th - 7:57 PM

    抛弃IE,拒绝滤镜
    其他的收下了

  3. 2010March . 28th - 8:22 PM
  4. 2010March . 28th - 8:27 PM

    ie真麻烦,希望ie9有改观

  5. 2010March . 28th - 9:37 PM

    IE还要整滤镜…………就是个杯具……

  6. 2010March . 29th - 4:46 AM

    呵呵,小邪要无视IE了呐 ~

  7. 2010March . 30th - 1:38 AM

    IE8现在对css支持也不是很好

  8. 2010March . 30th - 2:09 AM

    @万戈
    现在说抛弃还为时尚早
    @zwwooooo
    即使IE9做得很完美我们还是要兼容一下旧版本
    @evlos
    无视任何一个主流浏览器都不是一个好做法
    @老千
    对,在CSS这方面,我觉得IE8比IE7垃圾

  9. 2010March . 30th - 11:55 AM

    old man加在主题里面的阴影被我去得了,还没习惯。

    下次折腾的时候在弄下。
    倒是很少使用私有hack,除了圆角加了moz

  10. 2010August . 26th - 8:28 PM
    linki97

    阴影怎么加透明度呢

  11. 2010August . 27th - 12:35 AM

    @linki97
    调整浓度和颜色

  12. 2011February . 14th - 10:51 AM

    to linki97 & bolo

    半透明的话,加个rgba就好了,类似这样
    box-shadow:5px 5px 5px rgba(0,0,0,.4); /* For Latest Opera */
    -moz-box-shadow:5px 5px 5px rgba(0,0,0,.4); /* For Firefox3.6+ */
    -webkit-box-shadow:5px 5px 5px rgba(0,0,0,.4); /* For Chrome5+, Safari5+ */

  13. 2011February . 14th - 12:19 PM

    @ICETEA
    哈,这个方法不错

  14. 2011August . 9th - 2:23 PM

    哎。。滤镜,害我看到标题白白兴奋了一下

  15. 2012January . 13th - 11:58 AM
    赵阳

    还是可以考虑的,不过针对IE的,很苦恼

Subscriber selector

Close