css priority

css执行顺序与优先权的问题,首先就是CSS规则的specificity(特殊性),CSS2.1有一套关于specificity的计算方式,用一个四位的数字串(CSS2是三位)来表示,最终specificity越高的规则越特殊,在优先级判定时也就越有优势.

CSS执行顺序与优先权的问题:

◆每个ID选择符(#someid),加0,1,0,0。

◆每个class选择符(.someclass)、每个属性选择符(形如[attr=”"]等)、每个伪类(形如:hover等)加0,0,1,0

◆每个元素或伪元素(:firstchild)等,加0,0,0,1

其他选择符包括全局选择符*,加0,0,0,0。相当于没加,不过这也是一种specificity,后面会解释。

按这些规则将数字串逐位相加,就得到最终计算得的specificity,然后在比较取舍时按照从左到右的顺序逐位比较。

举一些例子吧:

h1{color:red;}

bodyh1{color:green;}
——后者胜出 h2.grape{color:purple;}

h2{color:silver;}
——前者胜出 html>bodytabletr[id="totals"]tdul>li{color:maroon;}

li#answer{color:navy;}
——后者胜

除了specificity还有一些其他规则:

文内的样式优先级为1,0,0,0,所以始终高于外部定义。这里文内样式指形如blah

的样式,而外部定义指经由<link>或<style>标签定义的规则。 有!important声明的规则高于一切。 如果!important声明冲突,则比较优先权。 如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。 由继承而得到的样式没有specificity的计算,它低于一切其他规则(比如全局选择符*定义的规则)。 关于经由@import载入的外部样式,由于@import必须出现在所有其他规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。 了解这些应该还要去了解关于浏览器渲染的问题,就是整个文档解析过程吧。

区别1:link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。

区别2:link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。

区别3:link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。

区别4:ink支持使用Javascript控制DOM去改变样式;而@import不支持。

如:http://www.cnblogs.com/00fairy00/archive/2009/11/10/1599914.html 实例表现加载的顺序