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


Posted in HTML / CSS onJanuary 23, 2013

跨浏览器兼容性是网页制作永恒的难题。别看各浏览器厂商都努力在自己的浏览器中实现新式的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


提示:您可以先修改部分代码再运行

使用这个滤镜之后,仍然是有一些问题没法弥补的,比如图片的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中实现这种效果:


提示:您可以先修改部分代码再运行

ie的滤镜是必须要在触发haslayout情况下才能生效的(ie8除外,它已经抛弃了haslayout这个私有属性),这就是为什么我们在那里加了个zoom:1;
另外,当使用dropShadow滤镜做文字阴影时,就不应该使用background,否则阴影效果是对背景起作用了,所以我们将dropShadow滤镜加在了span上而不是class=shadow层上。
做box-shadow效果,我们还多加了一层class=ieShadow,然后使用blur滤镜来模拟的。其实滤镜中还有个Shadow滤镜,可以不需要这个额外层,但是效果并不好,所以我们并没有采用。
下面,我们做一个兼容所有浏览器的demo。

提示:您可以先修改部分代码再运行

3. 解决ie6,7,8下渐变(Gradients)效果的不支持
自从有了gradient渐变这个css3属性后,很多设计效果我们就不需要去切图了,直接使用代码就能实现,并且相对图片来说局限性更小。
为了弥补ie低版本下对gradient的不支持,我们可以使用Gradient滤镜。
ie的Gradient滤镜只支持线性渐变,且只能设置两个渐变色,不过这里注意一下,这个渐变颜色可以设置alpha透明度。

提示:您可以先修改部分代码再运行

我们在看一下各浏览器兼容性的写法,遗憾的是opera并未支持。

提示:您可以先修改部分代码再运行

4. 解决ie6,7,8下对rgba的不支持(一般用来做半透明层)
这第四个问题,非常普遍,而且ie低版本下的解决方法在网上也是随处可见,就是半透明层的效果。
因为ie不支持rgba色,所以我们一般都使用ie的alpha滤镜来达到半透明效果,但是,同我们上面举的box-shadow的模拟例子一样,这个alpha滤镜和上面的blur滤镜都是针对层元素内所有子元素且包括文本节点的。所以,一旦使用了alpha滤镜,那么这个元素下面的所有东西都透明了,这常常和我们要的效果不一致。
网上一般的解决方法同上面的模拟box-shadow的blur滤镜一样,将透明层单独提取成一个层。

提示:您可以先修改部分代码再运行

这种方法使用的比较普遍,但是多加的一层实在有些多余,并且有时候控制起来还比较麻烦。
我们可以换一个滤镜方法:在上面的渐变的滤镜里,我们提到了渐变色也可以使用alpha半透明值,并且这个渐变滤镜是针对于元素背景的,元素内容并不会受其影响。
那么我们可以这样实现

提示:您可以先修改部分代码再运行

显然结构,样式简单多了,再做一下其他浏览器的兼容性:

提示:您可以先修改部分代码再运行

虽然我们以上解决了四种ie低版本下的不足,但在解决的过程中某些地方还是稍显繁复了,且在具体应用当中的情况或许并没有这么简单,读者当理解之后再做延伸。
除了以上四种问题被解决之外,还是有太多的css3效果在ie低版本下是无法实现的,我们不得不(在低版本浏览器中)放弃之,其中最最最遗憾的就是css3圆角效果了,当然使用VML也是能解决,封装的方法:Curved corner,同DD_belatedPNG一样,我还是建议读者谨慎采用。
ie各个Filters静态滤镜演示Demo:DXTidemo
HTML / CSS 相关文章推荐
细说CSS3中的选择符
Oct 17 HTML / CSS
css3实现顶部社会化分享按钮示例
May 06 HTML / CSS
魔幻般冒泡背景的CSS3按钮动画
Feb 27 HTML / CSS
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
Mar 16 HTML / CSS
纯CSS3代码实现文字描边
Apr 25 HTML / CSS
纯css3制作煽动翅膀的蝴蝶的示例
Apr 23 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
Jul 06 HTML / CSS
HTML5边玩边学(1)画布实现方法
Sep 21 HTML / CSS
html5与css3小应用
Apr 03 HTML / CSS
使用html5制作loading图的示例
Apr 14 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
Sep 10 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
Jan 27 HTML / CSS
纯css3无js实现的Android Logo(有简单动画)
Jan 21 #HTML / CSS
定义css设备类型-Media Queries图表简介及使用方法
Jan 21 #HTML / CSS
css3强大的动画效果animate使用说明及浏览器兼容介绍
Jan 09 #HTML / CSS
css3 box-sizing属性使用参考指南
Jan 08 #HTML / CSS
css3背景图片透明叠加属性cross-fade简介及用法实例
Jan 08 #HTML / CSS
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
Jan 07 #HTML / CSS
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
Jan 06 #HTML / CSS
You might like
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php生成shtml类用法实例
2014/12/09 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
javascript+css实现进度条效果
2020/03/25 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python循环语句之break与continue的用法
2015/10/14 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
列车长先进事迹材料
2014/01/25 职场文书
员工合理化建议书
2014/05/19 职场文书
建筑工地标语
2014/06/18 职场文书
财务检查整改报告
2014/11/06 职场文书
售后服务质量承诺书
2015/04/29 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书