Przejdź do głównej treści
Grafika przedstawia ukryty obrazek

Kontrast RGB względem WCAG – jak go obliczyć i poprawić

Zdjecie zwiazane z Kontrast RGB wzgldem WCAG  jak go obliczy i poprawi

Kontrast kolorów w projektowaniu stron internetowych jest kluczowym aspektem dostępności (WCAG – Web Content Accessibility Guidelines). Niski kontrast między tekstem a tłem może powodować problemy z czytelnością, szczególnie dla osób z wadami wzroku. WCAG określa minimalne współczynniki kontrastu, aby tekst był czytelny:

Klasa AA

  • 4.5:1 dla normalnego tekstu
  • 3.0:1 dla dużego tekstu 18pt (24px) i większy lub 14pt (19px) pogrubiony

Klasa AAA

  • 7.0:1 dla normalnego tekstu
  • 4.5:1 dla dużego tekstu 18pt (24px) i większy lub 14pt (19px) pogrubiony

W tym artykule przedstawimy, jak obliczyć kontrast kolorów RGB oraz jak dobrać odpowiednie klasy w Bootstrap 5.3, aby spełnić wymagania WCAG.

Jak obliczyć kontrast według WCAG

Kontrast między dwoma kolorami oblicza się według wzoru:

$${contrast \text{ } ratio} = \frac{L1 + 0.05}{L2 + 0.05} $$

gdzie:

  • L1 to większa wartość luminancji względnej (jaśniejszy kolor)
  • L2 to mniejsza wartość luminancji względnej (ciemniejszy kolor)

