3 Gründe, warum auch Web-Entwickler:innen von Barrierefreiheit profitieren
Web-Barrierefreiheit ist ein ethisches Gebot und wirtschaftlich sinnvoll. Ihr unterstützt die Inklusion von Menschen mit Behinderung und erreicht damit potenziell mehr Kund:innen. Dennoch, als Web-Entwickler:in denkt ihr euch vielleicht: „Das ist super für meine Firma und die ganze Gesellschaft. Aber für mich heißt es noch mehr Arbeit!“
Ich kann euch verstehen! Das Thema Barrierefreiheit kann am Anfang ganz schön überwältigen. Und ich gebe zu, manche Sachen wie ARIA Live-Regionen bereiten tatsächlich etwas mehr Arbeit. Doch ich verrate euch ein kleines Geheimnis: Barrierefreier Code wird euer Leben als Web-Entwickler:in einfacher machen und euch langfristig viel Zeit sparen!
Foto: © ThisIsEngineering / pexels.com
Ihr glaubt mir nicht? Dann lest einfach die folgenden drei Gründe, warum mit Barrierefreiheit alles besser ist.
1. Semantisches Markup ist leicht lesbar und wartbar
Semantisches Markup vermittelt Informationen über die Bedeutung von Elementen nicht nur an assistive Technologien. Es vermittelt diese Bedeutung auch den Entwickler:innen, die den Code lesen, bearbeiten und umgestalten.
Stellt euch vor, ihr seid neu im Team und wollt euch in die Code-Basis einlesen. Würdet ihr vor Freude Luftsprünge machen, wenn ihr solchen Code vorfindet?
<div class="fixed-header" role="banner">
<div id="header-logo" role="img" aria-label="Logo Example Page"></div>
<div role="navigation" aria-label="Main Navigation">
<div role="list">
<div role="listitem"><a href="/">Home</a></div>
<div role="listitem"><a href="/about">About</a></div>
</div>
</div>
</div>
<div role="main">
<div role="heading" aria-level="1">Best Pizza in Town</div>
<div role="heading" aria-level="2">Pizza Salami</div>
<div id="pizza-salami" role="img" aria-label="Pizza with salami slices"></div>
<div>Some text</div>
<div role="heading" aria-level="2">Pizza Capricciosa</div>
<div id="pizza-capri" role="img" aria-label="Pizza with baked ham, mushroom and artichoke"></div>
<div>Some text</div>
</div>
Puh, das sind schon verdammt viele div
Tags! Irgendwie schwer zu verstehen. Tja, dann
würdet ihr euch über folgenden Code wohl mehr freuen:
<header>
<img src="/header-logo.svg" alt="Logo Example Page">
<nav aria-label="Main Navigation">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
</header>
<main>
<h1>Best Pizza in Town</h1>
<h2>Pizza Salami</h2>
<img src="/pizza-salami.jpg" alt="Pizza with salami slices">
<p>Some text</p>
<h2>Pizza Capricciosa</h2>
<img src="/pizza-capri.jpg" alt="Pizza with baked ham, mushroom and artichoke">
<p>Some text</p>
</main>
Ah, das ist besser! Auf dieser Basis könnt ihr euch im Team sinnvoll über den HTML-Code austauschen. Notiz am Rande: Beide Code-Beispiele bereiten den Inhalt barrierefrei für Screenreader-Nutzer:innen auf. Aber nur das zweite Beispiel ist vorteilhaft für Entwickler:innen.
Wenn ihr jetzt denkt: „Boah, der übertreibt ja völlig mit dieser Spaghetti-Code-Hölle!“ Dann kann ich nur antworten, dass ich Variationen davon schon auf unzähligen Websites gesehen habe. Einfach nur traurig.
2. Native Bedienelemente sind standardmäßig tastaturbedienbar
HTML-Elemente wie a
, button
, input type="checkbox"
oder input type="radio"
sind alle von Haus aus barrierefrei. Zum Beispiel können Nutzer:innen mit
der Tab-Taste von Schaltfläche zu Schaltfläche springen und diese mit der Enter- oder Leertaste aktivieren.
Stellt euch vor, ihr wollt eine Schaltfläche mit dem div
Element implementieren – warum auch immer.
Damit dieses Monstrum mit der Tastatur bedienbar wird, müsstet ihr folgende Schritte unternehmen:
tabindex="0"
setzen, um das Div in die Tab-Reihenfolge aufzunehmen.- Einen gut sichtbaren Fokus-Indikator setzen, der vermittelt wann das Div den Fokus hat.
- Mit einem
keydown
Event-Handler die Aktivierung des „Buttons“ mit Enter- und Leertaste ermöglichen.
Das Folgende ist zu tun, wenn ihr stattdessen das native button
Element verwendet:
- Nichts!
Buttons sind standardmäßig tastaturbedienbar und lösen automatisch das click
Event aus, wenn
die Enter- oder Leertaste gedrückt wird. Weiters könnt ihr das Styling sehr einfach mit CSS anpassen. Das trifft auch auf
die meisten Formularelemente zu. Lest dazu meinen Artikel über Web-Formulare.
3. Zustandsbezogene, semantische CSS-Selektoren sind aussagekräftiger und robuster
Ihr könnt die semantischen Tag-Namen und ARIA-Attribute
für aussagekräftige und leicht verständliche CSS-Selektoren nutzen. Zum
Beispiel: header nav > ul { ... }
oder button[aria-expanded="true" ] { ... }
.
Indem die CSS-Regeln alleine auf HTML-Tags und -Attributen aufbauen, braucht ihr keine zusätzlichen CSS-Klassen, die
dynamisch mit JavaScript gesetzt werden. Stattdessen könnt ihr euch darauf konzentrieren, die Geschäftslogik alleine
im HTML-Code abzubilden (etwa indem aria-expanded
auf „true“ oder „false“ gesetzt wird).
Weitere Beispiele und eine ausführliche Auseinandersetzung mit dem Konzept bietet der Artikel „Style with Stateful, Semantic Selectors“ von Ben Myers.
Nützliche Links
- Semantische HTML-Elemente (W3 Schools)
- HTML: Eine gute Basis für Barrierefreiheit (MDN)
- CSS Attribut-Selektoren (MDN)
Update am 16.12.2022
Abschnitt über zustandsbezogene, semantische CSS-Selektoren wurde überarbeitet.
Erstellt am