--- title: ':not()' slug: 'Web/CSS/:not' tags: - CSS - Web - 伪类 - 参考 translation_of: 'Web/CSS/:not' ---
CSS 伪类 :not()
用来匹配不符合一组选择器的元素。由于它的作用是防止特定的元素被选中,它也被称为反选伪类(negation pseudo-class)。
/* 选择所有不是段落(p)的元素 */ :not(p) { color: blue; }
注意:
:not()
伪类不能被嵌套,这意味着 :not(:not(...))
是无效的。:not()
中的参数,形如 :not(p::before)
这样的选择器将不会工作。:not(*)
匹配任何非元素的元素,因此,这个规则将永远不会被应用。#foo:not(#bar)
和 #foo
会匹配相同的元素,但是前者的优先级更高。:not(.foo)
将匹配任何非 .foo
的元素,包括 {{HTMLElement("html")}} 和 {{HTMLElement("body")}}。body :not(table) a
依旧会应用到表格元素 {{HTMLElement("table")}} 内部的 {{HTMLElement("a")}} 上, 因为 {{HTMLElement("tr")}}将会被 :not(table)
这部分选择器匹配。:not()
伪类可以将一个或多个以逗号分隔的选择器列表作为其参数。选择器中不得包含另一个否定选择符或 伪元素。
以逗号分隔的选择器列表作为参数是实验性的,尚未获得广泛支持。
<p>我是一个段落。</p> <p class="fancy">我好看极了!</p> <div>我「不是」一个段落。</div>
.fancy { text-shadow: 2px 2px 3px gold; } /* 类名不是 `.fancy` 的 <p> 元素 */ p:not(.fancy) { color: green; } /* 非 <p> 元素 */ body :not(p) { text-decoration: underline; } /* 既不是 <div> 也不是 <span> 的元素 */ body :not(div):not(span) { font-weight: bold; } /* 类名不是 `.crazy` 或 `.fancy` 的元素 */ /* 注意,此语法尚未获广泛支持。 */ body :not(.crazy, .fancy) { font-family: sans-serif; }
{{EmbedLiveSample('Examples')}}
规范 | 状态 | 备注 |
---|---|---|
{{SpecName('CSS4 Selectors', '#negation', ':not()')}} | {{Spec2('CSS4 Selectors')}} | 拓展标准,以允许使用一些复杂的选择器。 |
{{SpecName('CSS3 Selectors', '#negation', ':not()')}} | {{Spec2('CSS3 Selectors')}} | 初始定义。 |
{{Compat("css.selectors.not")}}