Barrierefreie Farbgestaltung: Kontrast und WCAG-Konformität

Dienstprogramme

Barrierefreie Farben: Nicht nur "gut aussehend"

Weltweit haben etwa 8% der Männer und 0,5% der Frauen eine Farbsehschwäche — 1 von 12 Nutzern kann bestimmte Farben nicht normal unterscheiden.

Art der Farbsehschwäche Häufigkeit Schwer zu unterscheidende Farben
Protanopie (Rotblindheit) 1% Rot-Grün
Deuteranopie (Grünblindheit) 5% Rot-Grün
Tritanopie (Blaublindheit) 0,003% Blau-Gelb
Achromatopsie (totale Farbenblindheit) Äußerst selten Alle

I. WCAG-Kontraststandards

Konformitätsstufen

Stufe Normaler Text Großer Text UI-Komponenten
AA ≥ 4,5:1 ≥ 3:1 ≥ 3:1
AAA ≥ 7:1 ≥ 4,5:1 —

Definition von großem Text: ≥ 18pt (24px) oder ≥ 14pt fett (18,66px bold).

Kontrastberechnung

Kontrast = (L1 + 0,05) / (L2 + 0,05)

L1 = Relative luminanz der helleren Farbe
L2 = Relative luminanz der dunkleren Farbe

Relative luminanz L:
  Für sRGB wobei sRGB ≤ 0,03928: L = sRGB / 12,92
  Für sRGB wobei sRGB > 0,03928: L = ((sRGB + 0,055) / 1,055)^2,4

  sRGB = R/255, G/255, B/255 (pro Kanal berechnet)

Kontrast häufiger Farbkombinationen

Vordergrund Hintergrund Kontrast AA normaler Text AA großer Text
#000000 #FFFFFF 21:1 ✅ ✅
#333333 #FFFFFF 12,6:1 ✅ ✅
#666666 #FFFFFF 5,7:1 ✅ ✅
#767676 #FFFFFF 4,5:1 ✅ (genau) ✅
#999999 #FFFFFF 2,8:1 ❌ ❌
#FF0000 #FFFFFF 3,99:1 ❌ ✅
#0000FF #FFFFFF 8,59:1 ✅ ✅

II. Kontrastüberprüfung mit ToolsKu

Bedienungsschritte

  1. Öffnen Sie das Farbkontrast-Tool
  2. Geben Sie Vordergrund- und Hintergrundfarbe ein (unterstützt HEX, RGB, HSL)
  3. Überprüfen Sie die Ergebnisse:
    • Kontrastverhältnis
    • WCAG AA / AAA-Konformitätsstatus
    • Getrennte Bewertung für normalen Text / großen Text
  4. Passen Sie die Farben an, bis sie konform sind

III. Farbblindheitssimulation

Simulation mit CSS filter

/* Protanopie */
.protanopia { filter: url('#protanopia'); }

/* Deuteranopie */
.deuteranopia { filter: url('#deuteranopia'); }

/* Tritanopie */
.tritanopia { filter: url('#tritanopia'); }

SVG-Filtermatrix

<svg style="display:none">
  <!-- Protanopie-Simulationsmatrix -->
  <filter id="protanopia">
    <feColorMatrix type="matrix" values="
      0.567  0.433  0      0  0
      0.558  0.442  0      0  0
      0      0.242  0.758  0  0
      0      0      0      1  0
    "/>
  </filter>

  <!-- Deuteranopie-Simulationsmatrix -->
  <filter id="deuteranopia">
    <feColorMatrix type="matrix" values="
      0.625  0.375  0      0  0
      0.7    0.3    0      0  0
      0      0.3    0.7    0  0
      0      0      0      1  0
    "/>
  </filter>
</svg>

IV. Anpassungsstrategien für Farbblinde

Strategie 1: Nicht nur auf Farbe zur Informationsübermittlung verlassen

<!-- Falsch: Status nur durch Farbe unterscheiden -->
<span class="status-error" style="color: red">Fehlgeschlagen</span>
<span class="status-success" style="color: green">Erfolgreich</span>

<!-- Richtig: Farbe + Symbol -->
<span class="status-error" style="color: red">
  <svg>✕</svg> Fehlgeschlagen
</span>
<span class="status-success" style="color: green">
  <svg>✓</svg> Erfolgreich
