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

1.3.1 Informacje i relacje

Struktura widoczna na ekranie (nagłówki, listy, tabele, etykiety) musi istnieć w kodzie strony, a nie tylko w stylach.

/ Czego wymaga

To, co osoba widząca odczytuje z układu strony, musi być dostępne także dla oprogramowania. Duży pogrubiony tekst wygląda jak nagłówek, wcięta kolumna jak lista, siatka jak tabela, a słowo obok pola jak jego etykieta. Jeśli kod strony nie mówi tego samego, czytnik ekranu odczytuje jednolity ciąg tekstu, a jego użytkownik nie przeskoczy między nagłówkami, nie usłyszy, do której kolumny należy komórka, i nie dowie się, o co pyta pole formularza.

Kryterium jest spełnione, gdy każdą taką relację da się ustalić na podstawie kodu albo gdy jest ona podana w tekście. Pole wymagane oznaczone słowem „wymagane” przechodzi; pole oznaczone wyłącznie czerwoną ramką nie. WCAG nie nakazuje jednego h1 na stronie ani nie zakazuje pominięcia poziomu nagłówka i nie wymienia tu żadnych wyjątków. Błędem jest rozbieżność: struktura, która istnieje dla oka, a nie w kodzie, albo kod deklarujący strukturę, której treść nie ma.

/ Jak strony go nie spełniają

  • Nagłówki to akapity lub elementy div z dużą, pogrubioną czcionką, więc strona nie ma konspektu, po którym da się poruszać.
  • Pole formularza nie ma elementu label ani dostępnej nazwy albo opiera się na podpowiedzi placeholder, która znika po wpisaniu pierwszego znaku.
  • Tabela danych nie ma komórek th, więc każda wartość jest odczytywana bez swojej kolumny i wiersza.
  • Lista jest zbudowana ze znaków nowej linii i myślników albo element ul zawiera dzieci, które nie są elementami li.
  • Grupa pól radio lub checkbox nie ma elementów fieldset i legend, więc każda opcja jest odczytywana bez pytania.

/ Jak sprawdzić samodzielnie

  1. Wyświetl listę nagłówków w czytniku ekranu (NVDA: Insert+F7) albo w rozszerzeniu przeglądarki pokazującym konspekt strony. Porównaj ją z tym, co na ekranie wygląda jak nagłówek.
  2. Kliknij widoczną etykietę każdego pola formularza. Jeśli kursor nie trafia do pola, etykieta nie jest z nim powiązana.
  3. Zbadaj każdą tabelę danych pod kątem elementów th i atrybutu scope, a każdą listę widoczną na ekranie pod kątem ul, ol i li.
  4. Wyłącz style (Firefox: Widok, Styl strony, Bez stylu) i sprawdź, czy nagłówki, listy i tabele nadal da się rozpoznać.
  5. W czytniku ekranu przeskakuj po punktach orientacyjnych i upewnij się, że treść główna, nawigacja i stopka są osiągalne.

/ Jak to naprawić

  • Oznacz nagłówki elementami od h1 do h6 w kolejności zgodnej z treścią i nie używaj ich do samego powiększania tekstu.
  • Każdemu elementowi input, select i textarea daj element label połączony z nim atrybutami for i id, a powiązane opcje obejmij elementem fieldset z legend.
  • Komórki nagłówkowe zapisz jako th z atrybutem scope="col" lub scope="row" i dodaj caption z nazwą tabeli.
  • Listy buduj z ul, ol i li, tak aby li były jedynymi bezpośrednimi dziećmi listy.
  • Obejmij obszary strony elementami main, nav, header i footer, a każdą kartę połącz z jej panelem atrybutem aria-controls.

/ Co sprawdza nasz skaner

Skan statyczny liczy elementy h1 (brak albo więcej niż jeden), przeskoki poziomów nagłówków, brak elementu main i tabele bez th. Skan na wyrenderowanej stronie dodaje treść poza punktami orientacyjnymi, listy z obcymi elementami, pola bez etykiety lub tylko z podpowiedzią placeholder, grupy opcji bez legendy i karty niepołączone z panelem. HTML_CodeSniffer dodaje puste nagłówki. Tekstu, który tylko wygląda jak nagłówek, nie widzi żadne z tych narzędzi.

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

