最近看到篇對CSS優先順序有比較好的解釋的blog,雖然網路上有相關的文章,但依然轉載過來供大家學習參考。
詳解CSS優先權的讀法,CSS優先權包含四個等級(文內選擇符,ID選擇符,Class選擇符,元素選擇符)以及各層級出現的次數。根據這四個等級出現的次數計算得到CSS的優先權。
以下是引用:【轉自GOVO's Blog】
優先順序的讀法,應該以「組」來分,這個組之間互相獨立,由左到右進行比較。它們成組出現,以逗號分隔。
Example Source Code
[www.downcodes.com] selector( a , b , c , d )
compare: ↑ , ↑ , ↑ , ↑
selector( a , b , c , d )如w3c.org中原文所示,分為a,b,c,d四組,全為正整婁,預設為0,對應於不同的選擇器結構與組成形式。在選擇器之間的優先權進行對比時,從左到右1對1對比,當比出有大者時即可停止比較。
Example Source Code
[www.downcodes.com] li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0 , 0 , 2 , 1 */
/*compare ↑ , ↑ , √ */
h1 + *[rel=up]{} /* a=0 b=0 c=1 d=1 -> specificity = 0 , 0 , 1 , 1 */
/*compare ↑ , ↑ , ↑ , √ */
ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0 , 0 , 1 , 3 */
/*compare ↑ , ↑ , √ */
#x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0 , 1 , 0 , 0 */
/*compare ↑ , √ */
style="" /* a=1 b=0 c=0 d=0 -> specificity = 1 , 0 , 0 , 0 */(上表中,↑表示也要比較,√表示從此處已得到了結果)
再有,只要正確書寫,僅從優先級中大概知道選擇器結構形式了,如:
1,0,0,0表示是元素內的style;
0,2,1,1表示是一個由兩個ID選擇器,1個類別或偽類別或屬性選擇器,以及一個元素選擇器組成的選擇器。
CSS優先級規則的細節:在修正讀法後,才能開始講詳細的規則:
a組數值只有把CSS寫進style屬性時才會為1,否則為0.寫進style的樣式聲明其實不算是個選擇器,所以這裡面的b,c,d組值均為0,只有真正的選擇器才會有b,c,d組值。
b組數值決定於ID選擇器#ID,有多少ID選擇器,並會進行此組數值累加;
c組數值決定於類別、偽類和屬性選擇符,並會進行此組數值累加;
d組數值決定於元素名,即元素選擇器,並會進行此組數值累加;
請注意,這四組數值分別對應於不同類型的選擇器,互不影響,根據讀法法則進行比較。
這裡沒有討論到!important,就近原則和繼承,也沒有實例代碼,歡迎大家來W3Cbbs.com共同討論!
下面是列子:CSS優先權問題
CSS優先權包含四個等級(文內選擇符,ID選擇符,Class選擇符,元素選擇符)以及各層級出現的次數。根據這四個等級出現的次數計算得到CSS的優先權。
CSS優先順序的計算規則如下:
Example Source Code
[www.downcodes.com] * 頁面中定義的樣式,加1,0,0,0
* 每個ID選擇符(如 #id),加0,1,0,0
* 每個Class選擇子(如 .class)、每個屬性選擇子(如 [attribute=])、每個偽類(如 :hover)加0,0,1,0
* 每個元素選擇子(如p)或偽元素選擇子(如 :firstchild)等,加0,0,0,1
然後,將這四個數字分別累加,就得到每個CSS定義的優先權的值,
然後從左到右逐位比較大小,數字大的CSS樣式的優先權就高。
例子:
css檔或<style>中如下定義:
Example Source Code
[www.downcodes.com] 1. h1 {color: red;}
/* 一個元素選擇符,結果是0,0,0,1 */
2. body h1 {color: green;}
/* 兩個元素選擇符,結果是 0,0,0,2 */
3. h2.grape {color: purple;}
/* 一個元素選擇符、一個Class選擇符,結果是 0,0,1,1*/
4. li#answer {color: navy;}
/* 一個元素選擇符,一個ID選擇符,結果是0,1,0,1 */
元素的style屬性中如下定義:
Example Source Code
[www.downcodes.com] h1 {color: blue;}
/* 頁面中定義,一個元素選擇符,結果是1,0,0,1*/
註:這裡把所有的數字都進行對位疊加,(0,0,0,1)+(0,0,0,2)+(0,0,1,1)+(0,1,0, 1)+(1,0,0,1)=(1,1,1,6)
如此以來,h1元素的顏色就是藍色。
注意:
1、!important聲明的樣式優先權最高,如果衝突再進行計算。
2.如果優先權相同,則選擇最後出現的樣式。
3.繼承得到的樣式的優先權最低。