CSS 优先级(specificity)决定多条规则命中同一元素时哪条生效,按权重从高到低大致为:

  1. !important(最高,尽量少用);
  2. 行内样式 style="..."
  3. ID 选择器 #id
  4. 类、属性选择器、伪类(.cls[type]:hover);
  5. 元素选择器与伪元素(div::before);
  6. 通配符 *、组合符(>+~)和 :where() 不增加权重。

比较规则:按 (ID, 类, 元素) 三元组逐级比较,高一位胜出即停止,例如 #a(1,0,0)胜过任意多个类(0,10,0 也不行,不进位)。权重相同则后声明的规则覆盖先前的(层叠)。

易错点:

  • :not():is() 本身不加分,但取其参数中最高的权重;
  • !important 之间仍按优先级比较;
  • 优先级与选择器书写顺序无关,只与各类选择器数量有关。

追问方向:CSS 层叠层(@layer)如何改变来源优先级、继承与优先级的区别(继承值权重最低,直接被命中的规则总是胜出)。