Der technische Spickzettel zum Seminar Modern UI und UX Engineering für Webanwendungen — Kriterien, Markup-Formen und Prüfwege zum Nachschlagen, wenn man weiß, dass etwas zu tun ist, aber nicht mehr genau was. Maßgeblich sind die WCAG 2.2 und die ARIA Authoring Practices; hier steht die Auswahl, die im Alltag tatsächlich gebraucht wird. Die Methodenseite — Nutzerforschung, Interface Design, Evaluation — liegt auf dem zweiten Blatt: UX, Interface Design und KI.
WCAG 2.2: Prinzipien, Stufen und neue Kriterien
Die vier Prinzipien sind kein Inhaltsverzeichnis, sondern vier Suchrichtungen für Befunde.
| Prinzip | Fragt | Typischer Befund |
|---|---|---|
| Wahrnehmbar | Kommt die Information an | Zustand nur farblich markiert |
| Bedienbar | Lässt es sich bedienen | Auswahl nur per Ziehen |
| Verständlich | Ist es begreifbar | Fehlercode statt Erklärung |
| Robust | Kommt es bei assistiver Technik an | Eigenbau-Widget ohne Rolle |
„Robust” meint assistive Techniken, nicht Browserkompatibilität.
| Stufe | Bedeutung | Wo sie vorkommt |
|---|---|---|
| A | Ohne dies ist Inhalt unbenutzbar | Als Untermenge jeder Prüfung |
| AA | Zielstandard in Recht und Praxis | Verträge, Ausschreibungen |
| AAA | Einzelne Kriterien, gezielt gewählt | Wo eine Zielgruppe es braucht |
Neu in 2.2 und im Alltag am häufigsten gerissen:
| Kriterium | Verlangt | Bricht typischerweise an |
|---|---|---|
| Fokus nicht verdeckt | Indikator bleibt sichtbar | Klebender Kopfzeile |
| Zielgröße | 24 × 24 Pixel oder Abstand | Icon-Reihen in Tabellenzeilen |
| Zugängliche Anmeldung | Kein Gedächtnistest | Zeichenrätsel, Rechenaufgabe |
| Keine doppelte Eingabe | Bekanntes nicht neu abfragen | Mehrstufigen Strecken |
| Ziehbewegungen | Weg mit einfachem Zeigen | Drag-and-drop-Auswahl |
Modul: Standards und rechtlicher Rahmen
Rechtsrahmen und Nachweise
Drei Ebenen derselben Kette, keine konkurrierenden Anforderungen: technisch laufen alle drei auf die WCAG hinaus.
| Ebene | Verpflichtet | Technisches Ziel |
|---|---|---|
| Web Accessibility Directive | Öffentliche Stellen | WCAG über EN 301 549 |
| European Accessibility Act | Bestimmte private Dienste | Dasselbe, anderer Adressat |
| BFSG und BFSGV | Anbieter in Deutschland | Dasselbe, mit Fristen und Aufsicht |
Die EN 301 549 enthält für Web keine eigenen Kriterien, sie verweist auf die WCAG — Fassungsstand deshalb immer mit Datum der Aussage nennen.
| Artefakt | Muss enthalten | Veraltet, wenn |
|---|---|---|
| Erklärung zur Barrierefreiheit | Stand, Datum, bekanntes Offenes | Niemand sie nach Releases pflegt |
| Rückmeldeweg | Erreichbare Stelle, Frist | Die Adresse ins Leere läuft |
| Prüfbericht | Umfang, Fassung, Datum | Der Prüfumfang nicht genannt ist |
Modul: Standards und rechtlicher Rahmen
Nutzungssituationen und assistive Technik
Permanent, temporär und situativ stellen dieselbe Anforderung — einhändige Bedienung ist Dauerzustand, Gipsarm für Wochen, Kind auf dem Arm für Minuten. Das Modell ist ein Argument für die Anforderung, kein Ersatz für sie.
| Technik | Liest oder nutzt | Scheitert an |
|---|---|---|
| Screenreader | Rolle, Name, Zustand, Wert | Elementen ohne Rolle und Namen |
| Vergrößerung | Layout und Reflow | Fester Breite, Text in Grafiken |
| Sprachsteuerung | Sichtbare Beschriftung | Name weicht von Beschriftung ab |
| Schaltersteuerung | Fokusreihenfolge | Nicht fokussierbaren Bedienelementen |
Der gemeinsame Nenner aller vier ist die Tastatur. Deshalb ist der Tastaturdurchlauf die billigste Prüfung mit der größten Reichweite.
Modul: Menschen, Nutzungssituationen und assistive Technologien
Semantisches HTML: Name, Rolle, Zustand, Wert
Vier Angaben, die eine assistive Technik braucht — und die Stellen, an denen sie üblicherweise fehlen.
| Angabe | Quelle | Fehlt, wenn |
|---|---|---|
| Rolle | Das Element selbst | Ein div verwendet wird |
| Name | Beschriftung, Label, aria-label | Nur ein Icon im Element steht |
| Zustand | aria-expanded, aria-checked | Der Zustand nur in CSS lebt |
| Wert | value, aria-valuenow | Ein Regler nachgebaut wurde |
<!-- kommt als leere Schaltfläche an -->
<div class="icon" onclick="loeschen()"><svg>…</svg></div>
<!-- Rolle und Name sind gesetzt -->
<button type="button" onclick="loeschen()">
<svg aria-hidden="true">…</svg>
<span class="sr-only">Eintrag entfernen</span>
</button>
Link, Button und div sind nicht austauschbar:
| Element | Tastatur | Im Fokus | Kontextmenü |
|---|---|---|---|
a mit href | Eingabetaste | Ja | Neuer Tab möglich |
button | Eingabe und Leertaste | Ja | Kein Ziel |
div mit onclick | Gar nicht | Nein | Kein Ziel |
Was ein Eigenbau übernimmt, das ein natives Element mitbringt: Tastaturmuster, Rolle und Zustand, plattformübliches Touch-Verhalten — und künftige Verbesserungen, die beim nativen Element mit dem Browser kommen und beim Eigenbau nie von allein.
| ARIA-Muster | Warum es falsch ist | Richtig wäre |
|---|---|---|
role="button" auf <button> | Die Rolle ist schon da | Attribut weglassen |
aria-label auf einem div | Ohne Rolle wird nichts gemeldet | Passendes Element wählen |
aria-hidden auf Fokussierbarem | Fokus landet im Nichts | Element auch inert setzen |
aria-labelledby ins Leere | Die Id existiert nicht | Id prüfen oder Text nutzen |
Gleichnamige Landmarks brauchen ein Label — <nav aria-label="Hauptnavigation">
—, wobei das Wort „Navigation” nicht ins Label gehört: Die Rolle wird ohnehin
angesagt. Überschriftenebenen sind eine Aussage über die Struktur, die
Schriftgröße ist eine Klasse.
Modul: Semantisches HTML als Grundlage
Tastatur, Fokus und Sprungziele
/* Indikator nie ersatzlos entfernen */
:focus-visible {
outline: 3px solid #1b4a7a;
outline-offset: 2px;
}
/* hält den Fokus unter einer klebenden Kopfzeile frei */
:target, :focus-visible { scroll-margin-top: 5rem; }
tabindex kennt drei Bedeutungen: positive Werte verschieben die Reihenfolge
global (nicht verwenden), 0 nimmt in den Tablauf auf, -1 macht per Skript
fokussierbar — der Normalfall für Sprungziele. Ohne tabindex="-1" am Ziel
springt bei einem Skip-Link nur die Ansicht, der Fokus bleibt stehen.
| Komponente | Innerhalb | Hinein und heraus |
|---|---|---|
| Tabs | Pfeiltasten links und rechts | Tabulator, ein Stopp |
| Menü | Pfeiltasten hoch und runter | Escape schließt |
| Grid | Pfeiltasten in vier Richtungen | Tabulator verlässt das Grid |
| Combobox | Pfeiltasten in der Liste | Escape schließt, Eingabe wählt |
Drei Fehlerbilder mit demselben Ergebnis — kein Weiterkommen: die Fokusfalle (Overlay, eingebettetes Widget), der unerwartete Kontextwechsel (Auswahl sendet sofort ab) und der verlorene Fokus (Element wird entfernt, ohne den Fokus zu setzen).
<dialog> mit showModal() bringt Fokussetzung, Fokusfang, inerten
Hintergrund und Escape mit; role="dialog" auf einem div bringt nichts
davon.
Modul: Tastatur, Fokus und Navigation
Formulare, Fehler und Statusmeldungen
<label for="gd">Geburtsdatum</label>
<input id="gd" required aria-describedby="gd-hilfe" autocomplete="bday">
<p id="gd-hilfe">Beispiel: 03.09.1974</p>
<!-- Fehler: Zustand melden, Ursache und Korrektur verknüpfen -->
<input id="gd" aria-invalid="true" aria-describedby="gd-fehler">
<p id="gd-fehler" role="alert">Das Datum liegt in der Vergangenheit.</p>
Das Sternchen für Pflichtfelder ist Optik; gemeldet wird die Pflicht über
required. Zusammengehörige Eingaben brauchen fieldset und legend — ohne
Legende wird nur die Option angesagt, nicht die Frage dazu.
| Rolle | Unterbricht | Passt zu |
|---|---|---|
status | Nein, wartet ab | Trefferzahl, Speichern erfolgreich |
alert | Ja, sofort | Ablaufende Frist, Fehler |
| Kein Live-Bereich | Nichts wird gemeldet | Änderungen mit Fokuswechsel |
Die Live Region muss im Dokument stehen, bevor der Text hineinkommt.
autocomplete nimmt nur standardisierte Werte an (given-name,
family-name, email, postal-code …) — eigene Bezeichnungen wirken nicht.
Bei der Anmeldung gilt: Passwort mit Einfügen und Einmallink per Mail sind
zulässig, Zeichenrätsel und Rechenaufgaben nicht.
Modul: Barrierefreie Formulare und Interaktionen
Komponentenmuster
| Tabs | Akkordeon | |
|---|---|---|
| Geöffnet | Genau eines | Beliebig viele |
| Tastatur | Pfeiltasten, ein Tabstopp | Tabulator je Schalter |
| Rollen | tablist, tab, tabpanel | button mit aria-expanded |
| Passt zu | Alternativen Ansichten | Einer langen Seite |
| Eigenschaft | Modaler Dialog | Popover |
|---|---|---|
| Hintergrund | Inert, nicht bedienbar | Weiter bedienbar |
| Fokus | Wird gefangen | Bleibt frei |
| Escape | Schließt | Schließt |
| Passt zu | Entscheidung erzwingen | Zusatzinformation anbieten |
| Muster | Mindestens nötig | Besser |
|---|---|---|
| Tooltip | Tastatur, Escape, verknüpft | Text sichtbar daneben |
| Carousel | Pause, echte Bedienung | Liste statt Karussell |
| Toast | Live Region, lange genug | Meldung bleibt nachlesbar |
Eine Combobox braucht mindestens role="combobox", aria-expanded,
aria-controls auf ein role="listbox" und eine Statuszeile mit der
Trefferzahl. Eine Website-Navigation ist dagegen eine Linkliste in <nav> und
kein role="menu" — wer Menü-Rollen setzt, schuldet Pfeiltasten, Escape und
einen einzigen Tabstopp. Sortierbare Tabellen melden ihren Zustand über
aria-sort an der Kopfzelle plus role="status".
Modul: Zugängliche UI-Komponenten
Kontrast, Zoom, Zielgrößen und Medien
| Element | Mindestwert | Häufig übersehen bei |
|---|---|---|
| Fließtext | 4,5 : 1 | Hinweistexten in Grau |
| Große Schrift | 3 : 1 | Überschriften auf Farbflächen |
| Bedienelement | 3 : 1 | Rahmen von Eingabefeldern |
| Fokusindikator | 3 : 1 | Fokus auf farbigem Grund |
/* Trefferfläche wachsen lassen, Symbol klein halten */
.icon-btn {
min-width: 44px; min-height: 44px;
display: inline-grid; place-items: center;
}
/* im erzwungenen Modus verschwinden Hintergrundfarben, ein Rahmen überlebt */
@media (forced-colors: active) {
.tab[aria-selected="true"] {
border-bottom: 3px solid ButtonText;
forced-color-adjust: none;
}
}
Für Reflow bis 400 Prozent: min-height statt height, max-width in rem,
und keine Regel, die an der Bildschirmausrichtung hängt — fest montierte Geräte
drehen nicht.
| Fall | Behandlung | Fehlerbild |
|---|---|---|
| Dekoratives Icon | aria-hidden setzen | Wird sinnlos vorgelesen |
| Icon trägt Bedeutung | Namen ergänzen | Schaltfläche ohne Namen |
| Diagramm | Text und Datentabelle | Nur eine Grafik ohne Inhalt |
| Medium | Mindestens | Zusätzlich sinnvoll |
|---|---|---|
| Video mit Ton | Untertitel | Transkript zum Nachlesen |
| Reiner Ton | Transkript | Kapitelmarken |
| Bildtragendes Video | Audiodeskription | Textfassung der Inhalte |
| Stummes Video | Textalternative | Beschreibung im Umfeld |
Modul: Visuelle und responsive Accessibility
Prüfen: Reichweite der Verfahren
| Prüfart | Findet zuverlässig | Findet grundsätzlich nicht |
|---|---|---|
| Automatisch | Fehlende Namen, Kontrastwerte | Ob der Name sinnvoll ist |
| Halbautomatisch | Was zu prüfen ist, geführt | Die Entscheidung selbst |
| Manuell | Bedienbarkeit, Verständlichkeit | Nichts — aber es kostet Zeit |
| Ort | Was dort läuft | Wozu |
|---|---|---|
| Browser | Erweiterung, geführte Prüfung | Beim Entwickeln und Reviewen |
| Komponentenwerkstatt | Prüfengine je Eintrag | Fehler vor der Verwendung finden |
| Pipeline | Dieselbe Engine, feste Schwelle | Rückfall verhindern |
| Bericht | Ergebnisse mit Datum | Nachweis gegenüber Dritten |
Vier Fragen für den Screenreader-Rauchtest: Überschriftenliste aufrufen (ist die Struktur klar), Landmarkliste aufrufen (sind Bereiche anspringbar), Elementliste durchgehen (haben Elemente Namen), Filter ändern und hören (werden Änderungen gemeldet). Die geprüfte Kombination — etwa NVDA mit Firefox unter Windows — gehört in jeden Befund.
Zustände, die eine Prüfung erreichen muss: Dialog offen, Fehlerfall (ungültig absenden), leeres Ergebnis (unmöglichen Filter setzen), Ladezustand (Verbindung drosseln).
Ein Befund, der bearbeitet wird, trägt: Seite, Element, Reproduktionsschritte, Erwartet, Tatsächlich, Kriterium, geprüfte Kombination — und Auswirkung. Die letzte Zeile entscheidet über die Priorität; ohne sie bleibt es eine Formalie.
Modul: Accessibility Testing
Im Entwicklungsprozess verankern
| Zeitpunkt | Frage | Beispiel |
|---|---|---|
| Ready | Ist geklärt, was gilt | Tastenmuster der Komponente benannt |
| Ready | Ist das Nötige vorhanden | Fehlertexte formuliert, nicht nur rot |
| Done | Wurde es geprüft | Tastaturdurchlauf gemacht |
| Done | Ist es belegt | Befund im Ticket vermerkt |
Aus „Der Dialog ist barrierefrei” wird ein prüfbares Kriterium, indem man es in Sätze zerlegt: Fokus beim Öffnen auf der Überschrift, Fokus bleibt im Dialog, Escape schließt, nach dem Schließen liegt der Fokus wieder auf der auslösenden Schaltfläche. Vier Sätze, vier Tests — und derselbe Text taugt als Auftrag an einen Coding Agent.
| Stufe | Läuft | Findet |
|---|---|---|
| Linting | Beim Schreiben | Bild ohne alt, Klick auf div |
| Prüfengine im Test | Bei jedem Lauf | Zustände nach Interaktion |
| Bildvergleich | Bei jedem Lauf | Verschwundener Fokusrahmen |
| Quality Gate | Vor dem Zusammenführen | Rückfall unter die Schwelle |
| Feld im Findings-Register | Inhalt | Fehlt es, dann |
|---|---|---|
| Auswirkung | Was Menschen nicht können | Wird nicht priorisiert |
| Gruppe | Wer betroffen ist | Wirkt wie ein Schönheitsfehler |
| Behelf | Was bis dahin hilft | Betroffene stehen ohne Weg da |
| Termin | Bis wann behoben | Der Eintrag altert still |
Zuständigkeit hängt an Fragen, nicht an einer beauftragten Person: Design verantwortet Kontrast, Fokus, Zielgröße und Text; Entwicklung Semantik, Tastatur und Zustände; QA Prüfung und Nachweis; Product Owner Priorität und Termin.
Modul: Accessibility in Entwicklungsprozessen
Typische Fallen
outline: noneohne Ersatz. Der Indikator verschwindet, der Ersatz kommt „später”.:focus-visibletrennt Maus von Tastatur —:focusnicht.- Positive
tabindex-Werte. Sie ordnen die Reihenfolge global um; die visuelle Reihenfolge perorderzu ändern und das Markup zu belassen, ist dieselbe Falle von der anderen Seite. aria-label, das von der sichtbaren Beschriftung abweicht. Die Sprachsteuerung ruft die sichtbare Beschriftung auf und findet nichts.aria-hiddenauf einem fokussierbaren Element. Der Fokus landet im Nichts. Zusätzlichinertsetzen oder aus dem Tablauf nehmen.- ARIA als Ersatz für fehlendes Tastaturverhalten. Attribute melden Zustände, sie erzeugen keine Bedienbarkeit.
- Platzhaltertext als einzige Beschriftung. Er verschwindet beim Tippen — genau dann, wenn man ihn braucht.
- Fehler nur farblich markieren. Ohne
aria-invalidund verknüpften Fehlertext kommt weder Zustand noch Ursache an. - Gegen Weiß prüfen, obwohl das Element auf einer Farbfläche liegt. Und: nur den Ruhezustand messen, Hover, Fokus und Fehler auslassen.
- Zielgröße am Mauszeiger bemessen statt am Finger. 24 × 24 ist das WCAG-Minimum, 44 × 44 die praktikable Größe.
- Grüner automatischer Lauf als Konformitätsnachweis. Er belegt, dass Namen vorhanden sind, nicht dass sie sinnvoll sind.
- Das Quality Gate als Warnung einführen und nie scharf schalten. Ebenso wirkungslos: eine Schwelle, die der Bestand sofort reißt.
- Eine Erklärung veröffentlichen, die vollständige Konformität behauptet. Bekanntes Offenes gehört hinein — mit Behelf und Termin.
Dieses Thema als Schulung für Ihr Team
Dieser Beitrag erklärt das Thema. Damit Ihr Team es danach auch anwendet, gibt es Modern UI und UX Engineering für Webanwendungen als Schulung — an Ihrem eigenen Code, mit den Fragen, die ein Text nicht beantwortet. Sie wählen die Module, wir bauen daraus ein Programm.
3 Tage·ab 900 EUR netto pro Tag (bis 3 Teilnehmende) ·Termin nach Vereinbarung
Als Team-Schulung anfragenZum Seminar Modern UI und UX Engineering für Webanwendungen →