dostępność stron internetowych – WCAG
WCAG – Web Content Accessibility Guidelines — czyli wytyczne dostępności stron internetowych. Czyli jak robić strony internetowe, żeby dało się z nich korzystać każdemu, osobom z niepełnosprawnościami i neuroróżnorodnościami (neurodiversity).
Wytyczne WCAG opierają się na 4 zasadach:
- Postrzegalność – Perceivable, treść musi być:
- czytelna
- mieć odpowiedni kontrast
- mieć alternatywy (np. alt do obrazków)
- Funkcjonalność – Operable, strona musi działać:
- klawiaturą
- bez „pułapek focusa”
- bez migających elementów wywołujących ataki
- Zrozumiałość – Understandable
- przewidywalna nawigacja
- jasne komunikaty
- brak „niespodzianek”
- Kompatybilność – Robust
- poprawny HTML
- działa z czytnikami ekranu
- zgodna ze standardami
Poziomy WCAG
- A – absolutne minimum
- AA – standard wymagany prawnie (PL, UE)
- AAA – bardzo wysoki poziom (rzadko wymagany)
👉 Dla stron publicznych i komercyjnych wymagane jest WCAG 2.1 AA.
Bonus! 👉 Twoja strona po prostu jest lepsza dla wszystkich użytkowników. I… też dla Google, (SEO bardzo to lubi).
Podstawowa WCAG CHECKLIST WordPress
- Struktura HTML (fundament)
- Używaj semantycznych tagów
- header, nav, main, section, article, footer
- h1 1× na stronę
- Hierarchia nagłówków
- nie przeskakuj: h2 → h4
- każdy block w Gutenbergu powinien zaczynać się logicznym nagłówkiem
- Landmarki
- role=”navigation” tylko gdy nie używasz
- main tylko jeden na stronę
- Używaj semantycznych tagów
- Linki i przyciski (mega ważne)
- Link = nawigacja, button = akcja
- nie rób buttona z < a > jeśli nie nawigujesz
- Tekst linku musi mieć sens bez kontekstu -> zamiast „Kliknij tutaj” daj „Pobierz raport PDF”
- Nie duplikuj linków zamiast: cała karta + button do tego samego URL, daj jeden link, reszta to elementy wizualne
- Linki muszą mieć:
- :hover,
- :focus,
- :focus-visible
- Klawiatura (bez myszy!)
- Wszystko musi być obsługiwalne klawiaturą, czyli przez Tab, Enter, Space
- Focus widoczny – nie używaj outline: none bez zamiennika
- :hover ≠ jedyny stan interakcji, używaj :focus-within, :focus-visible
- Hover / interakcje
- Hover na rodzicu → stylowanie dzieci OK
- Brak „pułapek hovera” czyli tooltip / dropdown musi być dostępny klawiaturą
- Obrazki i media
- Każdy
img ma:
- sensowny alt
- lub pusty alt=”” jeśli dekoracyjny
- Ikona jako link wtedy -> element < a > aria-label=”Otwórz menu” a svg aria-hidden=”true”
- Video: napisy, pauza / stop
- Każdy
- Kolory i kontrast
- 4.5:1 – normalny tekst
- 3:1 – duży tekst / UI
- Informacja ≠ tylko kolor, czyli kolor czerwony = błąd, tylko ikona + tekst + kolor
- Formularze (częsty grzech)
- Każdy input ma label
-
- jasny komunikat tekstowy
- aria-describedby
- Placeholder ≠ label
- Gutenberg / ACF Blocks
- Blok = samodzielna jednostka
- poprawna semantyka
- nie łam DOM
- ACF
- pola true/false → warunkowe klasy OK
- nie generuj pustych wrapperów
- Dynamic blocks
- render_callback → czysty HTML
- unikaj div-soup
- Blok = samodzielna jednostka
- Testy (must-have)
- Przejdź stronę samym Tabem
- Sprawdź
- NVDA / VoiceOver (choć raz)
- Lighthouse → Accessibility
- kontrast (WCAG Contrast Checker)
- Zoom 200% – layout nie może się rozsypać
Najczęstsze błędy (red flags)
- onclick bez klawiatury
- div jako button
- hover-only menu
- brak focusa
- kilka do tego samego URL
- tekst w obrazku
Złota zasada : Jeśli coś da się zrobić myszą — MUSI dać się zrobić klawiaturą.
Hope this helps and happy coding :)
Zobacz jeszcze
Formatting Context i Stacking Context podczas podczas renderowania strony
Formatting Context i Stacking Context to „konteksty”, które przeglądarka tworzy podczas renderowania strony, i oba mają duży wpływ na layout. Formatting Context (kontekst...
css
ciekawe w css #3
inset Właściwość inset określa odległość między elementem a elementem nadrzędnym. Aby inset zadziałał, musisz określić również właściwość position. Inset pozwala skrócić...