选择器权重是css特异性规则,以三元组(a,b,c)表示:a为内联样式数、b为id数、c为类/属性/伪类数;权重高者生效,而非后写覆盖。
HTML 样式代码本身不直接生效,真正起作用的是 CSS 选择器及其权重规则;没搞懂权重,改样式就像在猜谜——明明写了 color: red,页面却还是黑色。
什么是选择器权重?为什么它比“谁写在后面”更关键
浏览器渲染时,并非简单按 CSS 文件顺序或声明顺序决定样式,而是先计算每个选择器的“特异性(specificity)”,再比大小。权重高者胜出,哪怕它写在前面。
权重不是相加数字,而是一组优先级三元组:(a, b, c),对应:
-
a:内联样式个数(如style="color:red"→a=1) -
b:ID 选择器个数(如#header→b=1) -
c:类、属性、伪类选择器个数(如.btn、[type="submit"]、:hover→ 各计 1) - 标签名、伪元素(如
div、::before)不计入权重,只影响匹配范围
!important 真的能绕过权重吗?
能,但代价是破坏可维护性。它不是“提高权重”,而是把该声明提升到最高优先级层级,凌驾于所有普通规则之上(包括内联样式),但无法覆盖 JS 设置的 style 属性值。
立即学习“前端免费学习笔记(深入)”;