Sprawdzanie kontrastu WCAG
Sprawdź kontrast kolorów tekstu i tła pod kątem WCAG 2.1 (AA i AAA). Podgląd na żywo, sugestia koloru. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Duży tekst — 24 px (lub 18,7 px pogrubiony)
Zwykły tekst akapitu — 16 px. Tak wyglądałby opis na stronie przy tych kolorach.
Drobny tekst 13 px — stopki, podpisy pod zdjęciami, przypisy.
PrzyciskOceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćSprawdzanie kontrastu WCAG – AA i AAA dla dostępności
Kontrast kolorów to kluczowy wymóg dostępności (WCAG). Niski kontrast sprawia, że tekst jest nieczytelny dla osób z niedowidzeniem, daltonizmem lub czytaniem w słonecznym świetle. Narzędzie sprawdza parę kolor tekstu / kolor tła i ocenia zgodność z WCAG 2.1.
WCAG 2.1 – poziomy kontrastu
AA (minimum): tekst normalny (< 18px lub <14px bold) ≥ 4.5:1. Tekst duży (≥ 18px lub ≥ 14px bold) ≥ 3:1. Komponenty UI i grafikę informacyjną ≥ 3:1. AAA (zwiększone): tekst normalny ≥ 7:1. Tekst duży ≥ 4.5:1. Poziom AAA: zalecany dla treści krytycznych (instrukcje medyczne, formularze prawne).
Jak obliczany jest kontrast
Relative luminance (L): L = 0.2126R + 0.7152G + 0.0722B (po linearyzacji gamma). Kontrast ratio = (L1+0.05)/(L2+0.05) gdzie L1 > L2. Wynik: 1:1 (brak kontrastu) do 21:1 (biały na czarnym). Narzędzie oblicza automatycznie dla dowolnej pary HEX/RGB/HSL.
Jak działa sprawdzanie kontrastu
Wybierz kolory próbnikiem albo wpisz je jako HEX, rgb() lub hsl(). Narzędzie liczy współczynnik kontrastu według WCAG 2 i od razu ocenia pięć kryteriów: zwykły i duży tekst na poziomach AA i AAA oraz elementy interfejsu i grafikę (3:1, kryterium 1.4.11). Podgląd pokazuje tekst 24 px, 16 px i 13 px oraz przycisk w wybranych kolorach.
Gdy para nie spełnia progu, pojawia się propozycja najbliższego koloru tekstu, który go spełnia — ta sama barwa, zmieniona tylko jasność — osobno dla AA i AAA. Jedno kliknięcie podstawia kolor. Przycisk „Zamień kolory” sprawdza odwrotny układ (jasny tekst na ciemnym tle).
Najczęstsze błędy kontrastu
Szary tekst na białym tle: #999999 na #FFFFFF = 2.85:1 (fail). Jasnoniebieski link na białym: #74B9FF = 2.4:1 (fail). Żółty tekst na białym: prawie zawsze fail. Placeholder input: często za jasny (wielu deweloperów nie sprawdza placeholderów). Disabled states: WCAG zwalnia z wymogu dla wyłączonych elementów.
Wskazówki przy doborze kolorów
Ciemny tekst na jasnym tle: łatwiej osiągnąć wysokie ratio. Lekko ciemniejszy primary: #0060DF zamiast #0085FF – lepszy kontrast przy zachowanym kolorze. Tryb ciemny: biały tekst na ciemnym tle – sprawdź osobno. Narzędzie sugeruje automatycznie najbliższy kolor spełniający AA.
Jak narzędzie liczy kontrast – wzór WCAG krok po kroku
Narzędzie przyjmuje dwa kolory: tekstu i tła. Niezależnie od formatu wejściowego (HEX, RGB czy HSL) sprowadza je najpierw do trzech kanałów w zakresie 0–255, a potem dzieli każdy przez 255, otrzymując wartości z przedziału 0–1. Dzięki temu ten sam wzór działa dla zapisu #999999, rgb(153,153,153) i hsl(0, 0%, 60%). Porównanie jest symetryczne – nie ma znaczenia, który kolor wskażesz jako tekst, a który jako tło.
Każdy kanał jest następnie linearyzowany, bo oko reaguje na jasność nieliniowo. Jeśli wartość kanału jest mniejsza lub równa 0,03928, dzieli się ją przez 12,92; w przeciwnym razie stosuje się wzór ((c + 0,055) / 1,055) podniesione do potęgi 2,4. Z trzech składowych powstaje luminancja względna: L = 0,2126 * R + 0,7152 * G + 0,0722 * B. Zielony waży najwięcej, niebieski najmniej, dlatego żółty ma tak wysoką luminancję, a nasycony niebieski tak niską.
Sam kontrast to iloraz: (L jaśniejszego koloru + 0,05) / (L ciemniejszego koloru + 0,05). Stała 0,05 zapobiega dzieleniu przez zero i odpowiada za to, że wynik mieści się w przedziale od 1:1 dla identycznych barw do 21:1 dla czerni i bieli. Narzędzie zestawia otrzymaną wartość z progami WCAG 2.1: AA wymaga 4,5:1 dla tekstu normalnego i 3:1 dla dużego, AAA odpowiednio 7:1 i 4,5:1. Kanał alfa nie jest uwzględniany – kolory trzeba podać już złożone z tłem.
Przykład krok po kroku: szary #999999 na białym tle
- Ustalamy parę: kolor tekstu #999999, kolor tła #FFFFFF. To klasyczna sytuacja – szary tekst na białej karcie.
- Rozbijamy HEX na kanały. 99 szesnastkowo to 153 dziesiętnie, więc R = G = B = 153. Po podzieleniu przez 255 każdy kanał wynosi 0,6.
- Linearyzujemy kanał: (0,6 + 0,055) / 1,055 = 0,6209, a następnie 0,6209 do potęgi 2,4 = 0,3186.
- Liczymy luminancję względną: 0,2126 * 0,3186 + 0,7152 * 0,3186 + 0,0722 * 0,3186. Współczynniki sumują się do 1, a kanały są równe, więc L = 0,3186.
- Luminancja bieli wynosi 1,0. Podstawiamy do wzoru: (1,0 + 0,05) / (0,3186 + 0,05) = 1,05 / 0,3686 = 2,85.
- Wynik 2,85:1 jest poniżej progu 4,5:1, więc tekst normalny nie przechodzi poziomu AA i trzeba przyciemnić szary. Dla porównania biały tekst na tle #767676 daje 4,48:1, czyli wciąż minimalnie za mało dla tekstu normalnego.
Zestawienie typowych par i ich ocena
| Para (tekst na tle) | Kontrast | Ocena |
|---|---|---|
| Biały #FFFFFF na czarnym #000000 | 21:1 | maksymalny możliwy wynik, AAA |
| Czarny #000000 na żółtym #FFFF00 | 19,1:1 | AAA dla obu poziomów tekstu |
| Biały #FFFFFF na #767676 | 4,48:1 | poniżej AA dla tekstu normalnego, powyżej progu 3:1 dla dużego |
| #999999 na białym #FFFFFF | 2,85:1 | poniżej AA i AAA |
| #74B9FF na białym #FFFFFF | 2,4:1 | poniżej AA, typowy zbyt jasny link |
| Żółty #FFFF00 na białym #FFFFFF | bardzo niski, poniżej progu | wariant prawie zawsze kończy się niepowodzeniem |
Praktyczne wskazówki przy pracy z kontrastem
- Testuj paletę hurtowo, nie ekran po ekranie – jeśli kolory są zdefiniowane jako tokeny, przejrzyj każdy kolor tekstu w zestawieniu z każdym tłem, na którym faktycznie występuje. Pojedynczy sprawdzony przycisk nie gwarantuje, że ten sam odcień zadziała w komunikacie błędu.
- Pamiętaj o stanach interakcji – link domyślny, hover, focus, aktywny przycisk i tekst na przycisku to osobne pary kolorów. Najczęściej to właśnie stan hover wypada najsłabiej, bo rozjaśnia kolor bazowy.
- Traktuj duży tekst jako wyjątek, nie regułę – niższy próg 3:1 dla poziomu AA dotyczy naprawdę dużych nagłówków. Gdy w responsywnym layoucie czcionka zmniejszy się poniżej progu, wymaganie wraca do 4,5:1.
- Nie zostawiaj koloru jako jedynego wyróżnika – wysoki kontrast nie zastąpi informacji przekazywanej wyłącznie barwą. Link bez podkreślenia czy pole oznaczone tylko czerwienią wymagają dodatkowego sygnału: podkreślenia, ikony, pogrubienia.
- Sprawdzaj realne tło, a nie deklarowany kolor – tekst często leży na półprzezroczystej nakładce, karcie z cieniem albo gradiencie. Policz kolor wynikowy lub sprawdź skrajne punkty gradientu, bo środek może wypaść lepiej niż brzeg.
Czego narzędzie nie sprawdza
- Tylko jedna para kolorów naraz – gradient, zdjęcie w tle, cień i nakładka z przezroczystością nie są analizowane. Kanał alfa jest ignorowany, więc półprzezroczysty tekst trzeba najpierw złożyć z kolorem pod nim.
- Rzeczywistego renderowania czcionki – wynik liczony jest z surowych wartości sRGB. Antyaliasing, grubość kroju, rozstrzelenie i skalowanie systemowe zmieniają to, co ostatecznie widzi użytkownik.
- Pozostałych wymagań WCAG – kontrast to jedno z kryteriów sukcesu. Narzędzie nie oceni semantyki, kolejności nagłówków, obsługi klawiatury, tekstów alternatywnych ani widoczności fokusu.
- Właściwego progu za Ciebie – czy tekst jest normalny, czy duży, a także czy wymagany jest poziom AA czy AAA, zależy od projektu i przepisów, a nie od samych wartości kolorów.
Najczęstsze pytania
Czy WCAG jest obowiązkowe prawnie?
W Polsce: Ustawa o dostępności cyfrowej (2019, implementacja dyrektywy UE 2016/2102) obowiązuje podmioty publiczne. W UE: European Accessibility Act (2022) rozszerzy wymóg na sektor prywatny (e-commerce) od 2025. USA: Section 508 (rząd), ADA (firmy). Prywatne strony komercyjne w Polsce: brak bezpośredniego obowiązku, ale narażenie na skargi.
Czy kontrast 4.5:1 to dużo?
Dla kontekstu: biały na czarnym = 21:1. Biały na ciemno szarym #767676 = 4.48:1 (prawie AA). Czarny na żółtym #FFFF00 = 19.1:1. Ciemnoniebieska navy na białym: ~12-15:1. Dla zwykłego projektu: 4.5:1 jest osiągalne bez rezygnacji z designu, trzeba tylko sprawdzić.
Jak testować kontrast na całej stronie?
axe DevTools (rozszerzenie Chrome): skanuje całą stronę. WAVE (web accessibility evaluation tool): visual overlay z błędami. Lighthouse: audyt dostępności w Chrome DevTools. Pa11y: CLI tool. Storybook: a11y addon testuje komponenty. Automated testing: 30-40% WCAG issues – resztę trzeba sprawdzić manualnie.
Jak kontrast wpływa na SEO?
Google nie mierzy bezpośrednio kontrastu jako czynnik rankingowy. Ale: niska dostępność = wyższy bounce rate = negatywny sygnał UX. Google Mobile-Friendly Test i PageSpeed mogą flagować problemy dostępności. Core Web Vitals: nie kontrast, ale ogólna jakość UX.
Czy animowany tekst musi spełniać kontrast?
WCAG 1.4.3 (kontrast): dotyczy tekstu "prezentowanego jako tekst" – animacje HTML/CSS podlegają. Tekst na filmach i materiałach video: WCAG 1.4.3 nie dotyczy bezpośrednio, ale WCAG 1.2.2 (napisy) tak. WCAG 2.3.1 (błyski): animowane treści mogą powodować napady – limit 3 błyski/sekundę.
Czy kolejność kolorów ma znaczenie przy liczeniu kontrastu?
Nie. Do jaśniejszej luminancji zawsze dodaje się 0,05 i dzieli przez ciemniejszą powiększoną o 0,05, więc wynik dla pary biały–czarny i czarny–biały jest identyczny i wynosi 21:1.
Tekst ma 20 px i pogrubienie, czy wystarczy 3:1?
Dla poziomu AA duży tekst wymaga 3:1, więc taki wynik wystarczy. Na poziomie AAA duży tekst musi mieć już 4,5:1, a tekst normalny 7:1. Próg zależy też od tego, jak tekst faktycznie się renderuje po skalowaniu.
Jak policzyć kontrast tekstu na przezroczystym tle?
Trzeba najpierw złożyć kolor tekstu z kolorem pod nim i wyznaczyć odcień wynikowy. Narzędzie przyjmuje dwa nieprzezroczyste kolory, więc podaj już złożoną wartość tła.
Dlaczego wynik narzędzia różni się od pomiaru z ekranu?
Narzędzie liczy na wartościach zapisanych w kodzie, a przeglądarka renderuje kolor przez profile barwne, antyaliasing i ewentualne nakładki. Różnice są zwykle niewielkie, ale przy wyniku blisko progu warto zachować zapas.
Czy link wyróżniony tylko kolorem musi mieć wyższy kontrast?
Tak. Jeśli link w treści nie jest podkreślony ani inaczej oznaczony, powinien mieć co najmniej 3:1 kontrastu względem otaczającego tekstu. Sam kontrast linku z tłem tego wymagania nie zastępuje.
Powiązane narzedzia: konwerter HEX na HSL, tester schematow kolorow i generator triadycznych schematow.