Funkcjonalność · Poziom A

2.1.2 Brak pułapki na klawiaturę

Jeśli użytkownik może wejść klawiaturą do komponentu, musi też móc z niego wyjść klawiaturą.

Krótko

Jeśli użytkownik może wejść klawiaturą do komponentu, musi też móc z niego wyjść klawiaturą.

Problem w praktyce

Użytkownik przechodzi klawiaturą do modala, menu, odtwarzacza, mapy albo widgetu. Fokus zostaje w środku i nie da się wrócić do reszty strony. Użytkownik jest uwięziony.

To kryterium nie mówi ogólnie o tym, czy funkcja działa z klawiatury. Skupia się na sytuacji, w której da się wejść do komponentu, ale nie da się go opuścić bez myszy.

Kogo to dotyczy

  • Osób korzystających z klawiatury.
  • Osób niewidomych.
  • Osób z niepełnosprawnościami ruchowymi.
  • Osób korzystających z przełączników.
  • Osób słabowidzących korzystających z powiększenia.

Dobry przykład

  • Modal można zamknąć Escape.
  • Z menu można wyjść Tab, Shift+Tab albo Escape.
  • Widget mapy ma instrukcję, jak go opuścić.
  • Po zamknięciu modala fokus wraca w logiczne miejsce.
  • Komponent nie przejmuje klawiatury bez możliwości wyjścia.

Zły przykład

  • Fokus krąży w karuzeli i nie da się przejść dalej.
  • Mapa przechwytuje klawisze i nie pozwala opuścić obszaru.
  • Modal nie zamyka się z klawiatury.
  • Menu rozwijane zatrzymuje Tab.
  • Iframe albo widget blokuje dalszą nawigację.

Przykłady kodu

Dobry kierunek: zamknięcie modala Escape

Escape daje użytkownikowi przewidywalny sposób wyjścia z komponentu.

Kod — JavaScript

document.addEventListener("keydown", function (event) {
  if (event.key === "Escape") {
    closeDialog();
  }
});

Dobry kierunek: powrót fokusu

Po zamknięciu użytkownik wraca do miejsca, z którego otworzył komponent.

Kod — JavaScript

const trigger = document.querySelector("#open-dialog");

function closeDialog() {
  dialog.close();
  trigger.focus();
}

Zły przykład: zatrzymanie Tab bez wyjścia

Blokowanie Tab bez alternatywnej ścieżki może stworzyć pułapkę na klawiaturę.

Kod — JavaScript

document.addEventListener("keydown", function (event) {
  if (event.key === "Tab") {
    event.preventDefault();
  }
});

Przykład graficzny

To jest statyczny schemat edukacyjny. Pokazuje różnicę między pułapką fokusu a komponentem, z którego można przewidywalnie wyjść klawiaturą. Nie jest działającym modalem.

Źle

  1. 1 Wejście do widgetu
  2. 2 Kontrolka w środku
  3. 3 Kolejna kontrolka
  4. 4 Powrót do początku widgetu

Brak drogi dalej. Fokus krąży w komponencie i użytkownik nie może wrócić do reszty strony.

Dobrze

  1. 1 Wejście do komponentu
  2. 2 Kontrolki w środku
  3. 3 Esc — zamknij / Tab — przejdź dalej
  4. 4 Fokus wraca logicznie albo przechodzi dalej

Użytkownik ma przewidywalne wyjście i nie zostaje uwięziony w komponencie.

Sprawdź

  • Tab
  • Shift+Tab
  • Escape
Demo jest statyczną ilustracją. Nie przechwytuje fokusu i nie udaje działającego modala.

Jak sprawdzić

  1. Odłóż mysz.
  2. Wejdź klawiaturą do każdego komponentu.
  3. Sprawdź, czy możesz go opuścić Tab, Shift+Tab albo Escape.
  4. Sprawdź modale, mapy, odtwarzacze, menu, widgety, iframe i karuzele.
  5. Sprawdź, czy po zamknięciu fokus wraca logicznie.
  6. Nie oceniaj wyłącznie automatem. To kryterium wymaga testu manualnego.

Co sprawdzi automat, a czego nie

Automat może wykryć

  • Część elementów interaktywnych bez poprawnej struktury.
  • Niektóre problemy z ukrytym albo nieaktywnym fokusem.
  • Część błędów w modalach i niestandardowych widgetach.

Automat nie oceni pewnie

  • Czy użytkownik faktycznie może wyjść z komponentu w pełnym przepływie.
  • Czy instrukcja wyjścia jest zrozumiała.
  • Czy fokus wraca w logiczne miejsce po zamknięciu.

Typowe błędy

  • Modal bez obsługi Escape.
  • Mapa albo iframe przechwytujące klawiaturę.
  • Karuzela, z której nie da się przejść dalej Tabem.
  • Menu, które zatrzymuje fokus po otwarciu.
  • Brak powrotu fokusu po zamknięciu komponentu.