:not伪类用于选中不匹配指定条件的元素,可排除类、标签或属性,如.btn:not(.btn-disabled)为按钮排除特定样式,支持链式调用但仅限简单选择器。

在CSS中,:not 伪类是一个非常实用的选择器,它允许你为不匹配某个条件的元素应用样式。通过使用 :not(),你可以轻松排除特定元素,避免样式被错误地应用。
基本语法与作用
:not(选择器) 表示选中不符合括号内选择器的元素。它可以接收简单选择器,如标签名、类名、属性选择器等。
例如:
/* 给所有不是段落的块级元素设置边距 */div :not(p) {
margin-bottom: 1rem;
}
排除特定类的元素
当你希望对某一类元素统一设置样式,但想排除其中某些特殊类时,:not(.类名) 就非常有用。
立即学习“前端免费学习笔记(深入)”;
比如,给所有 .btn 添加背景色,但跳过 .btn-disabled:
background-color: blue;
color: white;
}
这样,带有 btn-disabled 类的按钮就不会被赋予背景色。
排除特定标签或属性
除了类,还可以排除特定标签或具有某属性的元素。
-
排除input元素:
p:not(input) —— 虽然 p 不可能是 input,但在通用容器中可写成:span:not(input[type="text"]) -
排除有 disabled 属性的按钮:
button:not([disabled]) { cursor: pointer; }
只为未禁用的按钮设置手型光标。 -
排除带 href 的 a 标签:
a:not([href]) { color: gray; text-decoration: none; }
让没有链接地址的 a 标签样式变淡。
组合使用提升精确度
:not 可以链式使用,实现更精细的筛选。
/* 排除特定类和特定属性的输入框 */input:not(.ignore):not([readonly]) {
border: 1px solid #ccc;
}
这样只对非忽略类且非只读的输入框添加边框。
基本上就这些。合理使用 :not 能让你的CSS更简洁、逻辑更清晰,避免冗余覆盖和 !important 的滥用。注意不要嵌套复杂选择器,因为 :not() 仅支持简单选择器(不能嵌套 :not 或复合选择器)。掌握这个小技巧,样式控制会更得心应手。










