Poziom
A
Od wersji
WCAG 2.0
Pozycje
31 / 193
/ Kryterium WCAG

2.1.1 Klawiatura

Wszystko, co na stronie da się zrobić myszą, musi dać się zrobić także samą klawiaturą.

/ Czego wymaga

Każdy link, przycisk, pole formularza, menu, zestaw kart, suwak i własny widżet musi działać z klawiatury, bez kroku wymagającego myszy i bez naciskania klawiszy w określonym tempie. Na klawiaturze opierają się inne sposoby obsługi: czytniki ekranu, przełączniki, sterowanie głosem i klawiatury ekranowe wysyłają polecenia klawiaturowe. Gdy kontrolka nie reaguje na klawiaturę, osoby niewidome i osoby, które nie mogą trzymać ani prowadzić myszy, zatrzymują się w tym miejscu.

Strona spełnia kryterium, gdy do każdej funkcji da się dojść i obsłużyć ją klawiszami takimi jak Tab, Shift+Tab, Enter, spacja, strzałki i Escape. Kryterium podaje jeden wyjątek: funkcje, w których dane wejściowe zależą od toru ruchu, a nie tylko od jego punktów końcowych, na przykład rysowanie odręczne. Przeciąganie elementu z miejsca na miejsce wyjątkiem nie jest, bo tam liczą się tylko punkty końcowe. Kryterium 2.1.3 na poziomie AAA usuwa nawet ten wyjątek.

/ Jak strony go nie spełniają

  • Element div albo span ma obsługę kliknięcia, ale nie ma tabindex ani roli, więc klawisz Tab go pomija.
  • Menu rozwijane otwiera się tylko po najechaniu myszą i nie da się go otworzyć z klawiatury.
  • Własna lista wyboru, kalendarz albo suwak reaguje na klikanie i przeciąganie, ale ignoruje klawisze strzałek.
  • Link zapisano jako element a bez atrybutu href i podpięto w skrypcie, co wyrzuca go z kolejności tabulacji.
  • Przycisk zamykania okna dialogowego to ikona w elemencie div, więc osoba korzystająca z klawiatury otworzy okno, ale go nie zamknie.

/ Jak sprawdzić samodzielnie

  1. Odłóż mysz, kliknij w pasek adresu i naciskaj Tab. Porównaj kolejne zatrzymania z kontrolkami, które widzisz, i sprawdź, czy każda z nich dostaje fokus.
  2. Uruchom każdą kontrolkę, do której dojdziesz: Enter na linkach, Enter i spacja na przyciskach, spacja na polach wyboru, strzałki w grupach przycisków radiowych, listach, kartach i menu.
  3. Otwórz z klawiatury każde menu, akordeon, okno dialogowe i kalendarz, skorzystaj z niego, a potem zamknij klawiszem Escape albo przyciskiem zamykania.
  4. Poszukaj elementów, które reagują tylko na najechanie, przeciąganie albo dwuklik, i sprawdź, czy do tego samego efektu prowadzi droga z klawiatury.
  5. Uruchom darmowe narzędzie, na przykład Accessibility Insights for Web, którego widok Tab stops rysuje drogę fokusu, i porównaj tę drogę ze stroną.

/ Jak to naprawić

  • Użyj natywnego elementu: button do akcji, a z atrybutem href do nawigacji, input, select i textarea do danych. Przyjmują fokus i reagują na klawiaturę bez dodatkowego kodu.
  • Gdy własnego elementu nie da się uniknąć, dodaj tabindex="0", odpowiednią rolę i obsługę keydown dla klawiszy Enter i spacji obok obsługi kliknięcia.
  • W widżetach złożonych, takich jak listy kart i menu, zostaw jeden element z tabindex="0", pozostałym daj tabindex="-1" i przenoś fokus między nimi strzałkami.
  • Każdej interakcji opartej na najechaniu lub przeciąganiu daj drugą drogę: przycisk otwierający menu, przyciski w górę i w dół do zmiany kolejności listy, pole tekstowe obok suwaka.

