Pseudoklasa CSSPseudoklasy

:focus-visible

Pasuje do elementu z fokusem wtedy, gdy przeglądarka uzna, że wskaźnik powinien być widoczny, np. przy nawigacji klawiaturą.

Na tej stronie

Przykład

#
CSS
.btn:focus-visible {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}
Podgląd

Definicja i zastosowanie

#

Pseudoklasa :focus-visible to mądrzejsza wersja :focus. Przeglądarka sama ocenia, czy użytkownikowi przyda się widoczny wskaźnik. Przy przechodzeniu klawiszem Tab pasuje zawsze, a po kliknięciu przycisku myszą zwykle nie, bo wtedy wiadomo, gdzie jest fokus.

Pola tekstowe to wyjątek: po kliknięciu myszą pasują zarówno do :focus, jak i do :focus-visible, bo użytkownik zaraz będzie pisał na klawiaturze i musi widzieć, które pole jest aktywne.

Dzięki temu nie trzeba wybierać między wyglądem a dostępnością. Własny, wyraźny styl fokusu nadajesz w :focus-visible, a osoby klikające myszą nie widzą obwódki na każdym klikniętym przycisku. Domyślna obwódka nowoczesnych przeglądarek też opiera się na tej pseudoklasie.

Składnia

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

Typowe zastosowania

#
  • button:focus-visible

    Kliknij przycisk myszą: obwódki nie ma. Teraz naciśnij Tab: pojawia się, bo nawigujesz klawiaturą.
  • button:focus

    Dla porównania zwykłe :focus: w większości przeglądarek obwódka pojawia się także po kliknięciu myszą.
  • input:focus-visible

    Pole tekstowe pasuje także po kliknięciu myszą, bo zaraz będziesz w nim pisać na klawiaturze.

Typowe zastosowania w praktyce

#

button:focus-visible

Kliknij przycisk myszą: obwódki nie ma. Teraz naciśnij Tab: pojawia się, bo nawigujesz klawiaturą.
button:focus-visible {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}

button:focus

Dla porównania zwykłe :focus: w większości przeglądarek obwódka pojawia się także po kliknięciu myszą.
button:focus {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}

input:focus-visible

Pole tekstowe pasuje także po kliknięciu myszą, bo zaraz będziesz w nim pisać na klawiaturze.
input:focus-visible {
  outline: 3px solid #a78bfa;
  outline-offset: 2px;
}

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

#
  • Nie pisz :focus { outline: none }. Przeglądarki i tak pokazują domyślną obwódkę tylko przy :focus-visible, a jej usunięcie odbiera orientację osobom korzystającym z klawiatury.
  • Efekty najechania łącz z fokusem klawiatury: .link:hover, .link:focus-visible { … }.
  • Dobieraj styl fokusu tak, by był widoczny na każdym tle. Gruba obwódka z outline-offset sprawdza się lepiej niż subtelna zmiana koloru.

Powiązane hasła

#

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