CSS :focus-visible

Die CSS Pseudoklasse :focus-visible steht für Elemente, die via Tastatur fokussiert wurden. Die Tastaturfokusanzeige ist ein unabdingbares Kriterium, um uneingeschränkt mit der Tastatur durch eine Website navigieren zu können.

:focus vs. :focus-visible

Im Unterschied zu :focus-visible, steht :focus für Elemente, die mit einem beliebigen Eingabegerät fokussiert wurden. Das kann ebenfalls die Tastatur sein, aber auch ein Cursor oder eine Touch-Eingabe.

Bisher – ohne :focus-visible – gab es deshalb Potential für nicht eindeutig gestaltete Fokus-Zustände und teilweise unschöne Darstellung.

Anwendungsbeispiele :focus-visible

In den Projekten, die wir selbst umsetzen, verwenden wir :focus-visible zum Beispiel folgendermaßen, um eine solide Ausgangsbasis zu haben:

*:focus:not(:focus-visible) {
    outline: none
}
*:focus-visible {
    outline: 2px dashed currentColor;
    outline-offset: 2px;
}

Über den universellen CSS Selektor * wenden wir das Styling erstmal auf ausnahmslos alle Elemente an. Auswirkung hat es natürlich nur auf Elemente, die auch fokussiert werden können – Links, Buttons, etc..

Dann entfernen wir die Outline, die standardmäßig von den meisten Browsern für die Anzeige des Fokus-Zustands verwendet wird, schließen aber die Tastaturfokusanzeige aus.

Im Folgenden stylen wir über :focus-visible die Tastaturfokusanzeige mit einer 2px starken gestrichelten Outline, die einen 2px Versatz zum fokussierten Element hat.

Mit der Angabe currentColor, bekommt die Outline dieselbe Farbe, wie der fokussierte Text. Das stellt automatisch sicher, dass das Kontrastverhältnis auch eingehalten wird. Vorausgesetzt natürlich das Kontrastverhältnis des Textes ist korrekt.

E-Mail-Input-Feld mit gestylter Tastaturfokusanzeige
Input Feld mit aktiver Tastaturfokusanzeige via :focus-visible

Für bestimmte Elemente werden immer individuelle Anpassungen notwendig sein. Zum Beispiel macht für blaue Buttons mit weißer Schrift, die auf weißem Untergrund stehen, eine weiße Outline keinen Sinn. In diesem Fall würden wir die Outline ebenfalls blau einfärben.

Zwei Buttons. Einer mit gestyltem Focus Visible Zustand
Button ohne und mit Focus Visible

Ausnahme: Focus Visible für Input-Elemente

HTML-Elemente für die :focus-visible nicht funktioniert, sind Input-Elemente. Für Input-Elemente, wie zum Beispiel ein Text-Input, wird die Tastaturfokusanzeige auch per Klick in das Input-Feld ausgelöst.

Focus Visible als WCAG 2.2 Kriterium

Mit der WCAG in Version 2.2 ist nicht nur das generelle Vorhandensein der Tastaturfokusanzeige verpflichtend; auch die Darstellung muss bestimmte Kriterien erfüllen, um eine AAA-Bewertung zu erreichen.

Zum Beispiel muss es einen Bereich der Fokusanzeige geben, der ein Kontrastverhältnis von mindestens 4.5:1 zwischen den Farben im fokussierten und unfokussierten Zustand aufweist.

Wenn die kontrastierte Fläche mit einer Outline umgesetzt wird, muss dies eine mindestens 1px dicke Umrandung der unfokussierten Komponente sein.

Hier könnt ihr alle Kriterien im Detail nachlesen.

Browser Support

Den detaillierten Browser-Support für dieses Feature könnt ihr auf caniuse.com einsehen.

Data on support for the css-focus-visible feature across the major browsers from caniuse.com

Geschrieben von Felix Lehmann

Benutzerbild

Als Web-Designer und Frontend-Developer bei kulturbanause umfasst Felix Hauptaufgabenbereich die Konzeption, Gestaltung und Umsetzung von Designsystemen. Scribble auf Papier, Prototyping im Design-Tool, schnellstmöglich in den Browser und mit CSS umsetzen. Auch das Überführen in ein Custom WordPress-Theme ist kein Problem. Die meiste Zeit verbringt er trotzdem damit die richtigen Klassennamen zu finden.

Feedback & Ergänzungen – 1 Kommentar

  1. Mark S.
    schrieb am 08.09.2021 um 14:48 Uhr:

    Vielen Dank für den interessanten Artikel.

    Mir stellt sich allerdings folgende Frage:

    Wenn ich z. B. ein a-Element für :focus und :focus-visible style, der Browser allerdings :focus-visible nicht kennt, ist es dann ratsam das a-Element nur für :focus zu stylen (da es :focus-visible beinhaltet?) oder wäre eine Fallback-Lösung die sicherere Variante?

    Sprich folgende CSS-Regel würde im IE 11 nicht funktionieren:
    a:focus,
    a:focus-visible {
    background-color: red;
    }

    Daher lieber:
    a:focus {
    background-color: red;
    }
    a:focus-visible {
    background-color: red;
    }

    Oder (da :focus wohl :focus-visible beinhaltet?) gleich nur:
    a:focus {
    background-color: red;
    }

    Viele Grüße
    Mark S.

    Antworten

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

Barrierefreie Projekte mit kulturbanause

Wir setzen regelmäßig digitale Produkte barrierefrei um und kennen die Anforderungen im konzeptinellen, gestalterischen, redaktionellen und technischen Bereich.

Leistungsangebot Barrierefreiheit →

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Übersicht Schulungsthemen →