Zmierzone podmioty łamiące to kryterium, najwięcej wystąpień na górze
PodmiotSektorWystąpieniaWynik
State of Washingtongovernment · US179
Bundesratgovernment · DE1614
Gdyniacity · PL157
Bydgoszczcity · PL137
State of Floridagovernment · US128
Veterans Affairsgovernment · US1233
Seattlecity · US1012
Denvercity · US951
Poznańcity · PL91
Bundeszentrale für politische Bildunggovernment · DE810
Düsseldorfcity · DE89
Statistisches Bundesamtgovernment · DE89
Las Vegascity · US78
Rzecznik Praw Obywatelskichgovernment · PL742
Harris Countygovernment · US619
Indianapoliscity · US618
Karlsruher Institut für Technologieeducation · DE619
Ohio State Universityeducation · US66
Politechnika Warszawskaeducation · PL612
Uniwersytet Jagiellońskieducation · PL61
Urząd Ochrony Danych Osobowychgovernment · PL66
Łódźcity · PL63
Chicago Transit Authoritytransport · US54
Deutsche Rentenversicherunggovernment · DE55
Los Angeles Countygovernment · US59
State of Pennsylvaniagovernment · US521
Uniwersytet Wrocławskieducation · PL515
Wrocławcity · PL52
Bundesministerium der Justizgovernment · DE47
Deutsche Nationalbibliothekculture · DE423
HealthCare.govhealth · US457
Humboldt-Universität zu Berlineducation · DE435
Katowicecity · PL410
Medicarehealth · US451
Nürnbergcity · DE42
Poczta Polskagovernment · PL416
Prezydent RPgovernment · PL415
RWTH Aacheneducation · DE419
Robert Koch-Instituthealth · DE410
San Franciscocity · US428
Sejm RPgovernment · PL49
Szkoła Główna Handlowaeducation · PL412
Universität Heidelbergeducation · DE421
Uniwersytet Ekonomiczny w Krakowieeducation · PL415
Uniwersytet Łódzkieducation · PL49
Uniwersytet Śląskieducation · PL49
Amtraktransport · US34
Austincity · US320
Białystokcity · PL337
Biblioteka Narodowaculture · PL316
Bundesagentur für Arbeitgovernment · DE316
Bundesministerium der Finanzengovernment · DE313
Bundesministerium des Innerngovernment · DE310
Bundesministerium für Bildung und Forschunggovernment · DE38
Bundesministerium für Gesundheitgovernment · DE346
Bundesverfassungsgerichtgovernment · DE318
Gliwicecity · PL313
Leipzigcity · DE326
Library of Congressculture · US330
Ludwig-Maximilians-Universität Müncheneducation · DE313
Najwyższa Izba Kontroligovernment · PL341
Narodowy Instytut Dziedzictwaculture · PL36
Pacjent.gov.plhealth · PL39
Państwowa Komisja Wyborczagovernment · PL315
Państwowa Straż Pożarnagovernment · PL328
Phoenixcity · US31
Politechnika Łódzkaeducation · PL35
Politechnika Śląskaeducation · PL32
Płockcity · PL352
Rzeszówcity · PL38
State of Texasgovernment · US322
Travis Countygovernment · US337
Trybunał Konstytucyjnygovernment · PL314
University of Texas at Austineducation · US321
Uniwersytet Warszawskieducation · PL34
Zakład Ubezpieczeń Społecznychgovernment · PL327
Berlincity · DE241
Bundesnetzagenturgovernment · DE29
Bundesregierunggovernment · DE24
Centrum e-Zdrowiahealth · PL260
Częstochowacity · PL221
Dallascity · US223
Detroitcity · US240
Dresdencity · DE215
Generalna Dyrekcja Dróg Krajowych i Autostradtransport · PL234
Gorzów Wielkopolskicity · PL266
Główny Urząd Statystycznygovernment · PL217
Kancelaria Prezesa Rady Ministrówgovernment · PL237
Kasa Rolniczego Ubezpieczenia Społecznegogovernment · PL236
Komisja Nadzoru Finansowegogovernment · PL217
Krakówcity · PL212
Lublincity · PL217
Miami-Dade Countygovernment · US220
Ministerstwo Cyfryzacjigovernment · PL237
Ministerstwo Edukacjigovernment · PL247
Ministerstwo Finansówgovernment · PL247
Ministerstwo Infrastrukturygovernment · PL247
Ministerstwo Klimatu i Środowiskagovernment · PL238
Ministerstwo Kulturygovernment · PL247
Ministerstwo Nauki i Szkolnictwa Wyższegogovernment · PL247
Ministerstwo Rodziny i Polityki Społecznejgovernment · PL237
Ministerstwo Rolnictwagovernment · PL232
Ministerstwo Rozwoju i Technologiigovernment · PL236
Ministerstwo Spraw Wewnętrznychgovernment · PL237
Ministerstwo Spraw Zagranicznychgovernment · PL237
Ministerstwo Sprawiedliwościgovernment · PL225
Ministerstwo Zdrowiagovernment · PL247
Minneapoliscity · US279
Narodowy Bank Polskigovernment · PL223
Narodowy Fundusz Zdrowiahealth · PL218
New York Public Libraryculture · US223
Olsztyncity · PL28
Opolecity · PL28
PKP SAtransport · PL272
Philadelphiacity · US28
Polski Instytut Sztuki Filmowejculture · PL27
Senat RPgovernment · PL224
Stiftung Preußischer Kulturbesitzculture · DE221
Sąd Najwyższygovernment · PL214
Technische Universität Müncheneducation · DE214
Tychycity · PL220
University of California, Berkeleyeducation · US271
Universität Hamburgeducation · DE236
Uniwersytet Gdańskieducation · PL218
Urząd Zamówień Publicznychgovernment · PL247
Zamek Królewski w Warszawieculture · PL216
AGHeducation · PL154
Baltimorecity · US17
Bostoncity · US16
Bremencity · DE178
Centers for Disease Controlhealth · US18
Department of Educationgovernment · US175
Department of Justicegovernment · US139
Department of Laborgovernment · US146
Deutsche Bahntransport · DE15
Elblągcity · PL120
Federal Aviation Administrationtransport · US114
Frankfurt am Maincity · DE140
Freie Universität Berlineducation · DE17
Gdańskcity · PL12
Hannovercity · DE110
Houstoncity · US17
Instytut Pamięci Narodowejgovernment · PL143
Internal Revenue Servicegovernment · US120
Kielcecity · PL171
King Countygovernment · US115
Krajowa Administracja Skarbowagovernment · PL15
Kölncity · DE116
LA Metrotransport · US117
Münchencity · DE122
NASAgovernment · US119
Narodowy Instytut Zdrowia Publicznegohealth · PL125
Nashvillecity · US112
National Institutes of Healthhealth · US171
National Weather Servicegovernment · US134
New Orleanscity · US17
New York Citycity · US137
PKP Intercitytransport · PL12
Państwowa Inspekcja Pracygovernment · PL150
Policjagovernment · PL112
Politechnika Gdańskaeducation · PL122
Politechnika Poznańskaeducation · PL14
Politechnika Wrocławskaeducation · PL117
Radomcity · PL12
Rybnikcity · PL16
Smithsonianculture · US114
Social Security Administrationgovernment · US1-
Sosnowieccity · PL128
State of Californiagovernment · US148
Stuttgartcity · DE16
Szczecincity · PL12
Teatr Wielki Opera Narodowaculture · PL13
Toruńcity · PL111
University of Floridaeducation · US123
Uniwersytet Marii Curie-Skłodowskiejeducation · PL19
Uniwersytet Mikołaja Kopernikaeducation · PL16
Urząd Komunikacji Elektronicznejgovernment · PL125
Warszawacity · PL120
Warszawski Uniwersytet Medycznyeducation · PL113
Zarząd Transportu Miejskiego Warszawatransport · PL177
Zielona Góracity · PL17

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 pominięcie poziomu nagłówka narusza WCAG?

