使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE

跨浏览器兼容性是网页制作永恒的难题 。别看各浏览器厂商都努力在自己的浏览器中实现新式的css3标准特性,但都是以扩展样式的形式提供的,所以在未来一段时间里,样式表里的-moz-,-webkit-,(-ms-,-o-)等等前缀将长期存在 。

另外,虽说各家有志于扩张自己市场的浏览器厂商都提供了css3的新特性,但鉴于其老式版本的浏览器依然存在于用户的主机上(主要是微软旗下的ie6,7,8),除了考虑各家浏览器之间的兼容性外,我们还有必要向前兼容老式浏览器 。

这些老式浏览器(低版本ie)对于css3的不支持问题,真是阻碍我们迈向css3时代的一大障碍 。
不幸之幸,当年ie在轻视w3c标准之时,自成一套的Filters滤镜却是具备长远眼光的 。在这些Filters滤镜中,不少效果正是我们CSS3中目前实现的 。
对于Filters滤镜,我们不建议单独使用,只作为解决兼容性时候的一个选择 。
下面我们将解决以下低版本浏览器的问题:
1. ie6下对透明png的不支持;
2. ie6,7,8下阴影(box-shadow,text-shadow)效果的不支持;
3. ie6,7,8下渐变(Gradients)效果的不支持;
4. ie6,7,8下对rgba的不支持(一般用来做半透明层) 。

1. 解决ie6对24位透明png的不支持
第一个问题非常常见,其实有两个解决方法,
一个就是使用ie滤镜:AlphaImageLoader


!DOCTYPE html htmlhead meta charset="utf-8" / title使用AlphaImageLoader滤镜支持ie6的透明png/title style .pngBg{ width:160px;height:240px;background: url(//imgup01.我们.net/我们/2018-03/29/10/15222906636564_0.png); _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=https://www.rkxy.com.cn/dnjc/’//imgup01.我们.net/我们/2018-03/29/10/15222906636564_0.png’,sizingMethod=’scale’); /* sizingMethod参数还可以是image,crop */ } /style /head body div class=’pngBg’ 请尝试使用ie6 /div /body /html
ffcod = delpost.runcode24 .value; ffcod = ffcod.replace(/
/g,’’); delpost.runcode24 .value = https://www.rkxy.com.cn/dnjc/ffcod; 提示:您可以先修改部分代码再运行
使用这个滤镜之后,仍然是有一些问题没法弥补的,比如图片的repeat等等 。
之前,我曾极力推荐过另外一个解决方法:使用VML,称之为完美解决方案 。在这个js里已经封装好代码DD_belatedPNG
但是后来发现,使用VML效率问题比AlphaImageLoader更甚,君当慎之 。

2. 解决ie6,7,8下对阴影(box-shadow,text-shadow)效果的不支持
现在很多网站为求美观采用了很多css3的样式,其中box-shadow和text-shadow的使用率最高 。
下面我们就利用Blur和dropShadow滤镜在ie6,7,8中实现这种效果:


!Doctype html html head meta charset="UTF-8" / titleBlur滤镜模拟box-shadow,dropShadow滤镜模拟text-shadow/title style type="text/css" body{ position:relative; color:#c00; font-family:’黑体’; font-size:20px; background:#cfc; } .shadow{ width:200px;height:100px; background:#fff; border:1px solid #ccc; } .shadow span{zoom:1;filter:progid:DXImageTransform.Microsoft.dropShadow( Color=cccccc,offX=2,offY=1,positive=true); } .ieShadow{ position:absolute;width:200px;height:100px;z-index:-1; background: #333; top:-5px;left:-5px; filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius=’6’, MakeShadow=’true’, ShadowOpacity=’0.3’); } /style /head body div class="wrap" div class=’ieShadow’/div div class=’shadow’ span文字shadow/span /div /div /body /html
ffcod = delpost.runcode25 .value; ffcod = ffcod.replace(/
/g,’’); delpost.runcode25 .value = https://www.rkxy.com.cn/dnjc/ffcod; 提示:您可以先修改部分代码再运行
ie的滤镜是必须要在触发haslayout情况下才能生效的(ie8除外,它已经抛弃了haslayout这个私有属性),这就是为什么我们在那里加了个zoom:1;
另外,当使用dropShadow滤镜做文字阴影时,就不应该使用background,否则阴影效果是对背景起作用了,所以我们将dropShadow滤镜加在了span上而不是class=shadow层上 。

推荐阅读