并集选择器权重不叠加,各分支单独计算后取最大值;常见误判源于混淆并集与后代选择器,如.a, .b .c中.b .c权重为0-2-0;调试应关注层叠顺序、继承链及DevTools中被划掉的声明。

并集选择器的权重根本不会叠加
并集选择器(比如 .a, .b, .c)里每个分支单独计算权重,最后取最大值,不是加起来。所以它「不增加整体权重」不是靠技巧实现的,而是 CSS 权重规则本身决定的——你根本没法让它叠加。
为什么有人觉得权重变高了?
常见错觉来源:把并集选择器和后代/子选择器混淆了。比如写成 .a, .b .c,后半部分 .b .c 是两个类名嵌套,权重是 0-2-0;而 .a 只有 0-1-0,整条规则最终按 0-2-0 生效,误以为「并集导致变重」。
- 错误写法:
.header, nav ul li a→ 后半段是 0-1-3,远高于前半段 - 真正并集:
.header, .footer, .sidebar→ 每个都是 0-1-0,整条规则权重就是 0-1-0 - 检查方法:用浏览器开发者工具看「Computed」面板里
specificity值,或手动算(内联:0-1-0-0 / ID:0-1-0 / 类/属性/伪类:0-0-1 / 标签/伪元素:0-0-0-1)
想压低某条并集规则的优先级?别拼权重,换策略
如果你发现 .btn, .link 总是覆盖不了更具体的样式,问题不在并集本身,而在它出现的位置或后续规则是否更具体。
- 确保它没写在样式表靠后位置(CSS 是就近生效)
- 避免混用通配符或属性选择器抬高局部权重,比如
[class*="btn"], .link中前者已是 0-0-1,和后者并列后整条还是 0-0-1,但容易误判 - 真要降权?删掉冗余类名,改用单一样式 + data 属性控制变体,比如统一用
[data-type="primary"]替代多个类名并集
实际调试时最该盯住的两个地方
权重只是表面,真正卡住你的往往是层叠顺序和继承链断裂。
立即学习“前端免费学习笔记(深入)”;
- 打开 DevTools,点中元素,在
Styles面板里找被划掉的声明——不是权重不够,可能是!important或来源顺序靠前 - 检查是否意外触发了
all: unset或inherit,导致看似「没生效」,其实是继承被截断
并集选择器本身很干净,复杂点永远在组合方式和上下文里,而不是它自己。










