Standardy · WCAG 2.2

SC 2.1.4 Poziom A WCAG 2.1

Skróty jednoklawiszowe

Skróty klawiaturowe oparte na pojedynczym znaku (literze, cyfry lub symbolu) muszą być możliwe do wyłączenia, zmiany przypisania lub aktywacji wyłącznie wtedy, gdy odpowiedni komponent ma fokus. Chroni użytkowników sterowania głosem i dyktowania przed przypadkowym ich uruchomieniem.

Czego wymaga

Jeśli strona implementuje skrót klawiaturowy używający wyłącznie klawisza litery, cyfry, interpunkcji lub symbolu — bez modyfikatora takiego jak Ctrl, Alt lub Shift — musi być spełniony co najmniej jeden z poniższych warunków:

  • Skrót można wyłączyć w menu ustawień.
  • Skrót można przypisać ponownie tak, by wymagał jednego lub więcej klawiszy niedrukujących (Ctrl, Alt, Shift, klawisze funkcyjne).
  • Skrót jest aktywny tylko wtedy, gdy odpowiedni komponent ma fokus.

Kryterium istnieje przede wszystkim po to, by chronić użytkowników wprowadzających dane głosowo. Dragon NaturallySpeaking i Voice Control przekształcają słowa mówione w naciśnięcia klawiszy — a przypadkowe „k” w środku zdania może uruchomić destrukcyjny skrót w Gmailu, Slacku lub dowolnej aplikacji używającej jednoklawiszowych akceleratorów.

Jak spełnić kryterium

  • Przeprowadź audyt wszystkich procedur obsługi pojedynczych klawiszy w kodzie: nasłuchiwacze keydown / keypress sprawdzające event.key względem znaku drukowalnego bez jednoczesnego sprawdzania klawiszy modyfikujących.
  • Dodaj panel ustawień „Skróty klawiaturowe” umożliwiający ich całkowite wyłączenie. Gmail i Slack robią to dobrze.
  • Lub: ogranicz zakres skrótów tak, by uruchamiały się tylko wtedy, gdy fokus jest w odpowiednim obszarze (np. j/k do nawigacji po e-mailach tylko gdy fokus jest na liście wiadomości, nie gdy użytkownik pisze odpowiedź).
  • Preferuj skróty z modyfikatorem (Ctrl+/, Alt+N) jako domyślne; rezerwuj skróty jednoklawiszowe dla trybu zaawansowanego aktywowanego przez użytkownika.

Typowe błędy

  • Skróty w stylu Gmaila: j / k / r / a uruchamiające się z dowolnego miejsca w dokumencie, w tym wewnątrz obszarów tekstowych przy odpowiedniej konfiguracji frameworka.
  • Niestandardowe siatki danych, w których Delete usuwa wiersz bez potwierdzenia — bezpieczne dla klawiatury, groźne dla użytkowników głosowych mówiących „usuń ten przecinek”.
  • Odtwarzacze wideo, w których Spacja przełącza odtwarzanie/pauzę globalnie, a nie tylko gdy odtwarzacz ma fokus.
  • Witryny dokumentacji ze skrótem / do ustawiania fokusu w polu wyszukiwania, który działa nawet gdy fokus jest w osadzonym edytorze kodu.

axe-core tego nie wykrywa — wymaga to przeglądu kodu źródłowego lub specjalnych reguł automatycznych z szerszego zestawu testów Deque. Większość błędów produkcyjnych jest wykrywana dopiero wtedy, gdy użytkownik sterowania głosem zgłosi skargę.

Dlaczego to ważne

To kryterium dodano w WCAG 2.1 specjalnie dlatego, że po 2017 roku gwałtownie wzrosło użycie wprowadzania głosowego. Witryna, która nie spełnia 2.1.4, może być praktycznie bezużyteczna dla osoby dyktującej: każdy akapit wywołuje inną akcję. Nawet użytkownicy klawiatury z niepełnosprawnościami ruchowymi, którzy od czasu do czasu naciskają zły klawisz, zyskują na możliwości wyłączenia skrótów jednoklawiszowych.