The negation CSS pseudo-class, :not(X), is a functional notation taking a simple selector X as an argument. It matches an element that is not represented by the argument. X must not contain another negation selector.
:not(*) matches any element which is not any element, so the rule will never be applied.foo:not(bar) will match the same element as the simpler foo. Nevertheless the specificity of the first one is higher.:not(foo){} will match anything that isn't foo, including <html> and <body>.
body :not(table) a will still apply to links inside of a table, since <tr> will match with the :not() part of the selector.:not( <selector># ) { style properties }
p:not(.classy) { color: red; }
body *:not(p) { color: green; } Given the above CSS and the HTML below...
<p>Some text.</p> <p class="classy">Some other text.</p> <span>One more text<span>
You get output like this:
| Specification | Status | Comment |
|---|---|---|
| Selectors Level 4 The definition of ':not()' in that specification. | Working Draft | Extends its argument to allow some non-simple selectors. |
| Selectors Level 3 The definition of ':not()' in that specification. | Recommendation | Initial definition. |
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 1.0 | 1.0 (1.7 or earlier) | 9.0 | 9.5 | 3.2 |
| Extended arguments | No support | No support | No support | No support | No support |
| Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| Basic support | 2.1 | 1.0 (1) | 9.0 | 10.0 | 3.2 |
| Extended arguments | No support | No support | No support | No support | No support |
© 2005–2017 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/:not