1. 什麼是 CSS 權重?
CSS 權重(Specificity)是指當多個選擇器同時作用於同一個元素時,瀏覽器決定應用哪條 CSS 規則的優先級機制。不同選擇器具有不同的權重,權重高的樣式會覆蓋權重低的樣式。
2. CSS 權重的計算方式
CSS 權重由四個部分組成,從高到低分別是:
- 行內樣式(Inline Styles)
- ID 選擇器(ID Selectors)
- 類別、偽類與屬性選擇器(Class, Pseudo-classes, Attribute Selectors)
- 元素與偽元素選擇器(Element, Pseudo-elements)
每種類型的選擇器都有固定的權重值,計算時以「數值」方式比較:
選擇器類型 |
權重值 |
行內樣式(style="" ) |
1000 |
ID 選擇器(#id ) |
100 |
類別選擇器(.class )、偽類(:hover )、屬性選擇器([type="text"] ) |
10 |
元素選擇器(div 、p )、偽元素(::before 、::after ) |
1 |
3. 權重計算範例
3.1 元素選擇器 vs. 類別選擇器
p { color: blue; }
.text { color: red; }
|
<p class="text">這段文字應該是紅色</p>
|
結果: .text
的權重為 10,比 p
的權重 1 高,因此文字顯示為紅色。
3.2 類別 vs. ID 選擇器
.text { color: red; }
#main { color: green; }
|
<p id="main" class="text">這段文字應該是綠色</p>
|
結果: #main
的權重 100 高於 .text
的 10,因此文字顯示為綠色。
3.3 屬性選擇器與偽類
p { color: black; }
p:hover { color: blue; }
p[title] { color: red; }
|
<p title="Example">這段文字會是紅色,滑鼠懸停時變藍色</p>
|
結果: p[title]
與 p:hover
權重相同(10),但 p:hover
只在滑鼠懸停時生效,因此預設為紅色,懸停時變藍色。
4. 多個選擇器組合計算
當一個 CSS 規則包含多種選擇器時,其權重會累加計算。
4.1 複合選擇器
div p { color: blue; }
div .text { color: red; }
#container .text { color: green; }
|
<div id="container"> <p class="text">這段文字應該是綠色</p> </div>
|
結果: #container .text
的權重 110 高於 div .text
(11)和 div p
(2),所以文字顯示為綠色。
4.2 !important 覆蓋權重
.text { color: red !important; }
#main { color: green; }
|
<p id="main" class="text">這段文字應該是紅色</p>
|
結果: 即使 #main
的權重較高,!important
仍然強制覆蓋樣式,使文字變紅。
5. 權重衝突的解決策略
- 避免使用
!important
,除非是必要的
- 使用更具體的選擇器
- 組織 CSS 層級結構
- 使用適當的 CSS 預處理器(如 SCSS、LESS)
6. 總結
理解 CSS 權重是撰寫高效、可維護樣式表的關鍵。透過計算選擇器的權重,可以精確控制樣式的優先級,避免不必要的覆蓋問題,提升開發效率。
Comments