Sichtbare Fokusstile
Empfehlung
Den Fokus nie ersatzlos entfernen. Wer den Fokusring des Browsers nicht mag, gestaltet ihn mit :focus-visible um, statt outline: none zu setzen.
:focus-visible {
outline: 3px solid black;
outline-offset: 2px;
box-shadow: 0 0 0 6px white; /* zweiter, heller Ring für dunkle Hintergründe */
}↗ Beispiel in neuem Tab öffnen
Dazu ein paar Regeln:
- Den Ring mit
outlinezeichnen,box-shadowhöchstens als Ergänzung. - Mindestens 2px dick und mit mindestens 3:1 Kontrast.
- Für Gruppen und Karten
:focus-withinoder:has(:focus-visible)nutzen. - Sticky Header und Banner dürfen das fokussierte Element nicht vollständig verdecken.
Begründung
Warum der Fokus sichtbar sein muss
Für alle, die mit der Tastatur navigieren, ist der Fokusring das, was für alle anderen der Mauszeiger ist. Ohne ihn weiß man nicht, wo man gerade ist.1 WCAG verlangt deshalb auf Stufe AA, dass der Tastaturfokus sichtbar ist (2.4.7), und nennt das Entfernen des Fokusindikators per CSS ausdrücklich als typischen Fehler.2
Warum :focus-visible statt :focus
Früher bekam jedes fokussierte Element einen Ring, auch nach einem Mausklick auf einen Button. Das fanden viele hässlich, und so landete outline: none in unzähligen Stylesheets. Damit war der Fokus auch für Tastaturnutzer weg.3
Heute entscheidet der Browser selbst, wann der Fokus sichtbar sein soll, und :focus-visible trifft genau dann. So ändert man wie der Fokus aussieht, ohne zu ändern, wann er erscheint.3
In Chrome 155 nachgeprüft:
| Aktion | :focus | :focus-visible |
|---|---|---|
| Button mit der Maus anklicken | ja | nein |
| Mit Tab auf einen Button | ja | ja |
| Mit der Maus in ein Textfeld klicken | ja | ja |
↗ Beispiel in neuem Tab öffnen
Die letzte Zeile ist wichtig: :focus-visible heißt nicht „nur Tastatur“. In Textfeldern zeigt der Browser den Fokus auch nach einem Klick, weil man dort ja tippen will. Manche Quellen vereinfachen das zu „nur bei Tastaturfokus“.1
WCAG erlaubt dieses Verhalten ausdrücklich: Es reicht, wenn es einen Bedienmodus gibt, in dem der Fokus sichtbar ist.2
Warum outline und nicht nur box-shadow
Im Forced-Colors-Modus (zum Beispiel dem Kontrastmodus von Windows) ersetzt das System Farben, Hintergründe und Schatten. box-shadow verschwindet dabei, outline bleibt erhalten. Ein Fokusring, der nur aus einem Schatten besteht, ist dort also unsichtbar.1
Der Trick mit zwei Ringen stammt von Sara Soueidan: Die outline liegt über dem Schatten. Ein 6px breiter weißer Schatten hinter einer 3px schwarzen Outline ergibt deshalb zwei gleich breite Ringe in Schwarz und Weiß. So ist der Fokus auf hellem und dunklem Hintergrund sichtbar.1 Bei dunklen Seiten tauscht man die Farben.
Wie groß und kontrastreich
WCAG 2.4.13 (Stufe AAA) gibt eine Messlatte: Der Ring soll mindestens so viel Fläche haben wie ein 2px dicker Rahmen um das Element, und zwischen fokussiertem und unfokussiertem Zustand sollen mindestens 3:1 Kontrast liegen.4 Auch auf Stufe AA gilt für den Fokusring 3:1 gegenüber der Umgebung, über das Kriterium 1.4.11 Non-text Contrast.23
Wann anwenden?
Immer. Jede Website mit Links, Buttons oder Formularen braucht einen sichtbaren Fokus.
Gruppen und Karten hervorheben
:focus-within trifft ein Element, wenn es selbst oder irgendetwas darin den Fokus hat.5 Das passt gut zu Formulargruppen:
.feldgruppe:focus-within {
background: var(--hervorhebung);
}:focus-within reagiert aber auf jeden Fokus, auch nach einem Mausklick. Soll die Gruppe nur bei Tastaturbedienung reagieren, nimmt man :has(:focus-visible):
.karte:has(:focus-visible) {
outline: 3px solid;
}↗ Beispiel in neuem Tab öffnen
Beides habe ich in Chrome 155 nachgeprüft. Ein Anwendungsfall steht in Ganze Karte klickbar machen.
Fokus nicht verdecken
Seit WCAG 2.2 gilt auf Stufe AA: Ein Element mit Tastaturfokus darf nicht vollständig hinter etwas verschwinden, das die Website selbst darübergelegt hat. Typische Verursacher sind Sticky Header, Sticky Footer und Cookie-Banner.6 Gegenmittel ist scroll-padding, siehe Sticky-Header einrichten.
Ausnahmen / Gegenbeispiele
- Wer Maus und Tastatur abwechselnd benutzt, versteht unter Umständen nicht, warum der Ring mal da ist und mal nicht. MDN nennt das ausdrücklich als Problem für Menschen mit kognitiven Einschränkungen.3 WCAG empfiehlt deshalb als Best Practice, auch Mausnutzern einen sichtbaren Fokus anzubieten, wo es hilft.2 Wer auf Nummer sicher gehen will, gestaltet
:focusdezent und:focus-visibledeutlich. - Den Fokusstil des Browsers unverändert lassen ist ebenfalls zulässig. WCAG 2.4.13 nimmt diesen Fall sogar ausdrücklich aus.4 Er ist nur nicht auf jedem Hintergrund gut sichtbar.
- Das alte Muster
:focus:not(:focus-visible)brauchte man, solange nicht alle Browser:focus-visiblekonnten.1 Seit 2024 ist das überflüssig.
Checkliste
- Kein
outline: noneoderoutline: 0ohne gleichwertigen Ersatz - Eigener Fokusstil über
:focus-visible - Fokusring mit
outline(sichtbar im Forced-Colors-Modus) - Mindestens 2px dick und mindestens 3:1 Kontrast zur Umgebung
- Auf allen verwendeten Hintergründen sichtbar (zweiter Ring per
box-shadowhilft) - Sticky Header, Footer und Banner verdecken keine fokussierten Elemente
- Einmal die ganze Seite mit Tab durchgehen und schauen, ob man immer weiß, wo man ist
Quellen / Erfahrungen
- focus-visible Pseudoklasse (MDN) — Heuristik des Browsers, Hintergrund, Kontrast, Kognition
- focus-within Pseudoklasse (MDN) — Definition, Formulargruppen
- A guide to designing accessible, WCAG-conformant focus indicators (Sara Soueidan) — zweifarbiger Ring, Forced Colors, alter Fallback
- Understanding SC 2.4.7 Focus Visible (W3C WCAG) — Pflicht zum sichtbaren Fokus (AA)
- Understanding SC 2.4.11 Focus Not Obscured Minimum (W3C WCAG) — nicht verdecken (AA)
- Understanding SC 2.4.13 Focus Appearance (W3C WCAG) — Größe und Kontrast (AAA)
Eigene Ergänzungen: die Tabelle und die Varianten mit :focus-within und :has(:focus-visible) habe ich am 2026-10-18 in Chrome 155 geprüft. Den Forced-Colors-Modus und Screenreader habe ich nicht getestet.
Browsersupport
Laut web-features 3.43.0 (abgefragt 2026-10-18), alles Baseline widely available: :focus-visible seit 2024-09-14 (Chrome/Edge 86, Firefox 85, Safari 15.4), :focus-within seit 2022-07-15, :has() seit 2026-06-19.
Footnotes
-
A guide to designing accessible, WCAG-conformant focus indicators (Sara Soueidan), Einleitung, Abschnitte „A ‘universal’ focus indicator“ und „Showing the focus indicator only for keyboard users“, 2021-08-13, aktualisiert 2023-08-27. ↩ ↩2 ↩3 ↩4 ↩5
-
Understanding SC 2.4.7 Focus Visible (W3C WCAG), Abschnitte „Intent“ und „Failures“. ↩ ↩2 ↩3 ↩4
-
focus-visible Pseudoklasse (MDN), Abschnitte „:focus vs :focus-visible“ und „Accessibility“, Stand 2026-10-06. ↩ ↩2 ↩3 ↩4
-
Understanding SC 2.4.13 Focus Appearance (W3C WCAG), Kriterium und Abschnitt „Minimum area“. ↩ ↩2
-
focus-within Pseudoklasse (MDN), Einleitung, Stand 2026-10-14. ↩
-
Understanding SC 2.4.11 Focus Not Obscured Minimum (W3C WCAG), Abschnitt „Intent“. ↩