Kombinator CSSSelektory

A ~ B

Znak ~ wybiera wszystkie elementy B, które stoją gdziekolwiek za elementem A i mają z nim wspólnego rodzica.

Na tej stronie

Przykład

#
CSS
.hint {
  display: none;
}

.field input:focus ~ .hint {
  display: block;
}
Podgląd

Kliknij w pole. Podpowiedź stoi dwa elementy dalej, a ~ i tak ją znajdzie. Kombinator + by tu nie zadziałał.

Definicja i zastosowanie

#

Kombinator rodzeństwa, nazywany też kombinatorem dalszego rodzeństwa, to luźniejsza wersja +. Zapis h2 ~ p wybiera każdy akapit, który stoi za nagłówkiem h2 na tym samym poziomie, nawet jeśli między nimi są inne elementy.

Tak jak przy +, liczą się tylko elementy za A, nigdy przed nim, i tylko te o wspólnym rodzicu. Element w innym kontenerze nie pasuje, nawet jeśli w kodzie stoi niżej.

Kombinator przydaje się w interfejsach sterowanych stanem pól formularza: pole na początku kontenera może zmieniać wygląd elementów stojących dalej w tym samym rodzicu, np. input:focus ~ .hint. Dziś podobne efekty często łatwiej zapisać przez :has(), które nie zależy od kolejności elementów.

Składnia

#
Składnia
A ~ B { właściwość: wartość; }

Przykładowe selektory

#
  • .start ~ span

    Każdy span za .start, także piątka stojąca za elementem em. Jedynka odpada, bo stoi przed .start.
  • .start ~ *

    Całe dalsze rodzeństwo .start, bez względu na typ elementu.
  • span ~ span

    Każdy span, przed którym gdziekolwiek wcześniej stoi inny span. Pasują wszystkie oprócz pierwszego.

Przykładowe selektory w praktyce

#

.start ~ span

Każdy span za .start, także piątka stojąca za elementem em. Jedynka odpada, bo stoi przed .start.
.start ~ span { background: #7c3aed; color: #fff; }

.start ~ *

Całe dalsze rodzeństwo .start, bez względu na typ elementu.
.start ~ * { background: #7c3aed; color: #fff; }

span ~ span

Każdy span, przed którym gdziekolwiek wcześniej stoi inny span. Pasują wszystkie oprócz pierwszego.
span ~ span { 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

#
  • Kombinator nie widzi elementów przed A ani w innych kontenerach. Jeśli coś nie działa, sprawdź w narzędziach deweloperskich, czy oba elementy mają tego samego rodzica.
  • Sztuczka z ukrytym polem wyboru i ~ pozwala zrobić menu bez JavaScriptu, ale do menu i akordeonów lepszy jest element <details> albo przycisk z aria-expanded, zrozumiałe dla czytników ekranu.
  • :has() uwalnia od kolejności: .field:has(input:focus) .hint pokaże podpowiedź niezależnie od tego, gdzie w kontenerze stoi.

Powiązane hasła

#

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