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

4.1.1 Poprawność kodu

Kod strony musi być poprawnie zbudowany (zamknięte znaczniki, prawidłowo zagnieżdżone elementy, żadnego atrybutu ani id użytego dwa razy), żeby oprogramowanie, które go czyta, nie musiało zgadywać.

/ Czego wymaga

To kryterium pochodzi z czasów, gdy czytniki ekranu same analizowały HTML i potykały się o błędny kod. Od treści zapisanej w języku znaczników wymaga czterech rzeczy: elementy mają pełne znaczniki początkowe i końcowe, są zagnieżdżone zgodnie ze swoją specyfikacją, żaden element nie ma dwa razy tego samego atrybutu, a każde id jest unikalne, chyba że specyfikacja dopuszcza inaczej. Gdy kod był błędny, każde narzędzie naprawiało go po swojemu i etykieta albo tabela mogła zostać przypisana nie temu elementowi.

Dziś przeglądarka naprawia kod według ustalonego algorytmu i przekazuje technologii wspomagającej gotowe drzewo, dlatego W3C usunęło 4.1.1 z WCAG 2.2. Dla WCAG 2.0 i 2.1 opublikowało uwagę, że kryterium należy uznawać za zawsze spełnione dla treści w HTML lub XML. Znaczenie ma nadal skutek: zduplikowane id, przez które etykieta albo odwołanie aria-labelledby wskazuje niewłaściwy element, zgłasza się teraz w ramach kryterium 1.3.1 lub 4.1.2.

W3C usunęło to kryterium w WCAG 2.2 jako nieaktualne; pozostaje ono częścią WCAG 2.0 i 2.1, gdzie według W3C należy je traktować jako zawsze spełnione dla treści w HTML i XML.

/ Jak strony go nie spełniają

  • Ta sama wartość id występuje na dwóch lub więcej elementach jednej strony.
  • Komponent, na przykład formularz albo okno dialogowe, jest wstawiony dwa razy i każde id w jego wnętrzu się powtarza.
  • Element został otwarty i nigdy nie został zamknięty albo dwa elementy zamknięto w złej kolejności.
  • Element znajduje się tam, gdzie specyfikacja na to nie pozwala, na przykład div wewnątrz p albo link wewnątrz linku.
  • Element ma dwa razy ten sam atrybut, na przykład dwa atrybuty class.

/ Jak sprawdzić samodzielnie

  1. Sprawdź stronę w darmowym walidatorze W3C Nu Html Checker, podając adres albo wklejając źródło.
  2. Przefiltruj wyniki pod kątem czterech rodzajów komunikatów: zduplikowane ID, niezamknięty element, element niedozwolony jako dziecko oraz zduplikowany atrybut.
  3. W konsoli przeglądarki wypisz wartości id, które na wyrenderowanej stronie występują więcej niż raz. Treść dodana skryptem nigdy nie pojawia się w surowym źródle.
  4. Dla każdego zduplikowanego id wyszukaj na stronie atrybuty for, aria-labelledby, aria-describedby i aria-controls, które używają tej wartości. To te duplikaty zmieniają to, co słyszy użytkownik.

/ Jak to naprawić

  • Nadaj każdemu id wartość unikalną na stronie, zaczynając od tych, na które wskazują atrybuty for, aria-labelledby, aria-describedby i aria-controls.
  • Tam, gdzie komponent jest renderowany więcej niż raz, buduj jego id z klucza danej instancji albo z generowanego przyrostka, a nie ze stałego napisu.
  • Zamknij każdy element, który wymaga znacznika końcowego, i popraw kolejność zachodzących na siebie znaczników końcowych.
  • Przenieś treść blokową poza elementy p i nigdy nie umieszczaj jednego elementu a ani jednego przycisku wewnątrz drugiego.
  • Usuń powtórzone atrybuty, tak żeby każdy element miał jeden atrybut class, id lub style.

/ Co sprawdza nasz skaner

Dwa testy patrzą wyłącznie na id. Test duplicate-id czyta wyrenderowaną stronę i zgłasza id użyte więcej niż raz w tym samym drzewie, licząc osobno dokument i każdy shadow root. F77 z HTML_CodeSniffer zgłasza każdą wartość id powtórzoną w dokumencie. Żaden nie bada znaczników końcowych, zagnieżdżenia ani powtórzonych atrybutów i żaden nie powie, czy duplikat faktycznie psuje etykietę albo odwołanie ARIA.

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

