让IE可以变相支持CSS3选择器

abc刘潇飞2014

abc刘潇飞2014

2016-02-20 00:15

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享让IE可以变相支持CSS3选择器教程,希望对大家能有一点小小的帮助。

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

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

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

用法

你只需要下载Robert Nyman的脚本和并将它们在你的页面的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的用于寻找匹配元素CSS3选择器的DOM节点然后将相应的CSS类添加给它。

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

避免IE的CSS解释器

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

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

访问 下载 下载 替代方案

显然这个也并非完美的方案,对于Ajax网站来说,它基本上是不能用的,因为在生成的样式表被应用之后再改变DOM,就不会有效了。但是事实上我们可以自己来自定义一个ie-css3的。只是没有它这个这么智能。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)使用 cssQuery

是由业界大牛Dean Edwards开发的一个Javascript组件。它就是为CSS 选择器而生的。它可以支持几乎所有的CSS 选择器,包括CSS3选择器。当然它在实现的时候进行了分级,分别针对CSS1,CSS2和CSS3制作了一个独立的js包,以及一个标准包。支持所有A级浏览器。

简单的用法:

var tags = cssQuery("body > p");var tags = cssQuery("[href]");var tags = cssQuery("a[href='#']");

然后你就可以自己写一些js为相应的对象添加想用的样式了。

我建议对支持CSS高级选择器的浏览器使用原生的CSS选择器写法,然后通过cssQuery在IE中动态的为响应的元素添加一个样式名。

比如,我们可以这样写CSS:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
a[herf='#'],a.empty{color:red}

这里的第一条CSS3选择器是用于Firefox/webkit等支持CSS3选择器的非IE浏览器的,a.empty是专门为IE而写。然后通过CSSQuery动态的在IE浏览器中为对应的元素添加样式:

var tags = cssQuery("a[href='#']");tags.className="empty";

当然,上面的这段js最好使用IE的条件注释

使用 jQuery

据说比cssQuery要快很多。当然,无可否认,jQuery的选择器是目前流行的js框架中最好用的一个。而使用jquery来实现类似上述功能要方便很多,因为jQuery的选择器更好用。

OK,jQuery的做法和cssQuery有些类似,CSS可以写成上面一样的,JS可以这样写:

$("a[href='#']").addClass("empty");

更具体的用法可以查看我之前写的一个小例子《》

使用 DOMAssistant

也是一个很不错的JS库,它提供了一些类似jQuery的功能,比如CSS 选择器、事件以及一些DOM操作。它的优点就是小巧,压缩后只有9KB,我想这就是Keith Clark选择DOMAssistant来作为ie-css3.js的基础框架的主要原因吧。jQuery越来越肥胖了,而且用于实现这个功能有些浪费了。而且DOMAssistant的用法和jQuery非常类似。

事实上,DOMAssistant的选择器和对DOM的CSS Class的操作与jQuery一模一样。

$("a[href='#']").addClass("empty");

欲了解更多,可查看官方,以及

展开更多 50%)
分享

猜你喜欢

让IE可以变相支持CSS3选择器

Web开发
让IE可以变相支持CSS3选择器

CSS3伪类选择器:nth-child()

Web开发
CSS3伪类选择器:nth-child()

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

CSS选择器的浏览器支持

Web开发
CSS选择器的浏览器支持

CSS教程:论CSS选择器的浏览器支持

Web开发
CSS教程:论CSS选择器的浏览器支持

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

css 类选择器和id选择器

Web开发
css 类选择器和id选择器

渲染CSS选择器

Web开发
渲染CSS选择器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10如何查看屏幕刷新频率

Win10如何查看屏幕刷新频率

网页制作实例:em实现倒三角的提示效果

网页制作实例:em实现倒三角的提示效果
下拉加载更多内容 ↓