- Poziom
- A
- Od wersji
- WCAG 2.0
- Pozycje
- 31 / 193
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
- 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.
- 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.
- Otwórz z klawiatury każde menu, akordeon, okno dialogowe i kalendarz, skorzystaj z niego, a potem zamknij klawiszem Escape albo przyciskiem zamykania.
- Poszukaj elementów, które reagują tylko na najechanie, przeciąganie albo dwuklik, i sprawdź, czy do tego samego efektu prowadzi droga z klawiatury.
- 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
| Podmiot | Sektor | Wystąpienia | Wynik |
|---|---|---|---|
| Hannover | city · DE | 42 | 10 |
| Bydgoszcz | city · PL | 25 | 7 |
| Radom | city · PL | 13 | 2 |
| Chicago Transit Authority | transport · US | 12 | 4 |
| Olsztyn | city · PL | 10 | 8 |
| Phoenix | city · US | 7 | 1 |
| Trybunał Konstytucyjny | government · PL | 7 | 14 |
| Teatr Wielki Opera Narodowa | culture · PL | 6 | 3 |
| Uniwersytet Warszawski | education · PL | 5 | 4 |
| State of Washington | government · US | 4 | 9 |
| Uniwersytet Marii Curie-Skłodowskiej | education · PL | 4 | 9 |
| Uniwersytet Mikołaja Kopernika | education · PL | 4 | 6 |
| Bundesnetzagentur | government · DE | 3 | 9 |
| Baltimore | city · US | 2 | 7 |
| Freie Universität Berlin | education · DE | 2 | 7 |
| PKP Intercity | transport · PL | 2 | 2 |
| Pacjent.gov.pl | health · PL | 2 | 9 |
| Rybnik | city · PL | 2 | 6 |
| Berlin | city · DE | 1 | 41 |
| Cook County | government · US | 1 | 13 |
| Częstochowa | city · PL | 1 | 21 |
| Deutsche Bahn | transport · DE | 1 | 5 |
| Internal Revenue Service | government · US | 1 | 20 |
| Köln | city · DE | 1 | 16 |
| Ministerstwo Rolnictwa | government · PL | 1 | 32 |
| Policja | government · PL | 1 | 12 |
| RWTH Aachen | education · DE | 1 | 19 |
| Stuttgart | city · DE | 1 | 6 |
| University of Florida | education · US | 1 | 23 |
| Uniwersytet Ekonomiczny w Krakowie | education · PL | 1 | 15 |
| Łódź | city · PL | 1 | 3 |
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.
