先看一段代碼,以下: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 */
【參考資料】圖片