詳解CSS優(yōu)先級的讀法,CSS優(yōu)先級包含四個級別(文內選擇符,ID選擇符,Class選擇符,元素選擇符)以及各級別出現的次數。根據這四個級別出現的次數計算得到CSS的優(yōu)先級。
對優(yōu)先級的讀法,應該是以“組”來分,這個組之間相互獨立,從左到右進行對比。它們成組出現,以逗號分隔。
selector( a , b , c , d ) compare: ↑ , ↑ , ↑ , ↑ selector( a , b , c , d )正如w3c.org中原文所示,分為a,b,c,d四組,全為正整婁,默認為0,對應于不同的選擇器結構和組成形式。在選擇器之間的優(yōu)先級進行對比時,從左到右1對1對比,當比出有大者時即可停止比較。
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 */(上表中,↑表示還要進行比較,√表示從此處已得到了結果)
再有,只要正確書寫,僅從優(yōu)先級中大概知道選擇器結構形式了,如:
1,0,0,0表示是元素內的style;
0,2,1,1表示是一個由兩個ID選擇器,1個類或偽類或屬性選擇器,以及一個元素選擇器組成的選擇器。
|
CSS優(yōu)先級規(guī)則的細節(jié):
在糾正讀法后,才能開始講詳細的規(guī)則:
a組數值只有把CSS寫進style屬性時才會為1,否則為0.寫進style的樣式聲明其實不算是個選擇器,所以這里面的b,c,d組值均為0,只有真正的選擇器才會有b,c,d組值。
b組數值決定于ID選擇器#ID,有多少個ID選擇器,并會進行此組數值累加;
c組數值決定于類、偽類和屬性選擇符,并會進行該組數值累加;
d組數值決定于元素名,即元素選擇器,并會進行該組數值累加;
注意,這四組數值分別對應于不同類型的選擇器,互不影響,根據讀法法則進行比較。
這里沒有討論到!important,就近原則和繼承,也沒有實例代碼,歡迎大家來webjx.com共同討論!
下面是列子:CSS優(yōu)先級問題
CSS優(yōu)先級包含四個級別(文內選擇符,ID選擇符,Class選擇符,元素選擇符)以及各級別出現的次數。根據這四個級別出現的次數計算得到CSS的優(yōu)先級。
CSS優(yōu)先級的計算規(guī)則如下:
* 頁面中定義的樣式,加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定義的優(yōu)先級的值,
然后從左到右逐位比較大小,數字大的CSS樣式的優(yōu)先級就高。
| |