一直以來都沒有詳細去研究它,因為自己的專案都會用自己知道的規則和邏輯去設計,
通常只會用 ID attributes 和 non-ID attributes,所以詳細的計算規則沒那麼重要。

不過因為公司的專案是很多人一起合作的,每個人的寫法和習慣不同,
(有人習慣 selector 寫一長串,也有人寫很精簡)
加上今天同事問了這個問題,所以還是整理一下計算的規則。

計分規則

以 W3C 的標準套用方便自己記憶的方式,規則如下:

  • 優先權積分為四位數 abcd
    • MSB 代表優先權最高,LSB 代表優先權最低
    • a 為 inline style,如 <p style="color:red">
    • b 為 ID attributes,如 <p id="test">
    • c 為非 ID 的 attributes,如 <p class="test"><p rel="new">
    • d 為 element name (即 tag name),如 <p>
    • 以上在 select 中每多一種就在該位數加 1 分,最後直接比較四位數大小即其優先權順序

舉例

  • p#test
    • b = 1 (#test)
    • d = 1 (p)
    • 積分為 0101
  • div#menu ul.main li[rel=current] + span
    • b = 1 (#menu)
    • c = 2 (.main & [rel=current])
    • d = 4 (div & ul & li & span)
    • 積分為 0124

Ref. http://www.w3.org/TR/CSS2/cascade.html#specificity

CSS