在IE中使用高级CSS3选择器

作者:神采飞扬 来源:前端观察 时间:2010-01-22 15:20:00 

别误会,IE是不支持CSS3高级选择器,包括最新的IE8(详见《CSS选择器的浏览器支持》),但是CSS选择器的确是很有用的,它可以大大的简化我们的工作,提高我们的代码效率,并让我们很方便的制作高可维护性的页面。

然而IE对高级CSS选择器特别是CSS3选择器的支持让我们一直不能将CSS选择器推广应用。不过,虽然我们无法左右浏览器的市场份额,却可以通过一些技术改善我们的工作。我们也可以使用其它的一些技术,让IE可以变相支持CSS3选择器。

一位来自英国的网页开发工程师Keith Clark开发了一个JavaScript方案来使IE支持CSS3选择器。该脚本支持从IE5到IE8的各个版本。

用法

你只需要下载Robert Nyman的DOMAssistant脚本和ie-css3.js并将它们在你的页面的head标签中导入,如下:

<head>
 <script type="text/javascript" src="DOMAssistantCompressed-2.7.4.js"></script>
 <script type="text/javascript" src="ie-css3.js"></script>
</head>

支持的选择器

  • :nth-child

  • :nth-last-child

  • :nth-of-type

  • :nth-last-of-type

  • :first-child

  • :last-child

  • :only-child

  • :first-of-type

  • :last-of-type

  • :only-of-type

  • :empty

ie-css3的一些限制

  • 样式表必须通过<link>标签引入。页面级的样式表或者内联的样式表将无效。不过你可以在外部样式文件中使用@import 导入其它样式文件;

  • 样式表文件必须和页面放在同一个域名下面;

  • 使用file://路径的样式文件将由于浏览器的安全问题而不起作用;

  • :not()选择器尚不支持;

  • 该方法不是动态的,样式被应用之后再改变DOM,将会无效。

如何工作的?

ie-css3.js下载页面的每一个样式文件并解析它的CSS3伪选择器。如果一个选择器被找到,它就会被替换为同名的CSS class。比如: div:nth-child(2) 将会变成 div._iecss-nth-child-2 。然后,Robert Nyman的DOMAssistant用于寻找匹配元素CSS3选择器的DOM节点然后将相应的CSS类添加给它。

最终,元素的样式表会被新的版本替代,然后用CSS3选择器对相应元素添加对应的样式。

避免IE的CSS解释器

根据W3C的规定,一个浏览器应该无视它不认识的CSS规则。这就出现一个问题——我们需要利用样式表文件中的CSS3选择器,但是IE会将它们丢弃。

为了避免这个问题,每一个样式文件都会通过XMLHttpRequest下载。这允许该脚本绕开浏览器内置的CSS解释器并能够读取原始的CSS文件。

标签:CSS3,选择器,IE
0
投稿

猜你喜欢

  • 详解IWinter 一个路由转控制器的 Nodejs 库

    2024-05-03 15:56:03
  • Python的Tornado Web框架深入解析

    2021-11-28 03:14:51
  • 深入string理解Golang是怎样实现的

    2024-02-07 06:45:24
  • 关于scipy.optimize函数使用及说明

    2022-10-19 04:24:04
  • python自定义时钟类、定时任务类

    2021-02-12 12:21:37
  • 解决python super()调用多重继承函数的问题

    2022-09-28 07:50:44
  • Python datetime模块的使用示例

    2022-10-20 22:33:39
  • php实现通过cookie换肤的方法

    2023-11-23 17:57:07
  • Python中json库的操作指南

    2021-10-11 11:04:43
  • MySQL delete删除数据后释放磁盘空间的操作方法

    2024-01-18 21:00:16
  • python多次绘制条形图的方法

    2021-07-22 09:36:45
  • Python实现的对本地host127.0.0.1主机进行扫描端口功能示例

    2021-05-13 08:43:23
  • Python文件处理

    2022-08-08 10:22:01
  • python实现beta分布概率密度函数的方法

    2021-08-02 21:39:16
  • golang之JWT实现的示例代码

    2024-01-30 03:35:30
  • Flask模板继承深入理解与应用

    2021-01-24 12:31:40
  • python3 pillow生成简单验证码图片的示例

    2022-08-16 23:17:05
  • ElementUI中Tree组件使用案例讲解

    2024-04-28 10:19:58
  • scala中停止循环的三种方式(推荐)

    2023-03-20 07:03:34
  • python+selenium操作下拉框

    2021-11-16 13:43:30
  • asp之家 网络编程 m.aspxhome.com