Pseudoklasa CSSPseudoklasy

:not()

Wybiera elementy, które nie pasują do podanego selektora ani do żadnego z listy.

Na tej stronie

Przykład

#
CSS
.btn:not(:disabled):hover {
  background: #6d28d9;
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
Podgląd

Najedź na oba przyciski. Wyłączony nie zmienia koloru, bo reguła najechania go wyklucza.

Definicja i zastosowanie

#

Pseudoklasa :not() odwraca warunek. li:not(.done) wybiera punkty listy bez klasy done, a input:not([type="checkbox"]) wszystkie pola oprócz pól wyboru. Pozwala nadać styl „wszystkim oprócz” bez pisania reguły, którą potem trzeba cofać.

Nowoczesne przeglądarki przyjmują w nawiasie listę selektorów, także złożonych: :not(.a, .b) znaczy „ani .a, ani .b”, czyli to samo co :not(.a):not(.b). Lista nie wybacza błędów: jeden nieprawidłowy selektor unieważnia całą regułę. W nawiasie nie mogą też stać pseudoelementy.

Specyficzność :not() to waga najmocniejszego selektora z listy, a nie zero. p:not(#intro) ma więc wagę (1, 0, 1). Uważaj też na samotne :not(p): pasuje do wszystkiego, co nie jest akapitem, także do html i body, więc warto je zawężać, np. .menu > :not(.active).

Składnia

#
Składnia
:not( <lista selektorów> )

Argumenty

#
  • .done

    Każdy punkt bez klasy done, także ten z klasą locked.
  • .done, .locked

    Lista w nawiasie: ani done, ani locked. Zostają dwa zwykłe punkty.
  • :first-child

    Wszystkie punkty oprócz pierwszego.
  • [class]

    Punkty, które w ogóle nie mają atrybutu class.

Argumenty w praktyce

#

.done

Każdy punkt bez klasy done, także ten z klasą locked.
li:not(.done) { background: #7c3aed; color: #fff; }

.done, .locked

Lista w nawiasie: ani done, ani locked. Zostają dwa zwykłe punkty.
li:not(.done, .locked) { background: #7c3aed; color: #fff; }

:first-child

Wszystkie punkty oprócz pierwszego.
li:not(:first-child) { background: #7c3aed; color: #fff; }

[class]

Punkty, które w ogóle nie mają atrybutu class.
li:not([class]) { background: #7c3aed; color: #fff; }

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Zamiast pisać regułę dla wszystkich, a potem cofać ją dla jednego elementu, od razu wyklucz go przez :not(). Kod jest krótszy i nie walczy sam ze sobą.
  • Pilnuj wagi: :not(#id) dodaje specyficzność identyfikatora, choć niczego przez identyfikator nie wybiera.
  • Samotnego :not() używaj zawsze z kontekstem, np. .lista > :not(.ukryty). Bez niego reguła trafi także w html, body i inne elementy.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.