Przejdź do treści
A11ySignal

Lista kontrolna

WCAG 2.2 AA jako lista do odhaczania

Wszystkie 55 kryteria sukcesu poziomu A i AA — zbiór, na który wskazują EN 301 549 i Europejski akt o dostępności. Z podziałem według jedynego rozróżnienia, które zmienia twoje popołudnie: co udowodni skaner, a na co musi spojrzeć człowiek.

23 da się zautomatyzować · 32 wymaga człowieka

Jak z tego korzystać

  1. 1. Najpierw uruchom skanowanie. W minutę zamyka większość z 23 kryteriów, które da się zautomatyzować, a dla jednej strony jest bezpłatne.
  2. 2. Przejdź listę ręczną z klawiaturą i czytnikiem ekranu. Licz godzinę na szablon, nie na stronę.
  3. 3. Zapisz, czego nie udało się naprawić i dlaczego. Ta lista to twoja deklaracja dostępności i to ją organ nadzoru czyta najpierw.

To udowodni skaner

Każde z nich jest sprawdzane automatycznie przy każdym skanowaniu. Czysty wynik tutaj to prawdziwy dowód i najtańszy, jaki dostaniesz.

  • skanowane1.1.1Poziom ATreść nietekstowa

    Wszystko, co nie jest tekstem — obraz, ikona, wykres — potrzebuje wersji tekstowej, która mówi to samo.

    image-alt · input-image-alt · aria-meter-name · aria-progressbar-name

  • Same nagrania dźwiękowe i same nagrania obrazu potrzebują alternatywy niosącej tę samą informację.

    audio-caption

  • skanowane1.2.2Poziom ANapisy rozszerzone (nagranie)

    Nagranie wideo z dźwiękiem potrzebuje napisów.

    video-caption

  • skanowane1.3.1Poziom AInformacje i relacje

    Struktura, którą pokazujesz układem — nagłówki, listy, tabele, grupy — musi istnieć także w kodzie.

    aria-hidden-body · aria-required-children · aria-required-parent · td-has-header

  • skanowane1.3.4Poziom AAOrientacja

    Nie blokuj strony na jednej orientacji ekranu.

    css-orientation-lock

  • skanowane1.3.5Poziom AAOkreślenie prawidłowej wartości

    Pola pytające o dane samego użytkownika powinny w kodzie mówić, o którą daną chodzi.

    autocomplete-valid

  • skanowane1.4.1Poziom AUżycie koloru

    Sam kolor nie może nieść znaczenia.

    link-in-text-block

  • skanowane1.4.2Poziom AKontrola odtwarzania dźwięku

    Dźwięk, który sam gra dłużej niż trzy sekundy, potrzebuje sposobu na zatrzymanie.

    no-autoplay-audio

  • skanowane1.4.3Poziom AAKontrast (minimum)

    Tekst potrzebuje kontrastu co najmniej 4,5:1 wobec tła — 3:1, jeśli jest duży.

    color-contrast

  • skanowane1.4.4Poziom AAZmiana rozmiaru tekstu

    Tekst musi przetrwać powiększenie do 200% bez utraty treści i funkcji.

    meta-viewport

  • skanowane1.4.12Poziom AAOdstępy w tekście

    Strona musi nadal działać, gdy czytający zwiększy interlinię i odstępy między znakami.

    avoid-inline-spacing

  • skanowane2.1.1Poziom AKlawiatura

    Wszystko, co da się zrobić myszą, musi dać się zrobić klawiaturą.

    frame-focusable-content · scrollable-region-focusable · server-side-image-map

  • skanowane2.2.1Poziom ADostosowanie czasu

    Jeśli coś ma licznik czasu, trzeba dać się go wyłączyć, zmienić albo przedłużyć.

    meta-refresh

  • skanowane2.2.2Poziom APauza, zatrzymanie, ukrycie

    Wszystko, co samo się rusza, miga, przewija albo odświeża dłużej niż pięć sekund, potrzebuje pauzy.

    blink · marquee

  • skanowane2.4.1Poziom AMożliwość pominięcia bloków

    Daj ludziom sposób na ominięcie bloków, które powtarzają się na każdej stronie.

    bypass

  • skanowane2.4.2Poziom ATytuły stron

    Każda strona potrzebuje tytułu, który mówi, czym ta strona jest.

    document-title

  • skanowane2.4.4Poziom ACel linku (w kontekście)

    Tekst linku musi mówić, dokąd prowadzi.

    area-alt · link-name

  • skanowane2.5.3Poziom AEtykieta w nazwie

    Dostępna nazwa kontrolki musi zawierać słowa, które są na niej widoczne.

    label-content-name-mismatch

  • skanowane2.5.8Poziom AARozmiar celu (minimum)

    Cele dotknięcia muszą mieć co najmniej 24 na 24 piksele CSS albo być wystarczająco odsunięte.

    target-size

  • skanowane3.1.1Poziom AJęzyk strony

    Strona musi deklarować, w jakim jest języku.

    html-has-lang · html-lang-valid · html-xml-lang-mismatch

  • skanowane3.1.2Poziom AAJęzyk części

    Oznaczaj fragmenty w języku innym niż język strony.

    valid-lang

  • skanowane3.3.2Poziom AEtykiety lub instrukcje

    Każde pole potrzebuje etykiety, a tam, gdzie format nie jest oczywisty — instrukcji.

    form-field-multiple-labels

  • skanowane4.1.2Poziom ANazwa, rola, wartość

    Każda kontrolka musi ujawniać, czym jest, jak się nazywa i w jakim jest stanie.

    area-alt · aria-allowed-attr · aria-hidden-body · aria-required-attr

