Weiterführende Informationen: Dieser Block stützt sich auf den Google-Kurs web.dev – Learn Accessibility.
Accessibility (Barrierefreiheit, abgekürzt a11y – «a», 11 Buchstaben, «y») bedeutet: Websites und Apps so gestalten, dass Menschen mit Beeinträchtigungen sie gleichwertig nutzen können.
Laut WHO haben über 15 % der Weltbevölkerung – rund 1,3 Milliarden Menschen – eine Beeinträchtigung. Dazu gehören:
Eine schlecht zugängliche Website kann für jemanden, der einen Screenreader benutzt, komplett unbenutzbar sein – genau wie eine fehlende Rampe jemanden im Rollstuhl ausschliesst.
Barrierefreiheit ist kein «Nice-to-have» mehr – sie ist aus drei Gründen relevant:
Die Web Content Accessibility Guidelines (WCAG) werden vom World Wide Web Consortium (W3C) entwickelt und gelten als internationaler Standard für digitale Barrierefreiheit. Sie bieten Entwickler:innen klare, prüfbare Kriterien dafür, wie eine zugängliche Website aussehen muss.
Die WCAG sind um vier Grundprinzipien aufgebaut, die unter dem Kürzel POUR zusammengefasst werden:
Inhalte müssen für Augen, Ohren oder Screenreader erkennbar sein.
alt-Attribute
Die Website muss ohne Maus – also nur mit Tastatur oder Sprachsteuerung – vollständig nutzbar sein.
outline: none setzen)aria-expanded beim Accordion und aria-checked beim Switch machen Zustände für Screenreader lesbar
Sprache und Aufbau müssen logisch und vorhersehbar sein.
<html> deklariert sein: <html lang=„de“>
Inhalte müssen auf verschiedenen Geräten und mit Hilfstechnologien (Screenreader, Braille-Ausgabegeräte) zuverlässig funktionieren.
<div> für allesrem definieren, damit Browser-Zoom korrekt skaliertEin Screenreader ist ein Hilfsprogramm, das den Bildschirminhalt vorliest. Der Browser baut parallel zum DOM-Baum einen Accessibility Tree auf – eine vereinfachte Darstellung der Seite mit Rollen, Zuständen und Namen aller Elemente. Der Screenreader liest diesen Tree aus. Unter Mac gibt es in den System-Einstellungen zur „Accessibility“ (Bedienungshilfen) die Möglichkeit VoiceOver zu aktivieren. Unter Windows heisst es Sprachausgabe.
Die wichtigste Grundregel der Accessibility:
Verwenden Sie das richtige HTML-Element für den richtigen Zweck.
Browser und Screenreader kennen die eingebaute Semantik von HTML-Elementen. Ein <button> ist automatisch:
Erste ARIA-Regel: Verwenden Sie ARIA nicht, wenn ein natives HTML-Element denselben Zweck erfüllt. Ein <button> braucht kein role=„button“. ARIA ist nur dann nötig, wenn HTML allein nicht ausreicht.
ARIA ist eine Sammlung von HTML-Attributen, die Screenreadern und Hilfstechnologien zusätzliche Bedeutung kommunizieren – Rollen, Zustände und Eigenschaften, die HTML allein nicht ausdrücken kann.
Drei ARIA-Konzepte:
| Konzept | Attribut | Beispiele |
|---|---|---|
| Rolle | role=„…“ | role=„switch“, role=„dialog“, role=„alert“ |
| Zustand | aria-* | aria-expanded=„true“, aria-checked=„false“ |
| Eigenschaft | aria-* | aria-label=„Menü öffnen“, aria-hidden=„true“ |
Das Attribut aria-expanded teilt Screenreadern mit, ob ein steuerbarer Bereich gerade auf- oder zugeklappt ist. Beim Accordion ist das essenziell.
Im HTML setzen wir aria-expanded=„false“ als Ausgangszustand:
<button class="accordion-btn" aria-expanded="false"> What is this project, and how will it help me? </button> <p class="panel"> It's a small but mighty mission... </p>
Was der Screenreader vorliest:
Nicht alle Nutzenden arbeiten mit einer Maus. Menschen mit motorischen Einschränkungen, Sehbehinderungen oder temporären Verletzungen navigieren mit der Tastatur.
Im Alarado-Projekt wurde der <input type=„checkbox“> mit display: none versteckt:
/* Alarado CSS – bisheriger Code */ .switch input { display: none; }
Das entfernt das Eingabefeld komplett aus dem Accessibility Tree. Screenreader und Tastaturnavigation überspringen den Switch – er ist für Nutzende von Hilfstechnologien unsichtbar und nicht bedienbar.
Statt display: none verwenden wir eine CSS-Technik, die das Element optisch unsichtbar macht, es aber im Accessibility Tree belässt. Diese Technik nennt man «Visually Hidden»:
/* Visuell versteckt, aber für Screenreader sichtbar */ .switch input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; }
Damit der Screenreader die Rolle und den Zustand des Switches versteht, ergänzen wir das HTML mit ARIA-Attributen:
<label class="switch"> <input type="checkbox" role="switch" aria-checked="false" aria-label="Dark Mode aktivieren" /> <span class="slider"></span> <span class="switch-icons"></span> </label>
role=„switch“ – teilt mit, dass es sich um einen Ein-/Aus-Schalter handelt (nicht nur eine Checkbox)aria-checked=„false/true“ – kommuniziert den aktuellen Zustandaria-label=„…“ – gibt dem Switch einen lesbaren Namen (da kein sichtbarer Label-Text vorhanden ist)
Und im JavaScript aktualisieren wir aria-checked beim Umschalten:
const toggle = document.querySelector('.switch input'); toggle.addEventListener('change', () => { const isDark = toggle.checked; // Dark Mode umschalten ... toggle.setAttribute('aria-checked', isDark ? 'true' : 'false'); });
Was der Screenreader jetzt vorliest:
<button>, <nav>, <main>, …)?<html lang=„de“>?outline: none nirgends gesetzt?rem definiert (skaliert korrekt bei Browser-Zoom)?alt-Attribut (oder alt=„“ wenn dekorativ)?aria-label oder sichtbarer Text)?aria-expanded?aria-checked und role=„switch“?display: none?