CSS 權重其實有一套計分方式,從高到低依序是:
例:
權重最高,幾乎無人能敵(除了 !important)。
例:#title {}
每個 ID 加 100 分。
例:.btn {}, [type="text"], :hover
每個加 10 分。
例:div {}, p::after
每個加 1 分。
沒什麼分數,基本上是墊底的。
舉例說明
假設 HTML:
<p id="main" class="highlight">Hello</p>
CSS:
p { color: blue; } /* 分數 = 1 */
.highlight { color: green; } /* 分數 = 10 */
#main { color: red; } /* 分數 = 100 */
同分時怎麼辦?
如果兩個規則的權重一樣,後面寫的會蓋掉前面寫的:
CSS
.highlight { color: green; }
.highlight { color: orange; } /* 後面寫的贏 */
結果會是 橘色。
加上 !important,會直接蓋掉幾乎所有規則(除非另一個也有 !important,那就再比權重分數)。
CSS
p { color: blue !important; }
#main { color: red; }
把 CSS 權重想像成「朋友聚餐的決定權」:
-行內樣式:本人拍板說去哪(最大)。
-ID:好朋友的強烈建議(很大影響力)。
-Class:朋友群的共識(影響力中等)。
-Tag:路人甲的意見(可以參考,但不一定採用)。
熟悉權重規則能幫你少踩坑,尤其在專案大時,光會寫 CSS 還不夠,得知道誰蓋誰,才能保持樣式的穩定。
剛好寫了篇 CSS 權重教學給你參考 :)
https://ithelp.ithome.com.tw/articles/10373571