Krótko
Wszystko, co da się zrobić myszą, powinno dać się obsłużyć także klawiaturą.
Funkcjonalność · Poziom A
Wszystko, co da się zrobić myszą, powinno dać się obsłużyć także klawiaturą.
Wszystko, co da się zrobić myszą, powinno dać się obsłużyć także klawiaturą.
Użytkownik nie korzysta z myszy. Jeśli menu, przycisk, karuzela, modal, filtr albo formularz działa tylko po kliknięciu myszą, użytkownik nie może wykonać zadania.
To kryterium dotyczy dostępu do funkcji z klawiatury. Nie ocenia jeszcze, czy kolejność fokusu jest idealna, czy fokus jest widoczny albo czy da się wyjść z każdego komponentu bez pułapki.
<button>.<a href="...">.<div> bez obsługi klawiatury.Natywny button działa z klawiatury bez dodatkowego JavaScriptu.
Kod — HTML
<button type="button">
Pokaż szczegóły
</button>
To wygląda jak przycisk i reaguje na kliknięcie myszą, ale nadal jest zwykłym divem. Nie jest domyślnie fokusowalny i nie ma natywnej obsługi Enterem ani Spacją.
Kod — HTML
<div
class="button-like"
onclick="showDetails()"
>
Pokaż szczegóły
</div>
Dlaczego to problem
Ten element może wyglądać jak przycisk i reagować na kliknięcie myszą, ale nadal jest zwykłym divem. Nie trafia domyślnie do kolejności fokusu i nie ma natywnej obsługi Enterem ani Spacją. Użytkownik klawiatury może nie mieć dostępu do tej funkcji.
Czasem ktoś próbuje naprawić taki element przez dodanie roli przycisku i możliwości fokusu. To może przybliżyć element do poprawnego wzorca, ale nadal wymaga ręcznego odtworzenia zachowania natywnego przycisku.
role="button" mówi technologiom wspomagającym, że element ma być traktowany jak przycisk. tabindex="0" pozwala wejść na element Tabem. Ale to nadal nie dodaje automatycznie obsługi Spacji i Entera tak jak natywny button.
Kod — HTML
<div
role="button"
tabindex="0"
onclick="showDetails()"
onkeydown="handleButtonKeydown(event)"
>
Pokaż szczegóły
</div>
Dlaczego to ryzykowne
Da się to naprawiać ręcznie, ale łatwo popełnić błąd. Trzeba pamiętać o roli, fokusie, obsłudze Entera i Spacji oraz stanie komponentu.
Jeśli element ma działać jak przycisk, najprościej i najbezpieczniej użyć <button>.
Kod — HTML
<button type="button">
Pokaż szczegóły
</button>
Dlaczego to dobre
Natywny button ma właściwą rolę, trafia do kolejności fokusu i obsługuje klawiaturę bez ręcznego odtwarzania zachowania przycisku.
Jeśli element prowadzi do innego adresu, użyj linku. Jeśli wykonuje akcję na stronie, użyj przycisku.
Kod — HTML
<a href="/kontakt">
Kontakt
</a>
To proste demo edukacyjne pokazuje różnicę między atrapą przycisku, prawdziwym przyciskiem i prawdziwym linkiem. Button służy do akcji, a link do przejścia. Użyj Tab, Enter i Spacji, żeby sprawdzić obsługę klawiaturą.
To makieta złego wzorca. Wizualnie wygląda jak przycisk i w kodzie może mieć onclick, ale jako zwykły div nie trafia domyślnie do kolejności fokusu. Użytkownik klawiatury może nie osiągnąć go Tabem.
Komunikat pojawi się po aktywacji przycisku.
Przejdź do notatki o linkuTen link prowadzi do konkretnego miejsca na tej samej stronie. Link służy do przejścia, a button do wykonania akcji.
div i span zamiast przycisków.