Zum Inhalt springen

Die Basis - HTML richtig nutzen

Wir lernen HTML, CSS, JavaScript in dieser Reihenfolge - das ist auch die Reihenfolge, in der wir es anwenden sollten: Wenn ein Effekt mit HTML, CSS oder JavaScript erzielt werden kann, verwendet immer die einfachste Technologie.

Folgende Folie aus einem Vortrag von Martin Splitt zeigt verschiedene Arten, einen Link zu bauen. Die einfachste Art ist die Beste!

Beispiel für barrierefreies Web - lieber ein Link mit href als mit JavaScript

Das lang-Attribut hilft bei der Interpretation der natürlichen Sprache. Das wird vom Browser selbst verwendet, um Anführungszeichen (bei <q>) und Datumsangaben darzustellen. Ebenso von Vorleseprogrammen, Suchmaschinen, Übersetzungsprogrammen, …

Den Standardwert setzt man im html-Tag. In jedem Tag kann man lokal die Sprache ändern:

<!DOCTYPE html>
<html lang="de">
<head>
<title>Lieblingsbücher</title>
</head>
<body>
<h1>Meine Lieblingsbücher</h1>
<p lang="en">Neal Stephenson: <q>Diamond Age</q></p>
</body>
</html>

Die HTML-Tags, die wir kennengelernt haben, geben dem Dokument nicht nur eine Struktur, sondern verleihen auch eine Bedeutung. Diese Bedeutung sollten wir immer nutzen:

  • für einen Link? Verwendet <a href="https://...">, nicht <span> oder <div>
  • für eine Liste? Verwendet <li>, nicht <span> oder <div>
  • für eine Überschrift? Verwendet <h1>, nicht <strong> oder <div>
  • für einen Absende-Button? Verwendet <button>/<input type="submit">, nicht <span> oder <div>

Einen Überblick über die Inhalte der Seite zu erhalten, ist schwierig, wenn man nicht sehen kann. Screenreader verwenden Überschriften und sogenannte Landmarks, um diesen Überblick zu schaffen - vergleichbar damit, wie sehende NutzerInnen eine Seite kurz überfliegen.

Die Überschrift h1 sollte nur einmal pro Seite verwendet werden und die gesamte Seite beschreiben. Die weiteren Überschriften h2, h3, … werden für die weiteren Gliederungsebenen verwendet - ohne Ebenen zu überspringen (nach h2 kommt h3, nicht direkt h4).

Für Bereiche der Seite, die eine wichtige Rolle spielen (Navigation, Suche, Header, Main, Section, …), sollte man die entsprechenden semantischen HTML-Tags verwenden. Falls das nicht möglich ist, kann man die Rolle explizit mit dem role-Attribut definieren:

HTML-TagRole-AttributBedeutung
mainmainPrimärer Inhalt der Seite
sectionregionBedeutsamer, benannter Bereich, den man direkt anspringen will
navnavigationLinks zur Seiten- oder Website-Navigation
keine HTML-EntsprechungsearchSuchfunktion für Inhalte der Website
headerbannerLogo/Identität der Site, meist oben
footercontentinfoCopyright, Links zu Datenschutz/Barrierefreiheit
asidecomplementaryErgänzend zum Hauptinhalt, bleibt auch isoliert sinnvoll
formformEin Formular, wenn kein anderes Landmark passt
<form role="search">
<input type="search" aria-label="Suchtext" size="20">
<input type="submit" value="Suchen">
</form>

Siehe auch w3c: ARIA Landmarks Example

Bei einer typischen Seite steht vor dem eigentlichen Inhalt oft eine lange Navigation mit vielen Links. TastaturnutzerInnen müssten sich bei jeder einzelnen Seite erst durch die komplette Navigation tabben, bevor sie beim Inhalt ankommen.

Die Lösung ist ein Skip Link (“Zum Inhalt springen”): ein ganz normaler Link, der als allererstes fokussierbares Element im <body> steht und per Sprungmarke direkt zum <main> springt:

<body>
<a href="#main-content" class="skip-link">Zum Inhalt springen</a>
<header>...</header>
<nav>... viele Links ...</nav>
<main id="main-content">
<h1>Eigentlicher Inhalt</h1>
</main>
</body>

Damit der Link sehende NutzerInnen nicht stört, aber trotzdem für alle da ist, wird er visuell versteckt und erscheint nur, wenn er per Tab den Fokus bekommt:

.skip-link {
position: absolute;
top: -40px; /* außerhalb des sichtbaren Bereichs */
left: 0;
}
.skip-link:focus {
top: 0; /* bei Fokus wieder sichtbar */
}

WAI-ARIA (Accessible Rich Internet Applications) ist ein Set von HTML-Attributen, mit denen man Screenreadern zusätzliche Informationen über ein Element mitgeben kann - vor allem für interaktive Elemente, die es in reinem HTML nicht gibt.

Trotzdem gibt es ein paar ARIA-Attribute, die im Alltag immer wieder gebraucht werden:

AttributWofür
aria-label="..."Zugänglicher Name für ein Element ohne (ausreichenden) sichtbaren Text - z.B. ein reiner Icon-Button
aria-hidden="true"Versteckt ein Element nur vor Screenreadern (bleibt visuell sichtbar) - z.B. für rein dekorative Icons
aria-expanded="true/false"Zeigt an, ob ein aufklappbares Element (z.B. Dropdown-Menü) gerade offen ist
aria-live="polite"Kündigt Änderungen des Inhalts automatisch an - z.B. eine Erfolgsmeldung, die per JavaScript eingefügt wird
<!-- Icon-Button ohne sichtbaren Text -->
<button aria-label="Menü schließen">
<svg aria-hidden="true">...</svg>
</button>