Pseudoklasa CSS :where()

> Dodaj do ulubionych

Pseudoklasa CSS :where() przyjmuje jako argument listę selektorów rozdzielonych przecinkami i wybiera każdy element pasujący do każdego z tych selektorów. Działa tak samo, jak pseudoklasa :is(), tylko nie liczy się do precyzja całego selektora.

W najprostszej pojedynczej postaci pod względem wybieranych elementów pseudoklasa :where() niczym nie różni się od zwykłej listy selektorów, np. dwie poniższe reguły są pod tym względem równoważne:

:where(p, div) {color: green;}
p, div {color: green;}

Przykład użycia :where()

Głównym zastosowaniem pseudoklasy :where() jest upraszczanie długich grup selektorów. Powiedzmy na przykład, że na stronie używamy różnego rodzaju nagłówków – h1-h4 – które mogą znajdować się w różnych elementach, np. header i footer.

Aby zdefiniować styl dla każdego z tych nagłówków w każdym z wymienionych elementów, możemy napisać taką regułę:

header h1,
header h2,
header h3,
header h4,
footer h1,
footer h2,
footer h3,
footer h4 {
  color: green;
}

Pseudoklasa :where() w takim przypadku zaoszczędzi nam bardzo dużo pracy. Poniższy reguła jest równoważna z powyższą:

:where(header, footer) :where(h1, h2, h3, h4) {
  color: green;
}

Najpierw zostanie wybrany pierwszy selektor z pierwszej grupy, a następnie zostanie wybrany pierwszy selektor z drugiej grupy, „tworząc” selektor header h1. Następnie zostanie wybrany pierwszy selektor z pierwszej grupy i drugi selektor z drugiej grupy, „tworząc” selektor footer h2 itd. aż do końca selektorów z drugiej grupy.

Potem zostanie wybrany drugi selektor z pierwszej grupy i pierwszy selektor z drugiej grupy, „tworząc” selektor footer h1 itd.

Precyzja selektora

Pseudoklasa :where() ma zerową precyzję selektora, tzn. nie zmienia ogólnej precyzji selektora, w którym została użyta.

Pod tym względem pseudoklasa :where() różni się od pseudoklasy :is()(), która działa bardzo podobnie, ale wlicza się w precyzję selektora, w którym została użyta.

Składnia :where()

Składnia pseudoklasy :where():

:where(lista selektorów rozdzielonych przecinkami) {...}

Pseudoklasa :where() przyjmuje tzw. wybaczającą listę selektorów, tzn. jeśli którykolwiek z selektorów jest nieprawidłowy, zostaje on zignorowany, a pozostałe zostają normalnie użyte.