Krótko
Jeśli coś na stronie wygląda jak struktura albo relacja, ta sama informacja musi być dostępna w kodzie albo w tekście.
Postrzegalność · Poziom A
Struktura widoczna na ekranie, na przykład nagłówki, listy, tabele, etykiety i grupy pól, musi być dostępna także w kodzie albo w tekście.
Jeśli coś na stronie wygląda jak struktura albo relacja, ta sama informacja musi być dostępna w kodzie albo w tekście.
Strona wygląda porządnie dla osoby widzącej: jest duży tytuł, lista punktów, tabela, etykiety pól i grupa odpowiedzi. W kodzie te elementy są jednak zwykłymi `div`, tekstem rozdzielonym przez `br` albo tabelą bez nagłówków.
Wtedy czytnik ekranu, tryb czytania, narzędzie do zmiany prezentacji albo inna technologia wspomagająca nie dostaje tej samej struktury. Użytkownik słyszy tekst, ale traci informację, co jest nagłówkiem, co jest listą, które komórki należą do którego nagłówka i które pola tworzą jedną grupę.
Dobre rozwiązanie używa natywnego HTML do tego, co HTML już umie opisać. Wygląd może być dowolny, ale znaczenie musi wynikać z kodu albo z tekstu.
Zły wzorzec opiera się na tym, że coś tylko wygląda jak struktura. Dla osoby widzącej układ może być czytelny, ale w kodzie relacje nie istnieją.
Kod — HTML
<section>
<h2>Dokumenty do pobrania</h2>
<ul>
<li>Regulamin</li>
<li>Polityka prywatności</li>
<li>Deklaracja dostępności</li>
</ul>
</section>
Nagłówek i lista są strukturą w kodzie. Czytnik ekranu może przejść po nagłówkach i powiedzieć, że użytkownik jest na liście z trzema elementami.
Kod — HTML
<div class="big-title">
Dokumenty do pobrania
</div>
<div>
• Regulamin<br>
• Polityka prywatności<br>
• Deklaracja dostępności
</div>
To zły przykład. Tekst wygląda jak nagłówek i lista, ale w kodzie nie ma ani nagłówka, ani listy.
Kod — HTML
<table>
<caption>Terminy szkoleń</caption>
<thead>
<tr>
<th scope="col">Data</th>
<th scope="col">Miasto</th>
<th scope="col">Miejsca</th>
</tr>
</thead>
<tbody>
<tr>
<td>12 czerwca</td>
<td>Warszawa</td>
<td>8</td>
</tr>
</tbody>
</table>
Tabela danych ma tytuł i nagłówki kolumn. Dzięki temu relacja między komórką „8” a nagłówkiem „Miejsca” jest możliwa do ustalenia programowo.
Kod — HTML
<label for="email">
Adres e-mail
</label>
<input
id="email"
name="email"
type="email"
>
Widoczna etykieta jest połączona z konkretnym polem. To jest relacja, której nie zapewnia sam placeholder.
Kod — HTML
<fieldset>
<legend>
Wybierz sposób kontaktu
</legend>
<label>
<input
type="radio"
name="contact-method"
value="email"
>
E-mail
</label>
<label>
<input
type="radio"
name="contact-method"
value="phone"
>
Telefon
</label>
</fieldset>
`fieldset` i `legend` pokazują, że opcje należą do jednej grupy i odpowiadają na wspólne pytanie.
W kodzie: `div`, `br`, zwykły tekst.
Wygląda jak struktura, ale nie jest strukturą w kodzie.
W kodzie: część relacji istnieje, część jest tylko wizualna.
Użytkownik dostaje fragment struktury, ale nadal może stracić ważne relacje.
W kodzie: znaczenie wynika z natywnego HTML.
Wygląd i semantyka mówią użytkownikowi to samo.