一直以來都沒有詳細去研究它,因為自己的專案都會用自己知道的規則和邏輯去設計,
通常只會用 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
- b = 1 (
div#menu ul.main li[rel=current] + span
- b = 1 (
#menu
) - c = 2 (
.main
&[rel=current]
) - d = 4 (
div
&ul
&li
&span
) - 積分為 0124
- b = 1 (