Barrierefreie Programmierung bedeutet, digitale Inhalte so zu entwickeln, dass sie für möglichst viele Menschen unabhängig von individuellen Fähigkeiten oder technischen Voraussetzungen zugänglich sind. Dabei geht es nicht nur um HTML und CSS, sondern auch um strukturierten Code, semantische Auszeichnung, logische Fokusführung und die richtige Anwendung von WAI-ARIA-Attributen.
Die barrierefreie Webentwicklung richtet sich nach den Vorgaben der Web Content Accessibility Guidelines (WCAG) 2.2. Im Mittelpunkt stehen vier Prinzipien: Digitale Inhalte müssen wahrnehmbar, bedienbar, verständlich und robust sein. Nachfolgend finden Sie die Anforderungen der Konformitätsstufen A und AA, die für barrierefreie Websites relevant sind.
Textalternativen in Form von Nicht-Text (Großschrift, Braille, gesprochene Sprache, Symbole, einfachere Sprache)
Elementtyp | Beispiele | Erklärung | HTML-Beispiel | Zusätzlicher WCAG-Bezug |
Grafische Elemente | Fotos, Icons, Logos | Müssen inhaltlich beschrieben werden | <img src=“logo.png“ alt=“Logo der Agentur Sichtbar.“> | 1.1.1 (A) |
Illustrationen, die Text ergänzen | Begleitende Bilder in Artikeln | Bildinhalt oder Bildaussage beschreiben | <img src=“familie.png“ alt=“Familie am Esstisch – Thema: Ernährung im Alltag“> | 1.1.1 (A) |
Multimedia (Live) | Live-Video, Live-Audio | Textalternative mit Funktion und Inhalt anbieten (wo möglich) | <video src=“stream.mp4″ aria-label=“Live-Übertragung der Podiumsdiskussion zum Thema Inklusion“> | 1.1.1 (A), 1.2.4 (AA) |
Infografiken / Diagramme | Statistiken, Balkendiagramme | Alternativtext + ausführliche Langbeschreibung nötig | <img src=“umsatz.png“ alt=“Umsatzentwicklung 2023. Details siehe Beschreibung unterhalb.“> | 1.1.1 (A), 1.3.1 (A) |
Nicht-Text-Inhalte mit Sinneserfahrung | Kunstwerke, Soundeffekte | Deskriptive Beschreibung für visuelle/akustische Erfahrung | <img src=“kunstwerk.jpg“ alt=“Abstraktes Gemälde mit kräftigen Farben in Wellenform.“> | 1.1.1 (A) |
Steuerelemente | Icon-Buttons, Play-Schaltflächen | aria-label oder sichtbarer Text muss Zweck beschreiben | <button aria-label=“Suche starten“><img src=“lupe.svg“ alt=““></button> | 1.1.1 (A), 4.1.2 (A) |
Links (nur Bild oder Symbol) | Bildlink zu „Kontakt“ oder „Startseite“ | Linkziel und alt-/aria-label müssen übereinstimmen | <a href=“/kontakt“ aria-label=“Kontakt aufnehmen“><img src=“kontakt-icon.svg“ alt=““></a> | 1.1.1 (A), 2.4.4 (A) |
Buttons & Widgets (nur grafisch) | Slider-Pfeile, Play-Button | Funktion verständlich benennen | <button aria-label=“Wiedergabe starten“><img src=“play.svg“ alt=““></button> | 1.1.1 (A), 4.1.2 (A) |
CAPTCHA | Bild-/Audio-CAPTCHA | Alternative Möglichkeit + Erklärung notwendig | <img src=“captcha.jpg“ alt=“Sicherheitsabfrage: Bitte den Text eingeben“><p>Alternative: Rechenfrage: Was ist 3 + 4?</p> | 1.1.1 (A) |
Zeitbasierte Medien (Audio, Video oder kombiniert) müssen so aufbereitet sein, dass ihre wesentlichen Inhalte für alle zugänglich sind – z. B. in Form von Transkripten, Untertiteln oder Audiobeschreibungen.
Elementtyp | Beispiele | Erklärung | HTML-Beispiel | WCAG-Bezug |
Aufgezeichnetes Audio | Podcasts, Interviews | Texttranskript erforderlich | <audio controls aria-describedby=“transkript“> | 1.2.1 (A) |
Aufgezeichnetes Video mit Ton | Tutorials, Vorträge | Synchronisierte Untertitel notwendig | <video controls><track kind=“subtitles“ src=“untertitel.vtt“ srclang=“de“></video> | 1.2.2 (A) |
Synchronisierte Medien (Video + Audio) | Film mit visueller Handlung | Textalternative oder Audiodeskription erforderlich | <video aria-describedby=“beschreibung“></video> | 1.2.3 (A) |
Live-Audio oder Live-Video | Livestream einer Veranstaltung | Live-Untertitel oder nachträgliche Bereitstellung empfohlen | <video aria-label=“Livestream der Pressekonferenz“ controls></video> | 1.2.4 (AA) |
Aufgezeichnetes Video mit visueller Information | Schulungsvideo mit Handlungsanweisungen | Audiodeskription oder alternative Textbeschreibung | <video><track kind=“descriptions“ src=“beschreibung.vtt“ srclang=“de“></video> | 1.2.5 (AA) |
Inhalte müssen so strukturiert sein, dass sie in unterschiedlichen Darstellungsformen (z. B. per Screenreader, bei Vergrößerung oder auf mobilen Geräten) zugänglich bleiben, ohne dass dabei Informationen oder Bedeutungszusammenhänge verloren gehen.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Layoutelemente | Container, Grid, Flexbox, Positionierung | Struktur darf nicht ausschließlich durch visuelle Anordnung vermittelt werden | Semantische HTML5-Elemente wie <main>, <section>, <article> statt reinem <div>-Layout | 1.3.1 (A) |
Strukturierende Elemente | Überschriften, Absätze, Listen, Tabellen | Müssen semantisch korrekt in HTML umgesetzt sein | <h1> bis <h6>, <p>, <ul>, <table> korrekt und in logischer Reihenfolge | 1.3.1 (A) |
Formularfelder | Texteingaben, Checkboxen, Dropdowns | Müssen beschriftet sein (<label>) und idealerweise Autofill-Attribute verwenden | <label for=“email“>E-Mail</label><input id=“email“ autocomplete=“email“> | 1.3.1 (A), 1.3.5 (AA) |
Software-Komponenten | Widgets, Java-/Flash-Elemente | Müssen alternativ zugänglich oder erklärt sein | Bei eigenen Komponenten: role, aria-label, Tastatursteuerung ergänzen; für Flash/Java Alternativen bereitstellen | 1.3.2 (A) |
Responsive Inhalte | Webseiten, Web-Apps | Inhalte müssen in Hoch- und Querformat lesbar und bedienbar sein | Mit Media Queries und flexiblem Layout arbeiten: @media (orientation: portrait) { … } | 1.3.4 (AA) |
Informations-vermittelnde Eigenschaften | Farbe, Ton, Größe, Form, Position | Dürfen nicht allein zur Bedeutungsvermittlung verwendet werden | Farbe mit Text oder Symbol kombinieren, z. B. nicht nur rot = Fehler, sondern auch mit aria-describedby=“error“ | 1.3.3 (A) |
Inhalte müssen klar vom Hintergrund unterscheidbar, vergrößerbar und gestaltbar sein, ohne dass Funktion oder Inhalt verloren geht. Visuelle und auditive Informationen müssen so dargestellt sein, dass sie auch bei individuellen Anpassungen wahrnehmbar bleiben.
Elementtyp | Beispiele | Erklärung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Hervorhebungen | Farbiger Text, Markierungen | Farbliche Hervorhebungen müssen zusätzlich durch Text oder andere visuelle Merkmale unterstützt werden | Ergänze z. B. Icons oder Textlabel: <span class=“highlight“>Wichtig</span> + Symbol | 1.4.1 (A) |
Kontraste – Text | Fließtext, Menüpunkte, Buttons | Kontrastverhältnis mind. 4,5:1 für normalen Text, 3:1 für großen Text | Nutze Tools wie contrast-ratio.comCSS z. B. color: #111; background: #fff; | 1.4.3 (AA) |
Kontraste – UI-Elemente / Grafiken | Icons, Eingabefelder, Linien | Visuelle Merkmale (Rahmen, Linien) müssen sich mind. 3:1 vom Hintergrund abheben | Kontraste prüfen für Fokus-Rahmen, Pfeile, Icons etc. mit WCAG-Kontrastchecker | 1.4.11 (AA) |
Temporäre Inhalte | Tooltips, Hover-Boxen, Dropdowns | Müssen dauerhaft sichtbar oder steuerbar sein, keine rein zeitbasierten Anzeigen | JS: Tooltip darf nur bei Fokus oder Hover erscheinen, nicht automatisch verschwinden | 1.4.13 (AA) |
Bilder von Text | Banner mit eingebettetem Text | Nur zulässig, wenn nicht anders darstellbar oder visuell anpassbar | Verwende echten Text statt Bildtext: <h1>Sommerangebot</h1> statt <img src=“headline.jpg“> | 1.4.5 (AA) |
Multimedia-Inhalte | Videos, Animationen, Bildslider | Inhalte dürfen nicht automatisch starten; Audio muss regelbar sein | <video autoplay controls muted> → besser: kein Autoplay, Lautstärkeregelung per UI | 1.4.2 (A) |
Auditive Inhalte | Audiohinweise, gesprochene Texte | Lautstärke muss unabhängig von Systemlautstärke regelbar sein | Implementiere eigenen Volume-Slider für Web-Audio oder Video-Element | 1.4.2 (A) |
Zoomfähigkeit | Texte, Bilder, Navigation | Inhalte müssen bis 200 % skalierbar sein, ohne Informationsverlust | Verwende relative Einheiten (em, rem, %) statt px für Layout und Schriftgrößen | 1.4.4 (AA) |
Umfluss / Layout-Anpassung | Responsive Design, Spaltenlayouts | Kein Scrollen in zwei Richtungen bei 320 CSS-Pixel Breite | Media Queries verwenden: @media (max-width: 320px) + Flex/Grid-Systeme | 1.4.10 (AA) |
Textabstand | Fließtext, Absätze, Headlines | Inhalte bleiben funktional & lesbar bei nutzerdefinierter Abstandsänderung | Teste mit Browser-Plugins für „Text Spacing Override“ oder line-height, margin, letter-spacing | 1.4.12 (AA) |
Browser-Tooltips / Hovereffekte | Hinweise, Menüs, Interaktionen | Müssen per Tastatur & Maus erreichbar und steuerbar sein | Tooltips mit aria-describedby oder aria-label, Fokus- und Hover-Events kombinieren | 1.4.13 (AA) |
Alle Funktionalitäten auf einer Website müssen vollständig per Tastatur oder Tastaturschnittstelle bedienbar sein – ohne Maus oder Touch. Dazu zählen auch interaktive Inhalte wie Formulare, Links und Widgets. Ein-Tasten-Befehle dürfen nicht unbeabsichtigt ausgelöst werden. Tastenkürzel, die durch Spracheingabe versehentlich ausgelöst werden können, müssen abschalt- oder veränderbar sein.
Elementtyp | Beispiele | Erklärung | HTML-Beispiel | WCAG-Bezug |
Links | Navigation, Sprungmarken | Müssen mit Tab-Fokus erreichbar und mit Enter auslösbar sein | <a href=“#kontakt“>Zum Kontaktformular</a> | 2.1.1 (A) |
Steuerelemente | Buttons, Formularelemente, Widgets | Per Tab und Eingabe / Leertaste zu bedienen | <button>Absenden</button> | 2.1.1 (A) |
Interaktive eingebettete Inhalte | Modale Fenster, Mediaviewer, iFrames | Müssen per Tastatur erreichbar und wieder verlassbar sein (keine Tastaturfalle!) | <iframe src=“…“> + Fokussteuerung via JS | 2.1.2 (A) |
Ein-Tasten-Befehle | Tastenkürzel für Web-Apps | Müssen abschaltbar oder anpassbar sein, da sie unbeabsichtigt ausgelöst werden können (z. B. durch Spracheingabe) | JS mit anpassbarem Shortcut: if (key === ’s‘) … | 2.1.4 (A) |
Nutzer müssen ausreichend Zeit zum Lesen, Hören und Reagieren haben. Zeitbegrenzungen dürfen die Zugänglichkeit nicht einschränken – außer in Ausnahmefällen.
Elementtyp | Beispiele | Erklärung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Eingabeaufforderungen mit Zeitbegrenzung | Formulare, Anmeldungen, Online-Tests | Zeitlimits müssen abschaltbar, erweiterbar oder anpassbar sein | JavaScript-Timer mit Pausen- oder Verlängerungsfunktion (setTimeout, clearTimeout)Beispiel: „Sitzung läuft ab in 30 Sek. – Jetzt verlängern“ | 2.2.1 (A) |
Multimedia / bewegte Inhalte | Slideshow, automatische Bannerrotation, Live-Ticker | Inhalte, die automatisch starten und länger als 5 Sek. laufen, müssen pausierbar, stoppbar oder ausblendbar sein | Buttons wie „Anhalten“, „Pausieren“ programmierenBeispiel: <button onclick=“stopTicker()“>Ticker stoppen</button> | 2.2.2 (A) |
Autoplay-Videos / -Audio |
Werbung, Hintergrundmedien | Nutzer müssen die Wiedergabe stoppen oder pausieren können | Verwende autoplay nur, wenn controls gesetzt sindAlternativ: JS zum Stoppen einbinden (pause() bei <video>) | 2.2.2 (A) |
Nicht-interaktive Animationen während Ladezeit | Spinner, Ladeanimation | Ausgenommen, wenn keine Nutzerinteraktion stattfindet | CSS/JS-Spinner z. B. <div class=“spinner“ aria-hidden=“true“>Nach Ladezeit automatisch entfernen oder mit aria-busy markieren | 2.2.2 (A) |
Zeitkritische Anwendungen mit Fokusverlust | z. B. Auto-Logout bei Inaktivität | Dürfen nicht ohne Warnung ausgelöst werden; Reaktion muss möglich sein | Zeige modales Dialogfenster vor Logout:„Ihre Sitzung läuft ab – Jetzt verlängern?“JavaScript mit Fokus auf Bestätigungs-Button setzen | 2.2.6 (AA) |
⚠️ Ausnahmen
Zeitbegrenzungen sind zulässig, wenn:
Inhalte dürfen keine Gestaltungen enthalten, die Anfälle oder physische Reaktionen auslösen können – insbesondere blitzende Inhalte, die für Menschen mit photosensitiver Epilepsie gefährlich sind.
Elementtyp | Beispiele | Erklärung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Animationen | Visuelle Effekte, Game-Elemente, animierte Hintergründe | Dürfen nicht mehr als 3 Blitze pro Sekunde enthalten | Schnelle Farbübergänge, schnelles Flackern oder Kontrastsprünge über JS/CSS-Animationen vermeiden, Test z. B. mit PEAT (Photosensitive Epilepsy Analysis Tool) | 2.3.1 (A) |
Multimedia | Videos, Banner, Einblendungen mit Blitzlicht-Effekten | Müssen auf blitzende Sequenzen geprüft werden | Verwende Schnittsoftware oder Videoanalyse zur Prüfung auf visuell gefährliche SequenzenStroboskopeffekte vermeiden oder unter 3 Hz halten | 2.3.1 (A) |
🛠 Empfohlenes Test-Tool
Ziel ist es, sicherzustellen, dass Menschen mit verschiedenen Einschränkungen Inhalte leicht finden und sich sinnvoll durch Seiten bewegen können – z. B. mit Tastatur, Screenreader oder anderen Assistenzsystemen.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Navigationsleisten | Hauptmenü, Footer-Navigation | Müssen konsistent, auffindbar und per Tastatur zugänglich sein | <nav><ul><li><a href=“/“>Start</a></li></ul></nav>Verwende <nav> für semantische Navigation | 2.4.5 (AA) |
Skiplinks | „Springe zum Inhalt“, „Zur Navigation“ | Erlauben das Überspringen wiederholter Inhalte | <a href=“#main-content“ class=“visually-hidden focusable“>Zum Inhalt springen</a>id=“main-content“ beim Zielbereich | 2.4.1 (A) |
Seitentitel | <title> | Muss Inhalt oder Zweck der Seite klar beschreiben | <title>Kontakt – Agentur Sichtbar</title>Steht im <head> der HTML-Datei | 2.4.2 (A) |
Abschnitts-überschriften | <h1> bis <h6> | Müssen logisch strukturiert und eindeutig sein | Keine Sprünge in Hierarchie<h1>, dann <h2>, <h3> usw. – nicht auslassen | 2.4.10 (AA) |
Links | Textlinks, Kontextlinks, Bildlinks | Linkzweck muss erkennbar und nicht mehrfach gleichlautend sein | Keine Links wie „Hier klicken“, sondern z. B.: <a href=“/info“>Mehr zur Barrierefreiheit</a> | 2.4.4 (A) |
Alternative Navigationswege | Suche, Sitemap, Breadcrumbs | Inhalte müssen auf mindestens zwei Wegen auffindbar sein | <nav aria-label=“Brotkrumen“>Start > Leistungen > SEO</nav><form role=“search“> für Suchfeld | 2.4.5 (AA) |
Fokussteuerung | Tab-Index, sichtbarer Fokus, Fokus-Reihenfolge | Fokus muss klar erkennbar, logisch und nicht verdeckt sein | CSS: :focus { outline: 2px solid #000; }Kein tabindex=“-1″ bei wichtigen Elementen | 2.4.3 (A), 2.4.7 (AA) |
Formularelemente | Texteingaben, Auswahlfelder | Müssen eindeutig beschriftet sein | <label for=“email“>E-Mail</label><input id=“email“ type=“email“>Verwende aria-labelledby bei komplexen Strukturen | 3.3.2 (A) |
Widgets und wiederholte Links | Slider, Akkordeons, doppelte Links | Dürfen nicht doppelt oder mehrdeutig auftreten | Gleiche Linktexte mit unterschiedlichem ZielWidgets vermeiden mit role, aria-expanded, aria-controls | 2.4.4 (A) |
Webinhalte müssen nicht nur über die Tastatur, sondern auch durch alternative Eingabearten wie Maus, Touch, Sprache, Joystick, Augensteuerung oder Bewegungssensoren bedienbar sein – ohne Einschränkung der Funktionalität.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Buttons | CTA, Formular-Submit | Per einfacher Zeigereingabe auslösbar | <button type=“submit“>Absenden</button>Per Tastatur und Maus auslösbar | 2.5.1 (A), 2.5.4 (A) |
Links | Textlink, Symbol-Link | Muss klickbar und tastaturzugänglich sein | <a href=“/kontakt“>Kontakt</a>Vermeide <div onclick=““> ohne tabindex | 2.5.4 (A) |
Formular-Schaltflächen | Absenden, Zurücksetzen | Assistive Technologien müssen Funktion erkennen | <input type=“submit“ value=“Speichern“><label for=“feld“> zur Beschriftung | 2.5.1 (A) |
Menüeinträge | Navigationspunkte, Kontextmenüs | Mit Tastatur (Tab/Enter) und Maus bedienbar | <ul><li><a href=“#“>Menüpunkt</a></li></ul>Alternativ mit role=“menuitem“ | 2.5.1 (A), 2.5.2 (A) |
Widgets | Slider, Akkordeon, Tabs | Müssen ohne komplexe Gesten funktionieren | Verwendung von role, aria-expanded, aria-controlsTastatursteuerung via JS (keydown-Handler) | 2.5.1 (A), 2.5.2 (A) |
Touch-Gesten | Swipe, Pinch, Drag & Drop | Alternativen für Maus/Keyboard bereitstellen | JS-Events wie touchstart, mousedown, keydown kombinierenBeispiel: Drag via Button „Verschieben“ | 2.5.1 (A) |
Bewegungsge-steuerte Elemente | Schütteln, Neigen | Alternative per Klick oder deaktivierbar | JS: DeviceMotionEvent, DeviceOrientationEvent + Umschalter<button onclick=“toggleMotion()“>Deaktivieren</button> | 2.5.4 (A) |
Klickbare Ziele | Icons, Buttons, Touchflächen | Mindestgröße oder ausreichender Abstand | CSS: min-width: 24px; min-height: 24px;Alternativ: padding nutzen statt zu kleine Icons | 2.5.5 (AA) |
Technik | Einsatz | Beispiel |
aria-label | Unsichtbare, aber programmatisch lesbare Bezeichnung | <button aria-label=“Navigation öffnen“>☰</button> |
aria-hidden=“true“ | Deko-Elemente aus Assistenztechniken ausblenden | <span aria-hidden=“true“>★</span> |
tabindex=“0″ | Element in Tab-Reihenfolge aufnehmen | <div role=“button“ tabindex=“0″>Los</div> |
event.preventDefault() | Verhindert ungewollte Aktivierungen (z. B. bei mousedown) | JS: element.addEventListener(„mousedown“, e => e.preventDefault()) |
pointerup statt pointerdown | Aktionen erst beim Loslassen auslösen | JS: element.addEventListener(„pointerup“, callback) |
Informationen und Funktionen müssen in einer für die Nutzer verständlichen Sprache bereitgestellt und programmatisch erkennbar sein.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Haupttextinhalte | Fließtexte, Überschriften, Einleitung | Sprache muss programmatisch bestimmbar sein | <html lang=“de“> für Seitensprache | 3.1.1 (A) |
Formulare und Labels | Eingabefelder, Checkboxen, Auswahllisten | Müssen in verständlicher Sprache formuliert sein | <label for=“name“>Name</label> – keine Fachbegriffe | 3.1.1 (A) |
Navigationsmenüs | Hauptnavigation, Footer-Links | Einheitliche Sprache, eindeutig benannt | <nav lang=“de“> optional, wenn Sprache wechselt | 3.1.1 (A) |
Button- und Linktexte | „Senden“, „Zurück“, „Mehr erfahren“ | Verständlich und sprachlich eindeutig | Kein Slang, z. B. nicht „Ab damit“ → besser: „Absenden“ | 3.1.1 (A) |
Hinweistexte & Fehlermeldungen | „Bitte ausfüllen“, „Ungültige Eingabe“ | Klar formulierte, hilfreiche Rückmeldungen | Beispiel: „Bitte geben Sie eine gültige Telefonnummer ein.“ | 3.1.1 (A) |
Mehrsprachige Inhalte | Zitate, Begriffe, Abschnitte in anderer Sprache | Müssen durch lang-Attribute gekennzeichnet sein | <span lang=“en“>Accessibility is important.</span> | 3.1.2 (AA) |
Audio-/Videoinhalte mit Sprache | Podcasts, Erklärvideos | Sprache muss erkennbar und ggf. benannt sein | „Video in Englisch“ als Hinweistext oder Untertitel | 3.1.1 (A), 3.1.2 (AA) |
Interaktive Inhalte und Navigationselemente sollen sich konsistent verhalten und keine unerwarteten Änderungen auslösen, um die Bedienung vorhersehbar und benutzerfreundlich zu gestalten.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Buttons | „Senden“, „Weiter“, „Abbrechen“ | Aktion darf erst bei Aktivierung erfolgen, nicht beim Fokus | Kein JS in onfocus, stattdessen onclick oder submit verwenden | 3.2.1 (A) |
Links | Navigationslinks, Textlinks | Kein automatischer Kontextwechsel bei Fokus oder Tastendruck | Keine JS-Weiterleitung in onfocus oder onchange | 3.2.1 (A) |
Textfelder | Eingabefelder in Formularen | Fokus darf keine unerwartete Aktion auslösen | Kein automatischer Submit bei Eingabe ohne Bestätigung | 3.2.1 (A) |
Checkboxen & Radiobuttons | Auswahlfelder | Auswahl darf keine sofortige Weiterleitung oder Veränderung bewirken | Kontextwechsel nur nach Button-Klick oder expliziter Aktion | 3.2.2 (A) |
Dropdown-Menüs | Auswahllisten (z. B. Länderauswahl) | Kontextwechsel nur mit Ankündigung oder Bestätigung | JS: Hinweistext anzeigen („Wählen einer Option lädt die Seite neu“) | 3.2.2 (A) |
Navigationselemente | Hauptmenü, Footer | Wiederkehrend an gleicher Position & Struktur | Konsistente HTML-Struktur und role=“navigation“ verwenden | 3.2.3 (AA) |
Seitentitel | <title>-Element | Muss Thema oder Zweck der Seite beschreiben | <title>Kontakt – Agentur Sichtbar</title> | 3.2.2 (A) |
Hilfefunktionen | Tooltips, Hilfesymbole, Chat | Gleichartige Funktionen gleich beschriften & platzieren | Z. B. Chat-Icon immer unten rechts, mit aria-label=“Hilfe öffnen“ | 3.2.4 (AA) |
Dynamische Komponenten | Pop-ups, Slider, Tabs | Änderungen müssen kommuniziert werden | aria-live=“polite“ bei MeldungenJS mit Fokus-Handling ergänzen | 3.2.5 (AA) |
Statusmeldungen | „Gespeichert“, „Fehler“ | Änderungen müssen screenreaderfreundlich kommuniziert werden | <div aria-live=“assertive“>Formular erfolgreich gesendet</div> | 3.2.5 (AA) |
ARIA-Live- Bereiche |
Dynamische Inhalte wie Nachrichtenfelder | Wichtig für Aktualisierungen ohne Seitenreload | <div role=“status“ aria-live=“polite“>Neue Nachricht</div> | 3.2.5 (AA) |
Kontakt- & Hilfeoptionen | „Support“, „Kontaktieren Sie uns“ | Einheitlich benennen und platzieren | Immer gleiche Bezeichnung und HTML-Struktur | 3.2.4 (AA) |
Grafische Symbole mit Funktion | Icon-Buttons, z. B. Fragezeichen, Pluszeichen | Symbolfunktion muss konsistent sein | Gleiches Icon = gleiche Funktion auf allen Seiten | 3.2.4 (AA) |
Fehlerhafte Eingaben müssen leicht erkannt, erklärt und möglichst vermieden werden – insbesondere bei wichtigen Formularvorgängen.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
Formularfelder | Name, E-Mail, Geburtsdatum | Müssen klar und verständlich beschriftet sein | <label for=“email“>E-Mail-Adresse</label> + Hinweistext <small>Format: name@domain.de</small> | 3.3.2 (A) |
Pflichtfelder | z. B. „* Name“ | Müssen zusätzlich als „erforderlich“ gekennzeichnet werden | <label for=“name“>Name (erforderlich)</label> + required | 3.3.2 (A) |
Formatvorgaben | Datum, Telefonnummer, IBAN | Nutzer müssen wissen, wie etwas einzugeben ist | <input type=“date“> oder <input pattern=“[0-9]{5}“> + Beschreibung | 3.3.2 (A) |
Fehlermeldungen | „Eingabe ungültig“, „Feld leer“ | Fehler müssen klar benannt werden | <div class=“error“ aria-live=“assertive“>Bitte geben Sie eine gültige E-Mail ein.</div> | 3.3.1 (A) |
Korrekturhilfen | Hinweis, wie der Fehler behoben werden kann | Gilt, wenn Sicherheit/Zweck nicht beeinträchtigt wird | Beispiel: „IBAN muss 22 Zeichen lang sein“ | 3.3.3 (AA) |
Wichtige Aktionen | Absenden von Formularen, Zahlungen | Nutzer muss Eingaben prüfen oder rückgängig machen können | Bestätigungsschritt mit Übersicht<h2>Bitte prüfen Sie Ihre Angaben</h2> | 3.3.4 (AA) |
Automatische Eingaben | Autofill von Name, E-Mail, Adresse | Nutzerfreundlich, wenn sicher und sinnvoll | autocomplete=“name“, email, postal-code etc. | 3.3.7 (AA) |
Authentifizierung | Login-Masken, CAPTCHA | Muss ohne übermäßige kognitive Belastung möglich sein | Verzerrte Bilder vermeiden, einfache Rechenaufgaben nutzen oder Passwortmanager-Unterstützung | 3.3.6 (AA) |
Mindestens eine der folgenden Optionen umsetzen:
Inhalte müssen von Benutzeragenten und Assistenztechnologien interpretiert werden können.
Elementtyp | Beispiele | Erläuterung | Programmierhinweise / Codebeispiele | WCAG-Bezug (Level) |
HTML-Elemente | <div>, <button>, <input>, <label> | Müssen korrekt verschachtelt, geschlossen und validiert sein | HTML mit Validator überprüfen: validator.w3.org Beispiel: <label for=“email“>E-Mail</label><input id=“email“> | 4.1.1 (A) |
Formularelemente | Textfelder, Checkboxen, Radiobuttons, Selects | Müssen programmatisch Name, Rolle und Wert übermitteln | <input type=“checkbox“ role=“checkbox“ aria-checked=“true“><select aria-label=“Land“> | 4.1.2 (A) |
Interaktive Komponenten | Slider, Akkordeons, Tabs, modale Fenster | Müssen durch ARIA-Attribute semantisch beschrieben werden | Rolle & Zustand: <div role=“tablist“>, aria-selected=“true“ etc. | 4.1.2 (A) |
ARIA-Attribute | aria-label, aria-labelledby, aria-checked, aria-expanded, aria-live | Müssen korrekt verwendet und gepflegt sein | <button aria-expanded=“false“>Menü</button><div aria-live=“polite“> | 4.1.2 (A) |
Buttons und Links | Mit sichtbarem Namen oder ARIA-Beschriftung | Screenreader benötigen einen beschreibenden Namen | <a href=“/kontakt“ aria-label=“Kontakt aufnehmen“>📬</a> | 4.1.2 (A) |
Statusmel-dungen | Erfolg, Warnung, Fehler (z. B. „Nachricht gesendet“) | Müssen per Screenreader ohne Fokusverlust erkennbar sein | <div role=“status“ aria-live=“polite“>Nachricht gesendet.</div> | 4.1.3 (AA) |
Custom Controls | JavaScript-Komponenten, Dropdowns, Schieberegler | Müssen Rolle, Name & Status übermitteln | role=“slider“ aria-valuemin=“0″ aria-valuemax=“100″ aria-valuenow=“50″ | 4.1.2 (A) |
Dynamische Inhalte | AJAX-Feedback, Ladeanzeigen, Formularrückmeldungen | Änderungen müssen programmatisch übermittelt werden | <div aria-live=“assertive“>Ladevorgang abgeschlossen</div> | 4.1.3 (AA) |
🧪 Tools zur Unterstützung
Die WCAG 2.2 (Web Content Accessibility Guidelines) geben klare Anforderungen vor, wie Inhalte auf Webseiten, in Dokumenten und in Software barrierefrei gestaltet werden müssen. Sie helfen dabei, sicherzustellen, dass alle Menschen – einschließlich Menschen mit Behinderungen – diese Inhalte problemlos nutzen können. Neben den Erfolgskriterien, die sich auf einzelne Inhalte und Funktionen beziehen, gibt es weitere Bedingungen, die im Folgenden dargestellt werden. Diese schaffen einen Rahmen, um die Barrierefreiheit einer Webseite insgesamt objektiv und einheitlich zu bewerten.
Techniktyp | Beispiele | Erläuterung | WCAG-Bezug (Level) |
HTML-Standard | <button>, <input>, <form> | Wird von Assistenztechnologien erkannt und korrekt verarbeitet | 4.1.2 (A) |
ARIA-Attribute | aria-label, role=“button“ | Ermöglicht semantische Beschreibung benutzerdefinierter UI-Elemente | 4.1.2 (A) |
Standardkonformes CSS | z. B. für Textvergrößerung | Unterstützt visuelle Anpassungen ohne Barriere | 1.4.4 (AA) |
Unzugängliche Skripte | JS-Button ohne Rolle oder Label | Wird von Screenreadern nicht erkannt oder benutzbar gemacht | 4.1.2 (A) – nicht erfüllt |
Flash | Interaktive Inhalte in Flash | Nicht mehr unterstützt, nicht zugänglich | generell nicht konform |
Bilder ohne Alt-Text | <img src=“bild.jpg“> | Wird von Screenreadern ignoriert → keine Information | 1.1.1 (A) |
Eine Technik gilt als unterstützend, wenn sie:
Keine Blockierung der Seite
Technik muss ersetzbar oder alternativ sein
Benutzeragentenunabhängigkeit
Erfolgskriterium | Erläuterung | Level |
1.4.2 Audio-Steuerelemente | Audio darf nicht automatisch starten oder muss abschaltbar sein | A |
2.1.2 Keine Tastaturfalle | Nutzer dürfen mit Tastatur nicht in einem Bereich „gefangen“ sein | A |
2.2.2 Pausieren, beenden, ausblenden | Bewegte Inhalte müssen steuerbar sein | A |
2.3.1 Drei-Blitz-Grenze | Inhalte dürfen nicht öfter als 3×/Sekunde blinken | A |
Digitale Barrierefreiheit ermöglicht Teilhabe für alle – sie schließt Menschen mit Behinderung nicht aus und verbessert die Benutzerfreundlichkeit für alle Nutzer. Barrierefreies Webdesign bedeutet inklusives Design. Sehbehinderte oder Blinde profitieren von barrierefrei gestalteten Inhalten ebenso wie Menschen mit motorischen und kognitiven Einschränkungen.
In Deutschland gilt die Barrierefreie-Informationstechnik-Verordnung (BITV 2.0) für öffentliche Stellen. Für Unternehmen mit 10 oder mehr Personen, die sich mit ihren Leistungen und Produkten an Endkunden wenden, wird Barrierefreiheit ab dem 28. Juni 2025 durch das Barrierefreiheitsstärkungsgesetz (BFSG) verpflichtend – basierend auf der europäischen Accessibility-Richtlinie (EAA). Das Gesetz schreibt klare Anforderungen für digitale Angebote vor.
Grundlage für barrierefreie Programmierung sind die Web Content Accessibility Guidelines (WCAG) 2.2, insbesondere die Konformitätsstufen A und AA. Öffentliche Stellen müssen zusätzlich die Vorgaben der BITV 2.0 einhalten. Ein technischer Leitfaden hilft bei der Umsetzung der Standards.
Nicht nur Menschen mit Behinderung. Auch Nutzer mit temporären Einschränkungen, ältere Menschen, fremdsprachige Besucher oder Menschen mit langsamer Internetverbindung profitieren von einer barrierefreien, gut strukturierten Website.
Nein. Barrierefreies Webdesign ist eine interdisziplinäre Aufgabe. Neben Entwicklern sind auch Redakteure, Designer und Projektverantwortliche gefragt – z. B. bei der Auswahl von Farben, der Textgestaltung oder der alternativen Beschreibung von Bildern. Alle Aspekte der Barrierefreiheit müssen im Prozess berücksichtigt werden.
Es gibt viele Tools wie WAVE, axe DevTools oder Lighthouse, die automatisierte Prüfungen ermöglichen. Zusätzlich sind manuelle Tests (z. B. mit Tastatur oder Screenreader) notwendig, um reale Nutzungssituationen abzubilden – insbesondere für Blinde und Menschen mit motorischen Einschränkungen.
Typische Fehlerquellen sind:
Diese lassen sich durch frühzeitige Planung, Schulung und Tests gezielt vermeiden.
Ab 2025 drohen Unternehmen bei Verstößen gegen das BFSG rechtliche Konsequenzen. Darüber hinaus riskieren sie Imageverlust, Reichweiteneinbußen und Nutzerfrust – also auch wirtschaftliche Nachteile. Eine frühzeitige Umsetzung entsprechend dem Gesetz ist daher ratsam.
Starten Sie mit den WCAG-Grundlagen, analysieren Sie bestehende Barrieren und bauen Sie auf einem zugänglichen HTML-Grundgerüst auf. Wichtig ist ein bewusstes, inklusives Denken in jeder Projektphase. Ein strukturierter Leitfaden unterstützt dabei, alle relevanten Aspekte systematisch umzusetzen.
Jasmin Rothenbücher
+49 (0)661 410 955 – 43
j.rothenbuecher@re7consulting.com
Sie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr Informationen
Folge uns