# ARIA 101 - Praktische Beispiele Jens Grochtdreis | unkonf 2026, Mannheim ## Was soll das alles? POUR - Perceivable (Wahrnehmbar) - Operable (Bedienbar) - Understandable (Verständlich) - Robust (Robust) ## Eines vorweg Wir haben **keine** Chance, einen Screenreader in irgendeiner Weise zu erkennen und unseren Code darauf anzupassen. Das wird sich nie ändern. ## Wichtig zu wissen - Screenreadernutzer benötigen die gleichen Infos wie Sehende. - Alle
interaktiven Elemente
müssen mit der Tastatur bedienbar sein. - Der
Tastaturfokus
muss deutlich sichtbar sein. - Wenn eine Aktion passiert, die für Sehende sichtbar ist, müssen wir Screenreadernutzer informieren. - Semantisch korrektes HTML ist die Grundlage. - Manchmal genügt das nicht und dann müssen Infos (Semantik) per ARIA hinzugefügt werden. - ARIA ist eine **Ergänzung** zu HTML. - ARIA **repariert nicht** HTML. - ARIA hilft uns bei Blinden und Sehgeschädigten weiter, nicht bei anderen Behinderungen. ## Erste Regel von ARIA **Wenn es ein passendes Tag gibt, dann sollte es verwendet werden.** (**Don't use ARIA!**) Das ist korrekt: ```html
Klick mich
Ich bin eine Überschrift
``` Das ist falsch: ```html
Klick mich
Ich möchte eine Überschrift sein!
``` ### Rollen können nicht zaubern Eine ``role="button"`` erstellt keinen Button.
Der Screenreader sagt das Konstrukt nur als Button an
. Die notwendigen Features eines Buttons kommen **nicht automatisch** mit. ### Listen sind hilfreich Eine Liste mit
einem
Listenelement ist recht sinnlos. Haben wir mehrere Elemente in einer Komponente, dann bietet sich eine Liste zur Organisation oft an. Screenreader kommunizieren die Menge der Inhalte und den Standort des Cursors innerhalb der Liste. ### guter Code ```html
Klick mich
Klick mich ebenfalls
Du weisst schon...
``` ### weniger guter Code ```html
Klick mich
Klick mich ebenfalls
Du weisst schon...
``` ### Semantisches HTML bedeutet auch korrektes HTML Es gibt Elemente, die dürfen nicht in anderen Elementen verwendet werden. - ``
`` darf nicht in einem ``
``-Element verwendet werden. - ``
`` darf nicht in einem ``
``-Element verwendet werden. - Ein ``
`` oder eine Headline dürfen nicht in einem ``
``-Element verwendet werden. Details siehe bspw. beim Button in den [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button) unter "Technical Summary/ Permitted content". ## Zweite Regel von ARIA **Do not change native semantics, unless you really have to.** Das ist falsch: ```html
Auswahloption 1
``` Das ist korrekt: ```html
Auswahloption 1
``` ### Designprobleme müssen mit CSS gelöst werden Auch wenn der Radio-Button wie ein Button aussieht, ist er ein ``
``. Um eine ungewöhnliche Optik zu erzeugen, versteckt man am Besten das Input-Element mit ``class="sr-only"``. Die Gestaltung läuft dann über das Label-Element. Warum das input-Element nur visuell versteckt wird, sehen wir in der vierten Regel. ### Rollen Nicht für jede Komponente gibt es ein passendes HTML-Tag. In diesen Fällen kann man mit ARIA-Rollen die Semantik nachrüsten. Sehende bekommen oft aus dem Kontext die Bedeutung einer Komponente mit. ## Rollen, States und Properties ### Eine Auswahl ARIA-Rollen - alert - alertdialog - progressbar - search - spinbutton - status (live region!) - switch - tab - tablist - tabpanel - toolbar - tooltip [Mehr gibt es wie immer bei MDN](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles). ### States and properties - eine Auswahl - aria-busy - aria-controls - aria-current - aria-describedby - aria-disabled - aria-expanded - aria-errormessage - aria-haspopup - aria-hidden - aria-labelledby - aria-invalid - aria-required - aria-valuemax - aria-valuemin [Eine vollständige Übersicht gibt es bei MDN](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes) ## Dritte Regel von ARIA Alle mit ARIA ausgezeichneten Bedienelemente müssen mit der Tastatur erreichbar sein. Allein deshalb ist es sehr hilfreich, die Standard-HTML-Tags zu verwenden. Denn die Browser haben alle notwendigen Usability-Features bereits integriert. ## Vierte Regel von ARIA Fokussierbare Elemente dürfen nicht vor Screenreadern versteckt werden. Beides ist falsch: ```html
Klick mich
Klick mich
``` Das ist **nicht besser**: ```html
press me
``` ## Verstecken | Code | Bedeutung | |:------|:----| | ``aria-hidden="true"`` | versteckt das Element vor dem Screenreader. Es hat keine visuelle Auswirkung. | | ``class="sr-only"`` | Versteckt das Element visuell, aber es bleibt für den Screenreader zugänglich. | | ``display: none`` | versteckt das Element visuell und vor dem Screenreader. | ## Der **Accessible Name** Wie wird ein Inhalt/Bedienelement an den Screenreader kommuniziert?
### Hierarchie 1. ``aria-labelledby``: Hat die höchste Priorität. Verwendet den Textinhalt des referenzierten Elements. Das kann auch ein verstecktes Element sein. 2. ``aria-label``: Wird verwendet, wenn aria-labelledby fehlt 3. Natives HTML-Label: Für Formularsteuerelemente das zugehörige
-Element (über for/id oder implizites Wrappen). 4. ``title``-Attribut: Gilt allgemein als unzuverlässig und wird nicht empfohlen, außer bei ``
``-Elementen, wo es erforderlich ist. 5. Fallbacks: Dazu gehören Platzhaltertext, implizite Beschriftungen oder innerer Inhalt (bei Schaltflächen/Links) bspw. ein ``
Screenreader-Inhalt
``. ## Beispiele mit Buttons ````html
Delete
```` ````html
Ich bin ein externes Label
```` [Diese Seite](https://es-d-1870359320260703-019f1e0a-8b8b-7433-82dd-ba34bd1c31bb.codepen.dev/) mit dem Accessibility-Tab der Devtools anschauen. ## Noch mehr Beispiele ### Accessibility-Tab der Devtools    ### So darf ein Button nicht strukturiert sein ````html
```` ### So ist es besser ````html
```` ```html
Formular absenden
Formular absenden
``` ```html
Falsche Checkbox
Echte Checkbox
``` ```html
Falscher Link
Übermotivierter, echter Link
Dieser Linktext erreicht den Screenreader leider nicht!
Echter Link
``` ## Das war's 
Grochtdreis.de
CSS-Weblog.de
Meine Kochrezepte
@jensgro@mastodon.social