
本文详解:not()伪类选择器中多参数的逻辑本质——它执行的是“否定整个列表”,而非对各伪类分别取反;错误理解会导致样式失效,尤其在混合使用:disabled和:read-only时。
本文详解`:not()`伪类选择器中多参数的逻辑本质——它执行的是“否定整个列表”,而非对各伪类分别取反;错误理解会导致样式失效,尤其在混合使用`:disabled`和`:read-only`时。
CSS 中的 :not() 是一个否定伪类选择器,但其语法行为常被误解。关键点在于::not(A, B) 并不等价于 :not(A):not(B),而是等价于 :not(A), :not(B) 的逻辑或否定——即匹配既不满足 A 也不满足 B 的元素。更准确地说,现代 CSS 规范(CSS Selectors Level 4)明确定义::not(X, Y, Z) 表示“匹配所有不匹配 X、Y 或 Z 中任意一个的选择器”的元素。换言之,它是对整个选择器列表的否定,语义上接近「非(X 或 Y 或 Z)」,即逻辑上的德·摩根定律展开::not(X, Y, Z) ≡ :not(X):not(Y):not(Z)。
然而,在你的原始代码中:
.input:not(:disabled, :read-only):hover {
color: blue;
}
浏览器实际将其解析为:
✅ 匹配同时不匹配 :disabled 且不匹配 :read-only 的 .input 元素(即 :not(:disabled):not(:read-only))。
而
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