Zmierzone podmioty łamiące to kryterium, najwięcej wystąpień na górze
PodmiotSektorWystąpieniaWynik
Poznańcity · PL1541
Stuttgartcity · DE886
Gdańskcity · PL742
Bundesratgovernment · DE7014
Phoenixcity · US671
Seattlecity · US6612
Wrocławcity · PL402
Baltimorecity · US327
Radomcity · PL262
State of Texasgovernment · US2622
Internal Revenue Servicegovernment · US2220
Amtraktransport · US204
Centrum e-Zdrowiahealth · PL1460
Politechnika Łódzkaeducation · PL125
Szczecincity · PL122
Robert Koch-Instituthealth · DE1110
Cook Countygovernment · US1013
Politechnika Śląskaeducation · PL102
Rzeszówcity · PL108
Freie Universität Berlineducation · DE87
State of Washingtongovernment · US79
Bundesregierunggovernment · DE64
Statistisches Bundesamtgovernment · DE69
Uniwersytet Gdańskieducation · PL618
Uniwersytet Wrocławskieducation · PL615
Uniwersytet Łódzkieducation · PL69
New York Citycity · US537
Bundesministerium der Finanzengovernment · DE413
Hannovercity · DE410
Krajowa Administracja Skarbowagovernment · PL45
Nashvillecity · US412
Nürnbergcity · DE42
Politechnika Poznańskaeducation · PL44
Szkoła Główna Handlowaeducation · PL412
Warszawski Uniwersytet Medycznyeducation · PL413
Berliner Verkehrsbetriebetransport · DE321
Bundesverfassungsgerichtgovernment · DE318
Senat RPgovernment · PL324
Austincity · US220
Białystokcity · PL237
Bostoncity · US26
Bundesministerium des Innerngovernment · DE210
Bydgoszczcity · PL27
Centers for Disease Controlhealth · US28
Department of Laborgovernment · US246
Deutsche Bahntransport · DE25
Gdyniacity · PL27
Hamburgcity · DE223
Katowicecity · PL210
Kölncity · DE216
Lublincity · PL217
Opolecity · PL28
Pacjent.gov.plhealth · PL29
Philadelphiacity · US28
Polski Instytut Sztuki Filmowejculture · PL27
State of Floridagovernment · US28
Toruńcity · PL211
Uniwersytet Jagiellońskieducation · PL21
Uniwersytet Warszawskieducation · PL24
Uniwersytet im. Adama Mickiewiczaeducation · PL212
Urząd Ochrony Danych Osobowychgovernment · PL26
Düsseldorfcity · DE19
Generalna Dyrekcja Dróg Krajowych i Autostradtransport · PL134
Instytut Pamięci Narodowejgovernment · PL143
Politechnika Warszawskaeducation · PL112
Portlandcity · US187

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 kryterium 4.1.1 jest nadal wymagane?

Nie w WCAG 2.2, skąd zostało usunięte jako nieaktualne. Nadal figuruje w WCAG 2.0 i 2.1, a także w normach opartych na wersji 2.1, takich jak EN 301 549 w wersji 3.2.1. Dla tych wersji W3C stwierdziło, że kryterium należy uznawać za zawsze spełnione dla treści w HTML lub XML, więc sam błąd walidacji nie jest już niezgodnością.

Dlaczego kryterium 4.1.1 usunięto z WCAG 2.2?

Napisano je po to, żeby chronić technologie wspomagające, które analizowały HTML bezpośrednio i mogły się pogubić w błędnym kodzie. Dziś technologia wspomagająca czyta drzewo dostępności zbudowane przez przeglądarkę, a przeglądarki naprawiają kod w ustandaryzowany sposób. W3C uznało, że te problemy już nie istnieją albo obejmują je inne kryteria, głównie 1.3.1 i 4.1.2.

Czy zduplikowane id to nadal problem z dostępnością?

Bywa. Gdy dwa elementy mają to samo id, etykieta z atrybutem for albo odwołanie aria-labelledby lub aria-describedby trafia w pierwszy z nich. Pole może wtedy zostać zapowiedziane nazwą innego pola. W WCAG 2.2 zgłasza się to jako niespełnienie kryterium 1.3.1 lub 4.1.2. Zduplikowane id, do którego nic się nie odwołuje, nikomu nie szkodzi.