CSS 權重(CSS Specificity)

2024-08-11 2024-08-11

CSS權重(CSS Specificity)是用來決定哪個樣式優先應用於一個 HTML 元素的規則。
權重越高,選擇器的優先級就越高,樣式就越可能被套用。

一、權重的計算方式

CSS權重由四個部分組成,分別代表不同類型的選擇器。這四部分的順序和權重如下:

  • 內聯樣式(Inline Styles):HTML 元素的 style 屬性。
  • ID 選擇器(ID Selectors):使用 #id 選擇器。
  • 類選擇器(Class Selectors)、屬性選擇器(Attribute Selectors)和偽類(Pseudo-classes):包括 .class、[attribute=value]、:hover 等,權重中等。
  • 元素選擇器(Element Selectors)和偽元素(Pseudo-elements):最低的權重,如 div、h1、::before 等。

權重計算的格式可以表示為 (a, b, c, d),其中:

  • a:內聯樣式(Inline Styles)
  • b:ID 選擇器(ID Selectors)
  • c:類選擇器(Class Selectors)、屬性選擇器(Attribute Selectors)和偽類(Pseudo-classes)
  • d:元素選擇器(Element Selectors)和偽元素(Pseudo-elements)

二、權重範例

  • 1-0-0-0:內聯樣式

    <div style="color=white;"></div>
  • 0-1-0-0:ID 選擇器

    #id {
        color=blue;
    }
  • 0-0-1-0:類選擇器、屬性選擇器和偽類

    [name=value] {
        color=red;
    }
    .class {
        color=red;
    }
    :hover {
        color=red;
    }
  • 0-0-0-1:元素選擇器和偽元素

    input {
        color=green;
    }
    ::after {
        color=green;
    }

三、特殊用法

  • *:全站預設值(0-0-0-1)

    * {
        color=black;
    }
    
  • !important 關鍵字(1-0-0-0-0)

    p {
        color: yellow !important; // 覆蓋其他權重較高的樣式
    }
    

    1.使用時需要謹慎使用,樣式增加維護成本會相對提高。

    2.如果多個樣式都使用 !important ,仍然需要根據權重來決定哪個樣式生效。

四、管理 CSS 權重

  • 避免過度依賴 ID 選擇器,ID 選擇器的權重很高,可能會導致樣式難以覆蓋。開發時盡量使用類選擇器更為靈活。
  • 使用命名規範,例如:BEM(Block Element Modifier)或 SMACSS(Scalable and Modular Architecture for CSS),有規劃的去組織樣式,減少權重衝突。
  • 避免過於複雜的選擇器層級,這樣會使權重變得難以管理。

五、結語

CSS 權重是網頁設計中不可忽視的重要概念,理解其運作原理可以幫助你更好地控制頁面元素的外觀,避免意外的樣式覆蓋問題。
可使用命名規範進行設計,有助於編寫出容易維護的樣式表。