Pseudoklasa CSSPseudoklasy

:focus-within

Pasuje do elementu, który sam ma fokus albo zawiera element z fokusem. Pozwala wyróżnić cały formularz lub kartę.

Na tej stronie

Przykład

#
CSS
.search {
  border: 1px solid #3f3f46;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.search:focus-within {
  border-color: #a78bfa;
  box-shadow: 0 0 0 3px rgb(167 139 250 / 0.3);
}
Podgląd

Kliknij w pole. Obwódkę dostaje cały kontener z ikoną, więc samo pole może być bez ramki.

Definicja i zastosowanie

#

Pseudoklasa :focus-within przenosi informację o fokusie w górę drzewa. Pasuje do elementu z fokusem i do wszystkich jego przodków. Formularz z :focus-within zmieni wygląd, gdy tylko użytkownik kliknie którekolwiek z jego pól.

To prosty sposób na podświetlenie całej grupy: wiersza formularza, pola wyszukiwania z ikoną czy karty z przyciskami. Wcześniej takie efekty wymagały JavaScriptu.

Działa przy każdym rodzaju fokusu, także po kliknięciu myszą. Jeśli chcesz reagować tylko na fokus z klawiatury, połącz :has() z :focus-visible: .card:has(:focus-visible).

Składnia

#
Składnia
selektor:focus-within { właściwość: wartość; }

Typowe zastosowania

#

Typowe zastosowania w praktyce

#

.demo:focus-within

Kliknij dowolne pole: podświetla się cały formularz.
.demo:focus-within {
  background: rgb(124 58 237 / 0.2);
  outline: 2px solid #a78bfa;
}

label:focus-within

Podświetla się tylko etykieta, w której leży aktywne pole.
label:focus-within { color: #fbbf24; }

.demo:not(:focus-within)

Formularz jest przygaszony, dopóki nie klikniesz w któreś z pól.
.demo:not(:focus-within) { opacity: 0.55; }

.demo:focus-within label:not(:focus-within)

Tryb skupienia: gdy piszesz w jednym polu, drugie blednie.
.demo:focus-within label:not(:focus-within) { opacity: 0.4; }

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

#
  • Gdy ukrywasz obwódkę pola wewnątrz większego komponentu, pokaż fokus na całym komponencie przez :focus-within. Wskaźnik musi zostać widoczny.
  • Menu rozwijane otwierane najechaniem (:hover) otwieraj też przez :focus-within. Wtedy da się z nich korzystać klawiaturą.

Powiązane hasła

#

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