To wymaga człowieka

Żadne narzędzie tego nie rozstrzygnie. Chodzi o znaczenie i zachowanie — czy tekst alternatywny mówi to, co trzeba, czy kolejność fokusu pasuje do strony, czy własny komponent zachowuje się jak wzorzec, który naśladuje. Kto obiecuje pełne pokrycie, tych kryteriów nie liczy.

  • Nagranie wideo potrzebuje albo audiodeskrypcji tego, co pokazuje, albo alternatywy tekstowej.

    To, czy dźwięk przekazuje wszystko, co pokazuje obraz, jest decyzją człowieka.

  • ręcznie1.2.4Poziom AANapisy rozszerzone (na żywo)

    Treść dźwiękowa nadawana na żywo potrzebuje napisów na żywo.

    Sprawdź ręcznie: skorzystaj z usługi napisów na żywo — a przy wszystkim, gdzie stawka jest wysoka, z człowieka.

  • ręcznie1.2.5Poziom AAAudiodeskrypcja (nagranie)

    Nagranie wideo potrzebuje ścieżki audiodeskrypcji.

    Sprawdź ręcznie: dodaj ścieżkę audiodeskrypcji albo nagraj narrację od nowa tak, by opisywała, co się dzieje.

  • ręcznie1.3.2Poziom AZrozumiała kolejność

    Kolejność, w jakiej treść jest odczytywana, musi mieć sens.

    Skaner nie wie, jaką kolejność miałeś na myśli. Przeczytaj stronę z wyłączonym CSS-em.

  • ręcznie1.3.3Poziom AWłaściwości zmysłowe

    Nie tłumacz niczego wyłącznie kształtem, rozmiarem, położeniem albo dźwiękiem.

    To w całości zadanie do przeczytania. Żadne narzędzie tego nie wykryje.

  • ręcznie1.4.5Poziom AAObrazy tekstu

    Używaj prawdziwego tekstu, nie obrazków z tekstem.

    Skaner nie widzi tekstu wewnątrz obrazu. Tu potrzeba oczu.

  • ręcznie1.4.10Poziom AADopasowanie do ekranu

    Treść musi przelać się do okna o szerokości 320 px bez poziomego paska przewijania.

    Sprawdź ręcznie: zbuduj układ tak, żeby się przelewał. jeśli już jesteś responsywny, masz to w większości za sobą.

  • ręcznie1.4.11Poziom AAKontrast elementów nietekstowych

    Elementy interfejsu i grafiki niosące znaczenie potrzebują kontrastu 3:1, nie tylko tekst.

    Sprawdź ręcznie: doprowadź obramowania, obwódki fokusu i ikony do co najmniej 3:1 wobec tego, co jest za nimi.

  • ręcznie1.4.13Poziom AATreść spod kursora lub fokusu

    Treść, która pojawia się przy najechaniu albo fokusie, musi dać się zamknąć, najechać i utrzymać.

    Sprawdź ręcznie: trzymaj je otwarte, dopóki wskaźnik jest nad elementem wyzwalającym albo nad samym dymkiem.

  • ręcznie2.1.2Poziom ABez pułapki na klawiaturę

    Fokus klawiatury nigdy nie może utknąć tam, skąd nie da się wyjść.

    Pułapki znajduje się tabulatorem po stronie, nie skanowaniem.

  • Skrót z jednej litery musi dać się wyłączyć albo przypisać na nowo.

    Sprawdź ręcznie: wymagaj klawisza modyfikującego (ctrl, alt, cmd), albo nasłuchuj tylko wtedy, gdy właściwa kontrolka ma fokus, albo pozwól wyłączyć skróty.

  • Nic nie może błyskać częściej niż trzy razy na sekundę.

    Sprawdź ręcznie: zostań poniżej trzech błysków na sekundę albo poniżej progów błysku ogólnego i czerwonego.

  • ręcznie2.4.3Poziom AKolejność fokusu

    Fokus musi przesuwać się w kolejności, która zachowuje sens.

    Przejdź stronę tabulatorem i patrz, gdzie wędruje obwódka fokusu. To cały test.

  • ręcznie2.4.5Poziom AAWiele dróg

    Zaoferuj więcej niż jeden sposób odnalezienia strony.

    Sprawdź ręcznie: dodaj wyszukiwarkę, mapę witryny albo ścieżkę nawigacyjną. dowolne dwie drogi wystarczą.

  • ręcznie2.4.6Poziom AANagłówki i etykiety

    Nagłówki i etykiety muszą opisywać to, co po nich następuje.

    Narzędzie widzi, że nagłówek istnieje, a nie czy cokolwiek opisuje.

  • ręcznie2.4.7Poziom AAWidoczny fokus

    Musi być widać, gdzie znajduje się fokus klawiatury.

    Sprawdź ręcznie: nigdy nie usuwaj obwódki bez zastąpienia jej. ostyluj `:focus-visible`, zamiast kasować `:focus`.

  • Przyklejony nagłówek albo stopka nie mogą całkowicie zasłaniać elementu z fokusem.

    Sprawdź ręcznie: dodaj `scroll-margin-top` równy wysokości nagłówka albo zmniejszaj przyklejony element przy przewijaniu.

  • ręcznie2.5.1Poziom AGesty dotykowe

    Wszystko, co robi się gestem wielopalcowym albo po ścieżce, musi dać się zrobić jednym dotknięciem.

    Sprawdź ręcznie: dodaj obok gestu zwykłe przyciski: przybliż / oddal, poprzedni / następny.

  • ręcznie2.5.2Poziom ARezygnacja ze wskazania

    Akcja nie może odpalać przy naciśnięciu — trzeba dać szansę na wycofanie się.

    Sprawdź ręcznie: odpalaj na `click`, czyli przy puszczeniu — albo daj cofnięcie.

  • ręcznie2.5.4Poziom AAktywowanie ruchem

    Jeśli potrząśnięcie albo przechylenie urządzenia coś robi, musi istnieć kontrolka, która robi to samo.

    Sprawdź ręcznie: dodaj równoważną kontrolkę i pozwól wyłączyć sterowanie ruchem.

  • ręcznie2.5.7Poziom AARuchy przeciągania

    Wszystko, co działa przez przeciąganie, musi działać także bez przeciągania.

    Sprawdź ręcznie: dodaj przyciski, menu albo pole tekstowe, które robią to samo.

  • ręcznie3.2.1Poziom APo oznaczeniu fokusem

    Nadanie czemuś fokusu nie może samo zmieniać strony.

    Sprawdź ręcznie: działaj przy aktywacji — kliknięcie, enter albo wyraźny przycisk — nigdy przy samym fokusie.

  • ręcznie3.2.2Poziom APodczas wprowadzania danych

    Zmiana wartości nie może bez ostrzeżenia robić czegoś nieoczekiwanego.

    Sprawdź ręcznie: dodaj przycisk wysyłania albo uprzedź, co kontrolka zrobi.

  • ręcznie3.2.3Poziom AASpójna nawigacja

    Nawigacja powtarzająca się na kolejnych stronach musi zachować tę samą kolejność.

    Sprawdź ręcznie: zachowaj stabilną kolejność względną. dodanie pozycji jest w porządku; tasowanie nie.

  • ręcznie3.2.4Poziom AASpójna identyfikacja

    To samo musi wszędzie nazywać się tak samo.

    Sprawdź ręcznie: wybierz jedną nazwę na pojęcie i używaj jej w każdej etykiecie, przycisku, powiadomieniu i nagłówku.

  • ręcznie3.2.6Poziom ASpójna pomoc

    Jeśli pomoc jest oferowana na kilku stronach, na każdej musi być w tym samym miejscu.

    Sprawdź ręcznie: trzymaj mechanizmy pomocy w tej samej względnej kolejności na każdej stronie, która je ma.

  • ręcznie3.3.1Poziom AIdentyfikacja błędu

    Gdy dane zostaną odrzucone, napisz tekstem, które pole i co jest nie tak.

    Sprawdź ręcznie: nazwij pole i problem: „kod pocztowy: format 00-000, na przykład 00-950”.

  • ręcznie3.3.3Poziom AASugestie korekty błędów

    Kiedy da się odgadnąć, o co chodziło, podpowiedz poprawkę.

    Sprawdź ręcznie: powiedz, co byłoby poprawne: „format dd.mm.rrrr, na przykład 24.06.2026”.

  • Wysyłki wiążące prawnie lub finansowo oraz zmieniające dane muszą być odwracalne, sprawdzane albo potwierdzane.

    Sprawdź ręcznie: dodaj krok weryfikacji, okno na cofnięcie albo wyraźne potwierdzenie. wystarczy jedno z trzech.

  • ręcznie3.3.7Poziom ANadmiarowe wprowadzanie danych

    Nie każ ludziom wpisywać tej samej informacji dwa razy w jednym procesie.

    Sprawdź ręcznie: wypełnij z góry, zaproponuj pole wyboru „skopiuj” albo pozwól wybrać wcześniejszą wartość.

  • Nie każ ludziom rozwiązywać zagadki ani niczego pamiętać, żeby się zalogowali.

    Sprawdź ręcznie: pozwól wklejać i pozwól menedżerom haseł wypełnić pole.

  • ręcznie4.1.3Poziom AAKomunikaty o stanie

    Komunikaty, które pojawiają się bez przeniesienia fokusu, muszą zostać ogłoszone.

    Sprawdź ręcznie: użyj `role="status"` (grzecznie) albo `role="alert"` (stanowczo) dla rzeczy pilnych.

Tekst kryteriów pochodzi z Web Content Accessibility Guidelines 2.2 W3C. Poziom AAA jest pominięty: nie tego wymaga Europejski akt o dostępności, a W3C nie zaleca go jako celu dla całej witryny. Kryteriów AAA jest 31 i mają własne strony w pełnych materiałach.