总结CSS的优先级问题(CSS兼容浏览器)
在编写CSS时,要注意过CSS的优先级问题吗?
简要总结一下CSS的优先级:
CSS选择器本身的特殊性值可用4位数字表示(0,0,0,0),4组数字依次代表选择器中的行内(内联)选择器,ID,class,元素选择器,如p .left可表示为0,0,1,1;div p #newsList可表示为0,1,0,2;
其中4组选择器中第三组除了类属性值外还包括属性选择以及伪类,因此(除了ie6及之前)ul li a[title="tip"]可表示为0,0,1,3。
结合符及通配选择器对特殊性无影响。
CSS的优先级由选择器的特殊性决定,由左向右逐组比较,特殊性高的选择器级别优先。也即遵循:行内选择>ID>class>标签
如:
h1{color:red;}/*0,0,0,1*/
body h1{color:green;}/*0,0,0,2*/
h2.titleInfo{color:purple;}/*0,0,1,1*/
div>ul>li a[title="a"] span{color:gray;}/*0,0,1,5*/
ID与属性选择器的特殊性
ID选择器与属性选择器存在着歧义的一种情况:
ul #first{color:red;}
ul li[id="first"]{color:green;}
两者特殊性值分别为0,1,0,1和0,0,1,1,因为#first优先级较大。
有如下例子:
<style type="text/css">
li{color:gray;}
ul li[id="first"]{color:green;}
ul li #first{color:yellow;}
ul #first{color:red;}
#first{color:blue;}
</style>
</head><body>
<ul>
<li id="first">一系列选项</li>
<li>一系列选项</li>
<li>一系列选项</li>
<li>一系列选项</li>
</ul>
</body>
显示效果如下(ie6,7,8,ff,opera测试通过)
注意:该css中ul li #first是一种不规范的选择方式,因为li与#first是同级关系,不能使用后代选择器。