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

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

Kontrast RGB względem 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

Legenda:
spełnione | nie spełnione

Sprawdź kontrast

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed aliquet tincidunt mi a efficitur. Etiam tincidunt tortor eget dignissim maximus. Sed facilisis, risus eget pulvinar mollis, justo turpis aliquam sem, a laoreet elit nibh ac purus. Sed a maximus tellus. Maecenas blandit mattis urna, ut luctus enim rutrum quis. Nullam et fringilla felis. Duis lacinia dapibus risus, a iaculis arcu dictum at. Aenean ligula ipsum, rutrum faucibus turpis vitae, hendrerit ultrices mi. Praesent consectetur convallis ultricies. Duis non sagittis lacus. Sed non efficitur ipsum. Integer placerat maximus nisi, scelerisque consectetur nisi efficitur at. Praesent arcu urna, vehicula et maximus at, feugiat id lectus.

Obliczony kontrast:  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 58

Kategorie

programowanie

Tagi

ux webdesign

Dziękujemy!
()

Powiązane wpisy


Następny wpis

Lazy Loading w JavaScript

Informacja o cookies

Moja strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania. Nie używam ciasteczek w celach marketingowych ani analitycznych. Korzystając z mojej strony, wyrażasz zgodę na stosowanie tych plików. Możesz dowiedzieć się więcej w mojej polityce prywatności.