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


做box-shadow效果,我们还多加了一层class=ieShadow,然后使用blur滤镜来模拟的 。其实滤镜中还有个Shadow滤镜,可以不需要这个额外层,但是效果并不好,所以我们并没有采用 。
下面,我们做一个兼容所有浏览器的demo 。


!Doctype html html head meta charset="UTF-8" / title块阴影(Firefox,Safari, Chrome,opera)与文字阴影(Firefox 3.1,Safari,Opera,chrome)/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; box-shadow: 1px 1px 10px rgba(200,200,200,0.9); -webkit-box-shadow:1px 1px 10px rgba(200,200,200,0.9) ; -moz-box-shadow: 1px 1px 10px rgba(200,200,200,0.9) ; } .shadow span{ zoom:1;filter:progid:DXImageTransform.Microsoft.dropShadow( Color=cccccc,offX=2,offY=1,positive=true); text-shadow: 2px 1px 2px #ccc; } .ieShadow{ display:none; display:block9; position:absolute;width:200px;height:100px;z-index:-1; background: #ccc; top:-5px;left:-5px; filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius=’6’, MakeShadow=’true’, ShadowOpacity=’0.2’); } /style /head body div class="wrap" div class=’ieShadow’/div div class=’shadow’ span文字shadow/span /div /div /body /html
ffcod = delpost.runcode26 .value; ffcod = ffcod.replace(/
/g,’’); delpost.runcode26 .value = https://www.rkxy.com.cn/dnjc/ffcod; 提示:您可以先修改部分代码再运行
3. 解决ie6,7,8下渐变(Gradients)效果的不支持
自从有了gradient渐变这个css3属性后,很多设计效果我们就不需要去切图了,直接使用代码就能实现,并且相对图片来说局限性更小 。
为了弥补ie低版本下对gradient的不支持,我们可以使用Gradient滤镜 。
ie的Gradient滤镜只支持线性渐变,且只能设置两个渐变色,不过这里注意一下,这个渐变颜色可以设置alpha透明度 。


!Doctype html html head meta charset="UTF-8" / titleie6下的gradient滤镜线性渐变/title style type="text/css" .Box{ width:300px;height:200px; filter:progid:DXImageTransform.Microsoft.gradient(gradientType = 0, startColorstr = #FEFEFE, endColorstr = #E0E0E2); } /style /head body div class=’Box’渐变背景/div /body /html
ffcod = delpost.runcode27 .value; ffcod = ffcod.replace(/
/g,’’); delpost.runcode27 .value = https://www.rkxy.com.cn/dnjc/ffcod; 提示:您可以先修改部分代码再运行
我们在看一下各浏览器兼容性的写法,遗憾的是opera并未支持 。


!Doctype html html head meta charset="UTF-8" / title线性渐变(未支持opera)/title style type="text/css" .Box{ width:300px;height:200px; background:linear-gradient(top, #FEFEFE, #E0E0E2 ); background:-moz-linear-gradient(top, #FEFEFE, #E0E0E2 ); background:-webkit-gradient(linear, 50% 0, 50% 100%, from(#FEFEFE), to(#E0E0E2)); /* webkit老式写法 */ background:-webkit-linear-gradient(0, #FEFEFE, #E0E0E2 ); /* webkit新式写法 */ filter:progid:DXImageTransform.Microsoft.gradient(gradientType = 0, startColorstr = #FEFEFE, endColorstr = #E0E0E2); } /style /head body div class=’Box’渐变背景/div /body /html
ffcod = delpost.runcode28 .value; ffcod = ffcod.replace(/
/g,’’); delpost.runcode28 .value = https://www.rkxy.com.cn/dnjc/ffcod; 提示:您可以先修改部分代码再运行
4. 解决ie6,7,8下对rgba的不支持(一般用来做半透明层)
这第四个问题,非常普遍,而且ie低版本下的解决方法在网上也是随处可见,就是半透明层的效果 。
因为ie不支持rgba色,所以我们一般都使用ie的alpha滤镜来达到半透明效果,但是,同我们上面举的box-shadow的模拟例子一样,这个alpha滤镜和上面的blur滤镜都是针对层元素内所有子元素且包括文本节点的 。所以,一旦使用了alpha滤镜,那么这个元素下面的所有东西都透明了,这常常和我们要的效果不一致 。
网上一般的解决方法同上面的模拟box-shadow的blur滤镜一样,将透明层单独提取成一个层 。

推荐阅读