我们都知道,IE浏览器暂不支持CSS3的一些属性 。国外的工程师们,不安于此现状,他们总是尽量使用一些手段使IE浏览器也能支持CSS3属性,我觉得这些都是很有意义,很有价值的工作,可以推动整个技术领域的进步的 。到目前为止,有不少可以让IE支持部分CSS3属性的工具 。例如:
1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js)
这个玩意估计是试图让IE支持CSS3属性的鼻祖,还算蛮强大,就是性能开销较大,要解析很多文件脚本,给DOM添加大量的元素以及ClassName 。
2. Aaron Gustafson的 eCSStender
此方法支持@font-face, CSS3 选择器, 以及 CSS3 Backgrounds 和 Borders 。
3. Drew Diller的 DD_roundies
这是一个基于IE VML实现一些CSS3效果的 。
4. Remiz Rahnas的border-radius.htc
此方法使用htc文件,配合VML实现,缺点在于不能自动适应目标元素的位置和大小,所以不能适用于动态脚本环境 。
5. Nick Fetchak的 ie-css3.htc
关于此方法,我在前面的"让IE6/IE7/IE8浏览器支持CSS3属性"这篇文章中已经做过介绍 。我是建议您看看这篇文章,倒不是ie-css3.htc这个玩意多么好,而是文中对htc文件以及VML预言做了些介绍,对于您了解IE下实现类似CSS3效果原理有所了解 。
6. Keith Clark的ie-css3.js
这是个与IE7.js类似的项目,其选择器可借助其他JavaScript库,所以其本身较小 。
7. zoltandulac的cssSandpaper
这是一个使用IE滤镜实现一些CSS3属性的方法 。
8. css3pie的css3 PIE.htc
支持:border-radius圆角 、 box-shadow 盒阴影 、 gradient渐变 、 multiple background images多背景。
下面对第8第方法的做一下简单介绍:
官方网站:http://css3pie.com/
使用方法:
第一步:下载css3 PIE.htc 文件
第二步:将PIE.htc文件上传到你的网站目录中,上传到目录哪里都可以,只要你记住这个目录 。
第三步:创建html文件,写一段css3代码,并引入PIE.htc,如下面这段:
代码如下:
#id {
border: 1px solid #999;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
behavior: url(path/to/PIE.htc);
}
注意:.htc 文件路径是相对于html文件的路径,而不是相对于css文件 。
已知的一些问题:
此方法并不是万能的,也有一些局限性和需要注意的地方 。
1. z-index相关问题
IE下这些CSS3效果实现是借助于VML,由VML绘制圆角或是投影效果的容器元素,然后这个容器元素作为目标元素的后兄弟节点插入,如果目标元素position:absolute 或是 position:relative,则这个css3-container元素将会设置与之一样的z-index值,在DOM tree中,同级的元素总是后面的覆盖前面的,所以这样就实现了覆盖,又避免了可能有其他元素正好插入其中 。
所以,问题来了,如果目前元素的position属性为static,也就是默认属性,则z-index属性是没有用的,无覆盖可言,所以此时IE浏览器下CSS3的渲染是不会成功的 。要解决也很简单,设置目标元素position:relative或是设置祖先元素position:relative并赋予一个z-index值(不可为-1) 。
2. 相当路径的问题
IE浏览器的behavior 属性是相对于HTML文档而言的,与CSS其他的属性不一样,不是相对于CSS文档而言的 。这使得使用pie.htc文件不怎么方便 。如果绝对路径于根目录,则CSS文件不方便移动;如果相对路径与HTML文档,则pie.htc文件在不同HTML页面见的重用性大大降低 。同时,诸如border-image后面的URL属性路径也不好处理 。
3. 缩写的问题
使用PIE实现IE下的CSS3渲染(其他方法也是一样),只能使用缩写的形式,例如圆角效果,我们可以设置border-top-left-radius表示左上圆角,但是PIE确实不支持这种写法的,只能是老老实实的缩写 。
推荐阅读
- 怎么让div+css兼容ie6ie7ie8ie9和FireFoxChrome等浏览器
- 微博设置不让别人看我的微博方法
- 关于自由教育的名言
- CSS在IE6IE7和IE8中的差别介绍
- IE6兼容性问题和IE6常见bug详细汇总介绍
- 一行代码解决各种IE兼容问题 IE6,IE7,IE8,IE9,IE10
- 怎样才能让IE浏览器安装调用未签名的ActiveX控件
- N6与索爱K700对比
- 让新手看了就懂的升级方法
- 让QQ消息提示音作为短信铃声