最近發(fā)現(xiàn)一個關(guān)于css權(quán)重的知識习蓬,瞬間解決了很多疑惑绘迁,覺得有必要和大家分享一下
在css樣式設(shè)計時很多時候都是靠權(quán)重來設(shè)置標(biāo)簽樣式,其中一個最大的規(guī)律就是各種選擇方式的權(quán)重大兴帕薄:
!important>行間樣式>id>class |屬性 >標(biāo)簽選擇器 > 通配符
但是這就出現(xiàn)一個問題,如果是兩兩組合的話忌锯,就讓人分不清權(quán)重的優(yōu)先級了伪嫁。因為這個權(quán)重不僅有一個大小的關(guān)系,而且還有一個具體的值的對應(yīng)關(guān)系偶垮,同時這個值是可運算的张咳,最重要的一點是這個值不是10進(jìn)制,是256進(jìn)制的數(shù)據(jù)似舵,具體對應(yīng)關(guān)系如下:
!important? ? ?---->? ?Infinity
行間樣式? ? ? ??----> ?1000
id? ? ? ? ? ? ? ? ? ? ?---->? ?100
class|屬性|偽類 ?----> 10
標(biāo)簽|偽元素? ? ? ?---->? ?1
通配符? ? ? ? ? ? ? ??---->? 0
//256進(jìn)制
實例一:
有這么一組標(biāo)簽:
<div class="wrapper" id="only">????????<p ?class="wrapper1" id="only1">
????????</p>
</div>
假如用下面兩種方式來裝飾樣式脚猾,哪個會起作用:
1,#only p{
? ? background-color:red;
}
2,.wrapper .wrapper1{
? ? background-color:green;
}
這個時候如果單純的靠優(yōu)先級就不太容易判斷砚哗,這個時候權(quán)重值就可以很直接的解決這個問題龙助,首先要知道些在一行的選擇器權(quán)重值直接相加,雖然值不是10進(jìn)制蛛芥,但就一般的情況下提鸟,用10進(jìn)制也很明顯的能比較出大小的。
第一種選擇方式權(quán)重值為:100 +1 =101
第二種選擇方式的權(quán)重值為:10+10 =20仅淑,所以background-color:red;起作用
實例二:
還是上面的標(biāo)簽称勋,選擇器改為如下:
1,div#only p{
background-color:red!important;
}
2,.wrapper .wrapper1{
background-color:green!important;
}
第一種選擇方式權(quán)重值為:1+100 +1 + ?Infinity=102 +?Infinity
第二種選擇方式的權(quán)重值為:10+10 +?Infinity =20 +?Infinity涯竟,
這個時候就有一個問題了赡鲜,當(dāng)有兩個無窮大的權(quán)重時空厌,這個如何比較?
在CSS權(quán)重值里银酬,無窮大也僅僅是作為一個值來計算蝇庭,還要繼續(xù)比較其他的值,也就是說
1 +??Infinity? >? ?Infinity? ? ?所以這里background-color:red;起作用
最后需要補充的一點是捡硅,假如兩個選擇器權(quán)重值一樣哮内,那么后面的代碼就會默認(rèn)的覆蓋前面的代碼,也就是后面的代碼起作用W尘隆1狈ⅰ!喷屋!