</span>

Strategie 2: Farbblinden-freundliche Farbkombinationen verwenden

Zu vermeidende Kombination Alternative Kombination
Rot + Grün Rot + Blau, oder Orange + Blau
Hellrot + Hellgrün Dunkelrot + Hellgrün
Grün Erfolg + Rot Fehler Blau Info + Orange Warnung

Wong Farbblinden-freundliche Palette

#000000 Schwarz
#E69F00 Orange
#56B4E9 Himmelblau
#009E73 Türkisgrün
#F0E442 Gelb
#0072B2 Blau
#D55E00 Zinnoberrot
#CC79A7 Rosa-Violett

Diese Palette ist unter allen Arten von Farbsehschwächen unterscheidbar.

Strategie 3: Texturen/Muster in Diagrammen verwenden

/* Verschiedene Datenreihen verwenden verschiedene Texturen */
.series-a { background-image: url('stripes.svg'); }
.series-b { background-image: url('dots.svg'); }
.series-c { background-image: url('crosshatch.svg'); }

V. Barrierefreiheit im Dunkelmodus

Kontrastfallen im Dunkelmodus

Falle Beschreibung Lösung
Rein schwarzer Hintergrund mit rein weißem Text Kontrast 21:1, verursacht aber Augenbelastung Dunkelgrauen Hintergrund verwenden (#1a1a2e)
Sättigung reduzieren Hohe Sättigung im Dunkelmodus ist grell Sättigung angemessen reduzieren
Schatten nicht sichtbar Schatten verschwinden auf dunklem Hintergrund Rahmen oder Helligkeitsunterschied verwenden
Unzureichender Bildkontrast Bilddetails gehen im Dunkelmodus verloren Mit CSS filter anpassen

Farbvorschläge für den Dunkelmodus

:root {
  /* Hellmodus */
  --bg: #ffffff;
  --fg: #1a1a2e;
  --muted: #6b7280;
  --accent: #3b82f6;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #1a1a2e;
    --fg: #e0e0e0;
    --muted: #9ca3af;
    --accent: #60a5fa; /* Helleres Blau, hält Kontrast aufrecht */
  }
}

VI. Barrierefreiheitsprüfung auf Komponentenebene

Fehlermeldungen in Formularen

<!-- Falsch: Nur roter Rahmen als Hinweis -->
<input style="border: 1px solid red" />

<!-- Richtig: Rahmen + Text + aria -->
<input
  style="border: 1px solid red"
  aria-invalid="true"
  aria-describedby="error-msg"
/>
<span id="error-msg" role="alert" style="color: #dc2626">
  Bitte geben Sie eine gültige E-Mail-Adresse ein
</span>

Links benötigen nicht nur ausreichenden Kontrast zum Hintergrund, sondern auch visuelle Unterscheidung vom umgebenden Text:

/* Links werden nicht nur durch Farbe, sondern auch durch Unterstreichung unterschieden */
a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}

VII. Automatisierte Erkennung

axe-core-Integration

import { axe, toHaveNoViolations } from 'jest-axe';

expect.extend(toHaveNoViolations);

test('Farbbarrierefreiheit', async () => {
  const { container } = render(<MyComponent />);
  const results = await axe(container);
  expect(results).toHaveNoViolations();
});

Lighthouse-Audit

npx lighthouse https://example.com --only-categories=accessibility

CI-Integration

- name: Accessibility check
  run: npx pa11y https://staging.example.com

VIII. Liste der Best Practices

  1. Textkontrast ≥ 4,5:1 (normaler Text Stufe AA)
  2. Nicht nur auf Farbe verlassen zur Übermittlung von Statusinformationen
  3. Farbblinden-freundliche Palette verwenden (wie die Wong-Palette)
  4. Texturen/Muster zu Diagrammen hinzufügen zur Unterscheidung
  5. Kontrast im Dunkelmodus beibehalten, rein schwarzen Hintergrund vermeiden
  6. Links haben Unterstreichung oder andere nicht-farbliche Unterscheidung
  7. Fehlermeldungen haben Textbeschreibung, nicht nur rote Farbe
  8. Automatisierte Barrierefreiheitstests in CI integriert
#无障碍#WCAG#对比度#色盲#色彩设计