Semantyczny HTML
Używanie elementów HTML zgodnie z ich znaczeniem, a nie tylko domyślnym wyglądem. Element `<button>` jest ogłaszany jako przycisk; `<div onclick>` nie jest ogłaszany jako nic. Zdecydowana większość błędów dostępności wynika z porzucenia semantyki.
Semantyczny HTML to HTML, w którym każdy element jest dobierany ze względu
na swoje znaczenie, a nie tylko wygląd. Element <button> służy do
akcji. Element <nav> obejmuje nawigację. Element <table> zawiera dane
tabelaryczne. Użycie elementu <div> ostylowanego na przycisk w celu
wykonania akcji jest błędem semantycznym — nawet jeśli efekt wizualny jest
identyczny.
Zdecydowana większość błędów dostępności wynika z porzucenia semantyki. Niemal każda awaria technologii wspomagającej ma tę samą przyczynę: ogólny element wykonuje zadanie, do którego zaprojektowano semantyczny.
Dlaczego czytniki ekranu dbają o semantykę
Czytniki ekranu udostępniają HTML użytkownikowi przez drzewo dostępności — wewnętrzną reprezentację zbudowaną z DOM, odwzorowującą każdy element na rolę, nazwę, stan i właściwości. Drzewo dostępności jest tym, co użytkownik faktycznie słyszy.
Natywny element <button> wchodzi do drzewa dostępności jako
button "Wyślij". Element <div> ostylowany na przycisk wchodzi jako
generic — co oznacza, że czytnik ekranu nie ogłasza nic użytecznego
i użytkownik nie ma możliwości odkrycia, że div jest interaktywny.
Ta sama logika dotyczy:
- Nagłówków (
<h1>–<h6>) — czytniki ekranu umożliwiają użytkownikom przeskakiwanie między nagłówkami w celu przeglądania strony.<div class="heading">nie pojawia się na liście nagłówków. - List (
<ul>,<ol>,<li>) — czytniki ekranu ogłaszają „lista, 5 elementów” przed odczytaniem. Elementy<div>udające pozycje listy — nie. - Formularzy — element
<input>z powiązaną etykietą<label>jest odczytywany jako „E-mail, pole edycji”. Niestandardowe pole wejściowe zbudowane zdivicontenteditablenie ogłasza niczego. - Tabel — element
<table>z nagłówkami<th>dla wierszy i kolumn umożliwia nawigację po komórkach z kontekstem nagłówka ogłaszanym na bieżąco. Siatki CSS złożone zdiv— nie.
Wzorzec zastępowania
Poprawka ma niemal zawsze ten sam kształt:
<div onclick="...">→<button>(lub<a href>dla nawigacji).<span class="link">→<a href>.<div role="heading">→<h1>do<h6>.- Niestandardowe listy rozwijane →
<select>tam, gdzie projekt na to pozwala, lub przetestowany wzorzec ARIA combobox tam, gdzie nie pozwala. - Zakładki zbudowane ze stylizowanych elementów
<div>→ wzorzec zakładek z ARIA Authoring Practices Guide.
Kiedy sięgać po ARIA
Pierwsza zasada ARIA brzmi: nie należy używać ARIA, jeśli natywny element
spełnia swoje zadanie. Role, stany i właściwości ARIA stanowią łatę dla
przypadków, gdy natywny HTML nie może opisać budowanego widżetu (widoki
drzewiaste, pola kombi z wielokrotnym wyborem, pewne wzorce modalne). Nie
są zamiennikiem elementu <button>.
Praktyczny audyt
Najszybszym sposobem wykrycia degradacji semantyki w kodzie jest wyszukanie
onclick na elementach div i span. Każde trafienie to potencjalny
błąd. Kolejny szybki sposób: wyszukanie atrybutów role=. ARIA jest
dopuszczalna w ograniczonych kontekstach, ale intensywne jej stosowanie
często sygnalizuje, że natywne elementy zostały pominięte ze względów
stylistycznych, które w rzeczywistości nie wymagały tego pominięcia.