CSS 优先级(specificity)决定多条规则命中同一元素时哪条生效,按权重从高到低大致为:
!important(最高,尽量少用);- 行内样式
style="..."; - ID 选择器
#id; - 类、属性选择器、伪类(
.cls、[type]、:hover); - 元素选择器与伪元素(
div、::before); - 通配符
*、组合符(>、+、~)和:where()不增加权重。
比较规则:按 (ID, 类, 元素) 三元组逐级比较,高一位胜出即停止,例如 #a(1,0,0)胜过任意多个类(0,10,0 也不行,不进位)。权重相同则后声明的规则覆盖先前的(层叠)。
易错点:
:not()、:is()本身不加分,但取其参数中最高的权重;!important之间仍按优先级比较;- 优先级与选择器书写顺序无关,只与各类选择器数量有关。
追问方向:CSS 层叠层(@layer)如何改变来源优先级、继承与优先级的区别(继承值权重最低,直接被命中的规则总是胜出)。