一個元素有多個樣式對他進行設置的時候,那麼哪一個樣式會起做用呢?這就須要一個規則計算,這個規則就是權重。誰的權重大,就使用那個樣式。css
根據w3c的規範,元素分爲三個等級:ide
a
等級)b
等級)c
等級)咱們按照剛纔的規則進行分類計算,計算一下有幾個a
,幾個 b
, 幾個 c
。工具
示例:學習
body #content .data img:hover
複製代碼
這個按照a,b,c
這種格式計算的結果就是:1,2,2
。spa
咱們來分析一下。code
有1個a
: #content
。排序
有2個b
:一個class:.data
, 一個僞類::hover
。ci
有2個 c
:body
和 img
get
那咱們再來看幾個例子:it
// 0,0,2(一個標籤,一個僞元素)
li:first-line
複製代碼
// 0,1,1(一個屬性選擇器,一個標籤)
h1 + *[rel=up]
複製代碼
// 1,1,2(一個id選擇器,一個類選擇器,2個標籤)
body #darkside .sith p
複製代碼
如今咱們已經知道怎麼計算權重了,下一步咱們就看看怎麼來比較誰的權重大誰的權重小。權重大的樣式會起做用。
首先比較第一個等級a
,誰的 a
的個數多權重就大。若是 a
的個數同樣,則比較 b
,跟 a
的規則同樣,誰的b
的個數多,誰的權重就大。若是同樣在比較 c
。同樣的規則。
這樣的話,誰的權重大,誰就對元素起做用。
若是最後abc
都同樣怎麼辦,那就比較誰最後寫的,通常後面寫的會覆蓋前面的樣式。
好比:
body div{
background: blue
}
div{
background: red;
}
複製代碼
以上兩個樣式,blue
會起做用。
!important
和 行內樣式除了以上三個等級以外,咱們還有另外兩個,一個是行內樣式,一個是 !important
。
而行內樣式 比 ID選擇器高一級,!important
比行內樣式又高一級。
因此最終等級比較是:
!important
> 行內樣式 > ID選擇器 > 類選擇器 | 屬性選擇器| 僞類選擇器 > 標籤|僞元素
經過上面的方法,咱們就能夠計算出權重,比較大小。就能夠知道那個樣式會起做用了。
!important
,他的等級過高。後期若是對元素有修改很難突破。id
,就儘可能不使用。最後推薦一個特別棒的工具,你能夠輸入選擇器,而後計算權重。也能夠對多個權重進行排序。
若是不清楚哪一個權重更大,使用這個工具能夠一目瞭然,也方便咱們對權重的學習。
若是你們發現有什麼錯誤的地方,歡迎指正。但願能給你們帶來一點收穫。
參考資料: