Gestalte deutlich sichtbaren Tastaturfokus mit :focus-visible
Schickes Design oder Barrierefreiheit? Mit der CSS-Pseudoklasse :focus-visible
könnt
ihr sowohl Tastaturnutzer:innen unterstützen als auch ästhetisch anspruchsvolle Kund:innen zufriedenstellen.
Foto: © cottonbro / pexels.com
Die Bedeutung des Tastaturfokus
Ein zentrales Merkmal von barrierefreien Websites ist die Möglichkeit, sie alleine mit der Tastatur zu bedienen. Davon profitieren etwa Nutzer:innen mit motorischen Einschränkungen, die keine Maus verwenden können. Damit sie sinnvoll durch den Inhalt navigieren können, muss das aktuell fokussierte Element einen deutlich erkennbaren, visuellen Fokus-Indikator erhalten.
Browser definieren einen Standard-Fokusrahmen, um die
Sichtbarkeit des Tastaturfokus zu gewährleisten. Das Aussehen des Fokus-Indikators kann mithilfe der
CSS-Pseudoklasse :focus
geändert werden. Zum Beispiel:
button:focus {
outline: 2px solid purple;
}
Design versus Barrierefreiheit
Nun wird der Fokus-Indikator nicht nur bei der Navigation mit der Tastatur eingeblendet, sondern auch dann, wenn Nutzer:innen ein fokussierbares Element mit der Maus anklicken oder am Handy mit dem Finger berühren. Für manche Nutzer:innen ist diese visuelle Änderung unerwartet und irritierend. Ihnen ist nicht bewusst, dass der Fokus-Indikator zur Barrierefreiheit beiträgt.
Oft sind Web-Entwickler:innen daher mit Kund:innen oder Grafik-Designer:innen konfrontiert, welche die Entfernung des Fokus-Indikators aus ästhetischen Gründen fordern. Zahlreiche Websites enthalten daher CSS-Regeln wie diese:
button:focus {
outline: none;
}
Bitte tut das nicht! Ihr würdet damit Nutzer:innen, die auf die Tastaturbedienung angewiesen sind, von der Nutzung eurer Website ausschließen.
Die Lösung heißt :focus-visible
Es gibt eine Möglichkeit, Design und Barrierefreiheit zu versöhnen: Die Pseudoklasse :focus-visible
.
Die Spezifikation dazu lautet:
The :focus-visible pseudo-class applies while an element matches the :focus pseudo-class and the user agent determines via heuristics that the focus should be made evident on the element.
Das bedeutet: Der Fokus-Indikator wird nur eingeblendet, wenn er gebraucht wird. Also wenn ein Element fokussiert wird und der Browser den visuellen Indikator für notwendig erachtet (z.B. bei Navigation mit der Tastatur).
/* Fokus-Indikator verbergen, wenn dieser nicht benötigt wird. */
button:focus:not(:focus-visible) {
outline: none;
}
/* Fokus-Indikator bei Navigation mit Tastatur einblenden. */
button:focus-visible {
outline: 2px solid purple;
}
Auf diese Weise könnt ihr das Fokus-Verhalten etwa für Schaltflächen und Links präzise steuern. Manche Elemente wie Eingabefelder erhalten jedoch weiterhin bei einem Mausklick den Fokus-Indikator, da das Anklicken die Eingabe per Tastatur aktiviert und somit eine Tastaturbedienung gegeben ist. Mit meiner Demo könnt ihr selbst das Verhalten testen.
Browser-Unterstützung
Das Feature wird bereits von den meisten modernen Browsern unterstützt.
Auch Safari unterstützt :focus-visible
seit
der Version 15.4.
Wer auf Nummer sicher gehen will, kann einen regulären Fokus-Indikator definieren und diesen für Browser,
die :focus-visible
unterstützen, überschreiben.
/* Regulärer Fokus-Indikator für ältere Browser */
button:focus {
outline: 2px solid purple;
}
/* Für Browser, die :focus-visible unterstützen */
@supports (:focus-visible) {
button:focus:not(:focus-visible) {
outline: none;
}
button:focus-visible {
outline: 2px solid purple;
}
}
Nützliche Links
- Sichtbarkeit des Tastaturfokus auf Websites
- WCAG 2.1 Erfolgskriterium 2.4.7 Fokus sichtbar
- WCAG 2.2 Erfolgskriterium 2.4.11: Fokus-Darstellung (Minimum)
- MDN-Eintrag zu :focus-visible
Update am 14.04.2022
Artikel wurde hinsichtlich Safari 15.4 aktualisiert.
Erstellt am