先看一段代码,以下:css
<style> a{ color: red; } #box a{ color: green; } [class="box"] a{ color: gold; } .box a{ color: brown; } p a{ color: yellow; } </style> <p id='box' class="box"> <a>hello</a></p>
请问上面代码中,a
标签中文字的最终颜色是什么?知道CSS选择器优先级规则的童鞋都知道,在CSS中优先级顺序以下:html
ID选择器 > class选择器 > tag选择器
因此,上面代码的颜色,你们都会选择#box a{ color: green;}
绿色。这个答案没错。 若是咱们把这一条规则从style
标签中移除呢,那么a
标签文字的颜色应该是哪一个?brown
? orgold
? Which one?
答案是: brown。spa
a{color:red}
和p a {color : yellow;}
的优先级确定没有其它两项高,不须要考虑。在[class="box"] a
和.box a
中,后者的顺序比较考后,会覆盖以前的样式,因此颜色是brown
。
这也许会是一些人的答案,不能不说不对。那么若是这中状况下呢?code
<style> #box{ color: green; } </style> <p id='box' class="box" style="color: red;"> hello </p>
不用说,你们都知道会使用style="color: red;"
属性定义的颜色,是red。htm
那么,css所听从的具体规则是什么呢?blog
!important
, 大过了其它任何设置。!important
和内联样式style
都属于不讲理的那种,继承
!important
,!important
便具备最高优先级;!important
,存在style
,那么style
便具备最高优先级;* /* a=0 b=0 c=0 -> specificity = 0-0-0-0 */ LI /* a=0 b=0 c=1 -> specificity = 0-0-0-1 */ UL LI /* a=0 b=0 c=2 -> specificity = 0-0-0-2 */ UL OL+LI /* a=0 b=0 c=3 -> specificity = 0-0-0-3 */ H1 + *[REL=up] /* a=0 b=1 c=1 -> specificity = 0-0-1-1 */ UL OL LI.red /* a=0 b=1 c=3 -> specificity = 0-0-1-3 */ LI.red.level /* a=0 b=2 c=1 -> specificity = 0-0-2-1 */ #x34y /* a=1 b=0 c=0 -> specificity = 0-1-0-0 */ #s12:not(FOO) /* a=1 b=0 c=1 -> specificity = 0-1-0-1 */
【参考资料】图片