Samo w sobie nie. Kryterium 1.3.1 wymaga, żeby struktura nagłówków w kodzie odzwierciedlała strukturę treści; nie mówi, że po h2 musi następować h3. Mimo to warto to poprawić, bo użytkownicy czytników ekranu przeglądają stronę po konspekcie, a luka wygląda jak brakująca sekcja. Dlatego nasz skaner zgłasza pominięty poziom jako problem o umiarkowanej wadze.

Czy strona może mieć więcej niż jeden nagłówek h1?

WCAG tego nie zakazuje. Wystarczy, że nagłówki są oznaczone jako nagłówki, a ich poziomy odpowiadają organizacji treści. Jeden h1 z nazwą strony to konwencja, której spodziewa się większość użytkowników czytników ekranu, więc kilka takich nagłówków utrudnia czytanie konspektu. Nasz skaner zgłasza więcej niż jeden h1 jako problem o umiarkowanej wadze w ramach 1.3.1: to sygnał słabej struktury, a nie dowód naruszenia.

Czy placeholder wystarczy jako etykieta pola?

Nie. Podpowiedź placeholder znika, gdy tylko ktoś zacznie pisać, często jest zbyt blada, by ją przeczytać, i nie każda technologia wspomagająca traktuje ją jak etykietę. Użyj widocznego elementu label połączonego z polem atrybutami for i id. Tam, gdzie widoczna etykieta jest niemożliwa, na przykład przy pojedynczym polu wyszukiwania z przyciskiem, nazwę polu nada atrybut aria-label.