Pseudoklasa CSS :not() (negacji) wybiera te elementy, które nie są reprezentowane przez listę selektorów prostych (rozdzielanych przecinkami), będącą jej argumentem, np.:
<style>
p :not(span, em)
</style>
…
<p><span>Akapit</span> ciekawego <span>tekstu</span>, który <em>jest</em> <strong>ważny</strong>.</p>
Selektor użyty w tym przykładzie można odczytać tak: „W elemencie p
wybierz wszystkie elementy, oprócz elementów span
i em
”. W efekcie tylko zawartość elementu strong
będzie miała czerwony kolor.
Precyzja selektora :not()
Precyzja selektora pseudoklasy :not()
jest taka sama, jak precyzja jej najbardziej precyzyjnego argumentu, np.:
<style>
p :not(span) {color: red}
div p em {color: green}
</style>
…
<div>
<p>
<span>Akapit</span> ciekawego <span>tekstu</span>, który <em>jest</em> <strong>ważny</strong>.
</p>
</div>
W tym przypadku tekst znajdujący się w elemencie em
będzie miał kolor zielony, ponieważ pierwszy selektor ma taką samą precyzję, jak selektor span
. Teraz spójrz na poniższy przykład:
p :not(span, html body div p i) {color: red}
div p em {color: green}
Tutaj tekst znajdujący się w elemencie em
w powyższym kodzie HTML będzie miał kolor czerwony, ponieważ pierwszy selektor ma taką samą precyzję, jak selektor html body div p i
. Nie ma znaczenia, że na stronie nie występuje element pasujący do tego bardziej precyzyjnego selektora.
Składnia :not
Składnia pseudoklasy :not
:
:not(lista selektorów rozdzielanych przecinkami) {...}
Pseudoklasa :not()
jako argument przyjmuje tzw. niewybaczającą listę selektorów rozdzielonych przecinkami, tzn. jeśli którykolwiek z selektorów na tej liście jest nieprawidłowy, to cała lista zostaje uznana za nieprawidłową i zignorowana.
Zamiast listy selektorów można także użyć pseudoklasy :not()
kilka razy, np.
:not(em, strong)
:not(em):not(strong)
Oba powyższe selektory są równoważne i wybierają wszystkie elementy oprócz elementów em
i strong
.