Luminancję względną koloru RGB oblicza się następująco:

  1. Przekształcenie wartości kanałów RGB (0-255) na zakres 0-1: \(R' = R/255, \quad G' = G/255, \quad B' = B/255\)
  2. Przekształcenie liniowe:
    • Jeśli wartość \((X' \leq 0.03928), \text{ }to\text{ } (X = X' / 12.92)\)
    • W przeciwnym razie: \((X = ((X' + 0.055) / 1.055) ^{2.4})\)
  3. Luminancja względna: \(L = 0.2126R + 0.7152G + 0.0722B\)

Funkcja w JavaScript do obliczania kontrastu

function getLuminance(r, g, b) {
    let [R, G, B] = [r, g, b].map(value => {
        let v = value / 255;
        return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
    });
    return 0.2126 * R + 0.7152 * G + 0.0722 * B;
}

function getContrastRatio(color1, color2) {
    let L1 = getLuminance(...color1);
    let L2 = getLuminance(...color2);
    let ratio = (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05);
    return ratio.toFixed(2);
}

console.log(getContrastRatio([33, 37, 41], [255, 255, 255])); // Przykład dla tekstu text-dark na białym tle

Bootstrap 5.3 – klasy z niskim kontrastem

W Bootstrap 5.3 domyślnie dostępne są klasy, które mogą powodować niewystarczający kontrast na jasnym lub ciemnym tle:

Przykłady niskiego kontrastu:

  • Na jasnym tle bg-light (#f8f9fa)
    • .text-primary (niebieski: #0d6efd) → Kontrast: ~4.26:1 (za niski)
    • .text-info (jasny błękit: #0dcaf0) → Kontrast: ~1.85:1 (bardzo niski)
  • Na ciemnym tle bg-dark (#212529)
    • .text-secondary (szary: #6c757d) → Kontrast: ~3.28:1 (za niski)
    • .text-danger (czerwony: #dc3545) → Kontrast: ~3.4:1 (za niski)

Zalecane klasy o wysokim kontraście

Aby spełnić WCAG, warto używać kombinacji kolorów o współczynniku ≥ 4.5:1. Przykłady bezpiecznych klas:

Dla jasnego tła bg-light (#f8f9fa):

  • .text-dark (#212529) → Kontrast: 14.63:1 (bardzo dobry wybór)
  • .text-black (#000000) → Kontrast: 19.92:1 (świetny wybór)

Dla ciemnego tła bg-dark (#212529):

  • .text-white (#ffffff) → Kontrast: 15.42:1 (świetny wybór)
  • .text-light (#f8f9fa) → Kontrast: 14.63:1 (bardzo dobry wybór)

Jeśli chcesz dostosować kontrast jeszcze lepiej, można nadpisać kolory w CSS:

.text-high-contrast-primary {
    color: #004085; /* Ciemniejszy niebieski, lepszy kontrast */
}
.text-high-contrast-warning {
    color: #856404; /* Ciemniejszy żółty */
}

Zestawienie kolorów i kontrastów w tabeli

Zestawienie kontrastów i zgodności z WCAG AA (min. 4.5:1) oraz AAA (min. 7.0:1) dla normalnego tekstu.

Klasa tekstu bg-white (#ffffff) bg-light (#f8f9fa) bg-dark (#212529) bg-black (#000000)
text-primary (#0d6efd) 4.5:1 ✓ AA ✗ AAA 4.26:1 ✗ AA ✗ AAA 3.42:1 ✗ AA ✗ AAA 4.66:1 ✓ AA ✗ AAA
text-secondary (#6c757d) 4.68:1 ✓ AA ✗ AAA 4.44:1 ✗ AA ✗ AAA 3.28:1 ✗ AA ✗ AAA 4.47:1 ✗ AA ✗ AAA
text-success (#198754) 4.53:1 ✓ AA ✗ AAA 4.29:1 ✗ AA ✗ AAA 3.4:1 ✗ AA ✗ AAA 4.63:1 ✓ AA ✗ AAA
text-info (#0dcaf0) 1.95:1 ✗ AA ✗ AAA 1.85:1 ✗ AA ✗ AAA 7.87:1 ✓ AA ✓ AAA 10.72:1 ✓ AA ✓ AAA
text-warning (#ffc107) 1.63:1 ✗ AA ✗ AAA 1.54:1 ✗ AA ✗ AAA 9.46:1 ✓ AA ✓ AAA 12.88:1 ✓ AA ✓ AAA
text-danger (#dc3545) 4.52:1 ✓ AA ✗ AAA 4.29:1 ✗ AA ✗ AAA 3.4:1 ✗ AA ✗ AAA 4.63:1 ✓ AA ✗ AAA
text-light (#f8f9fa) 1.05:1 ✗ AA ✗ AAA 1:1 ✗ AA ✗ AAA 14.63:1 ✓ AA ✓ AAA 19.92:1 ✓ AA ✓ AAA
text-dark (#212529) 15.42:1 ✓ AA ✓ AAA 14.63:1 ✓ AA ✓ AAA 1:1 ✗ AA ✗ AAA 1.36:1 ✗ AA ✗ AAA
text-black (#000000) 21:1 ✓ AA ✓ AAA 19.92:1 ✓ AA ✓ AAA 1.36:1 ✗ AA ✗ AAA 1:1 ✗ AA ✗ AAA
text-white (#ffffff) 1:1 ✗ AA ✗ AAA 1.05:1 ✗ AA ✗ AAA 15.42:1 ✓ AA ✓ AAA 21:1 ✓ AA ✓ AAA

Zestawienie kontrastów i zgodności z WCAG AA (min. 3.0:1) oraz AAA (min. 4.5:1) dla dużego lub pogrubionego tekstu.

Klasa tekstu bg-white (#ffffff) bg-light (#f8f9fa) bg-dark (#212529) bg-black (#000000)
text-primary (#0d6efd) 4.5:1 ✓ AA ✓ AAA 4.26:1 ✓ AA ✗ AAA 3.42:1 ✓ AA ✗ AAA 4.66:1 ✓ AA ✓ AAA
text-secondary (#6c757d) 4.68:1 ✓ AA ✓ AAA 4.44:1 ✓ AA ✗ AAA 3.28:1 ✓ AA ✗ AAA 4.47:1 ✓ AA ✗ AAA
text-success (#198754) 4.53:1 ✓ AA ✓ AAA 4.29:1 ✓ AA ✗ AAA 3.4:1 ✓ AA ✗ AAA 4.63:1 ✓ AA ✓ AAA
text-info (#0dcaf0) 1.95:1 ✗ AA ✗ AAA 1.85:1 ✗ AA ✗ AAA 7.87:1 ✓ AA ✓ AAA 10.72:1 ✓ AA ✓ AAA
text-warning (#ffc107) 1.63:1 ✗ AA ✗ AAA 1.54:1 ✗ AA ✗ AAA 9.46:1 ✓ AA ✓ AAA 12.88:1 ✓ AA ✓ AAA
text-danger (#dc3545) 4.52:1 ✓ AA ✓ AAA 4.29:1 ✓ AA ✗ AAA 3.4:1 ✓ AA ✗ AAA 4.63:1 ✓ AA ✓ AAA
text-light (#f8f9fa) 1.05:1 ✗ AA ✗ AAA 1:1 ✗ AA ✗ AAA 14.63:1 ✓ AA ✓ AAA 19.92:1 ✓ AA ✓ AAA
text-dark (#212529) 15.42:1 ✓ AA ✓ AAA 14.63:1 ✓ AA ✓ AAA 1:1 ✗ AA ✗ AAA 1.36:1 ✗ AA ✗ AAA
text-black (#000000) 21:1 ✓ AA ✓ AAA 19.92:1 ✓ AA ✓ AAA 1.36:1 ✗ AA ✗ AAA 1:1 ✗ AA ✗ AAA
text-white (#ffffff) 1:1 ✗ AA ✗ AAA 1.05:1 ✗ AA ✗ AAA 15.42:1 ✓ AA ✓ AAA 21:1 ✓ AA ✓ AAA

Sprawdź kontrast WCAG

Przykładowy tekst interfejsu użytkownika
Kontrast: :1
AA AAA

Podsumowanie

Zapewnienie odpowiedniego kontrastu tekstu względem tła to kluczowy element dostępności stron. Dzięki prostym obliczeniom i odpowiedniemu doborowi klas Bootstrap 5.3 możemy znacząco poprawić czytelność i spełnić wymagania WCAG. Warto korzystać z narzędzi takich jak funkcja JavaScript do analizy kontrastu i unikać klas o zbyt niskim współczynniku kontrastu.

26 lutego 2025 75

Kategorie

programowanie

Tagi

ux webdesign

Dziękujemy!
()

Powiązane wpisy

Zdjecie zwiazane z Automatyczny motyw Bootstrap 53 na bazie pory dnia
4 stycznia 2025 6 min 71

Automatyczny motyw Bootstrap 5.3 na bazie pory dnia

ux
Czytaj więcej
Wizualizacja tematu UX Design na stronach opartych na Bootstrap 5
3 marca 2025 3 min 13

UX Design na stronach opartych na Bootstrap 5

ux
Czytaj więcej
Obraz ilustrujacy Kompletny przewodnik po komponentach Bootstrap 5
13 marca 2025 3 min 18

Kompletny przewodnik po komponentach Bootstrap 5

ux
Czytaj więcej

Następny wpis

Lazy Loading w JavaScript
Wymiana doświadczeń

Masz podobne doświadczenia?

Chętnie poznam Twoją perspektywę i porozmawiam o tym temacie szerzej.

Napisz do mnie

Każda perspektywa może wnieść coś wartościowego do dyskusji.

Twoja prywatność i pliki cookies

  1. Ta strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania – m.in. do poprawnego wyświetlania treści, zapamiętania podstawowych ustawień przeglądarki oraz zapewnienia stabilności serwisu.
  2. Nie stosuję plików cookies w celach marketingowych, reklamowych ani analitycznych.
  3. Strona ma charakter wyłącznie informacyjny i nie zawiera formularzy kontaktowych, rejestracyjnych ani zakupowych, przez które dane mogłyby być przesyłane na serwer.
  4. Nie zbieram danych osobowych podczas zwykłego korzystania z witryny.
  5. Serwis nie korzysta z certyfikatu SSL, jednak ze względu na informacyjny charakter strony nie jest wymagane przesyłanie poufnych danych. Zalecam jednak, aby nigdy nie wpisywać haseł ani danych osobowych na stronach bez szyfrowanego połączenia.
  6. Korzystając z tej strony, wyrażasz zgodę na używanie wyłącznie niezbędnych plików cookies.

Więcej informacji znajdziesz w mojej polityce prywatności.