/ Co sprawdza nasz skaner

Na wyrenderowanej stronie działają trzy testy. keyboard-unreachable zgłasza widoczny element, który ma rolę interaktywną albo atrybut onclick, a klawisz Tab do niego nie dochodzi. tabs-no-roving-focus i menu-no-roving-focus zgłaszają listy kart i menu, w których liczba zatrzymań tabulatora jest inna niż dokładnie jedno. Obsługi kliknięcia podpiętej w skrypcie test nie widzi i żaden z nich nie naciska klawiszy, by potwierdzić, że kontrolka działa.

/ Kto je łamie, według naszych pomiarów

Zmierzone podmioty łamiące to kryterium, najwięcej wystąpień na górze
PodmiotSektorWystąpieniaWynik
Hannovercity · DE4210
Bydgoszczcity · PL257
Radomcity · PL132
Chicago Transit Authoritytransport · US124
Olsztyncity · PL108
Phoenixcity · US71
Trybunał Konstytucyjnygovernment · PL714
Teatr Wielki Opera Narodowaculture · PL63
Uniwersytet Warszawskieducation · PL54
State of Washingtongovernment · US49
Uniwersytet Marii Curie-Skłodowskiejeducation · PL49
Uniwersytet Mikołaja Kopernikaeducation · PL46
Bundesnetzagenturgovernment · DE39
Baltimorecity · US27
Freie Universität Berlineducation · DE27
PKP Intercitytransport · PL22
Pacjent.gov.plhealth · PL29
Rybnikcity · PL26
Berlincity · DE141
Cook Countygovernment · US113
Częstochowacity · PL121
Deutsche Bahntransport · DE15
Internal Revenue Servicegovernment · US120
Kölncity · DE116
Ministerstwo Rolnictwagovernment · PL132
Policjagovernment · PL112
RWTH Aacheneducation · DE119
Stuttgartcity · DE16
University of Floridaeducation · US123
Uniwersytet Ekonomiczny w Krakowieeducation · PL115
Łódźcity · PL13

Jedna strona na podmiot, mierzona automatycznie w tygodniowym cyklu. Jeśli podmiot coś naprawił od ostatniego pomiaru, zmiana będzie widoczna przy następnym, a każdy podmiot może odpowiedzieć na swojej stronie.

/ Pytania o to kryterium

Czy WCAG 2.1.1 oznacza, że każdy element musi przyjmować fokus?

Nie. Osiągalne muszą być tylko te elementy, które użytkownik obsługuje: linki, przyciski, pola i własne kontrolki. Nagłówki, akapity i obrazy, które niczego nie robią, powinny zostać poza kolejnością tabulacji. Dodanie tabindex="0" do zwykłego tekstu spowalnia poruszanie się po stronie klawiaturą i nie pomaga osobom korzystającym z czytnika ekranu, bo one czytają tekst innymi poleceniami.

Czy przeciąganie i upuszczanie narusza kryterium 2.1.1?

Tylko wtedy, gdy przeciąganie jest jedynym sposobem wykonania zadania. Wyjątek w kryterium obejmuje dane wejściowe zależne od toru ruchu, na przykład odręczny podpis. Przeniesienie karty między kolumnami zależy od tego, gdzie się zaczyna i kończy, więc potrzebuje odpowiednika z klawiatury, na przykład przycisku przenoszenia albo menu z listą miejsc docelowych.

Czy własne skróty klawiszowe wystarczą, by spełnić 2.1.1?

Mogą być częścią odpowiedzi, ale użytkownik musi umieć je znaleźć i zastosować. Pewna droga jest standardowa: Tab, by dojść do kontrolki, Enter albo spacja, by ją uruchomić, strzałki wewnątrz widżetu. Skróty jednoznakowe mają własne wymaganie w kryterium 2.1.4, które każe dać możliwość ich wyłączenia albo zmiany.