Focus visible in CSS

Der Tastaturweg bleibt sichtbar

Gutscheinfeld, Einlösen, Produktkarte: drei Stellen in der Kasse.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 4.1.2Link im Button

CSS-Fokuslabor

Wann :focus-visible greift

Der Browser kennt das fokussierte Element. Mit :focus-visible entscheidet er zusätzlich, wann Menschen den Fokus sehen müssen. Diese Landkarte macht beide Zustände auseinanderhaltbar.

Ein Fokus, drei sichtbare Ergebnisse

Konzeptionelle Darstellung. Die genaue Heuristik gehört dem Browser; die gezeigten Ergebnisse sind das übliche Verhalten moderner Browser.

:focus beantwortet: „Welches Element hat Fokus?“ :focus-visible beantwortet: „Soll dieser Fokus jetzt sichtbar markiert werden?“ Entfernen Sie die native Outline nicht global.

Ein Ring für helle und dunkle Flächen

Zwei kontrastierende Farbbänder machen denselben Fokusindikator auf verschiedenen einfarbigen Hintergründen erkennbar. Das Beispiel folgt der W3C-Technik C40. Prüfen Sie bei Bildern und Verläufen zusätzlich jeden betroffenen Hintergrund.

:where(a, button, input, select, textarea):focus-visible {
  outline: 2px solid #f9f9f9;
  outline-offset: 0;
  box-shadow: 0 0 0 4px #193146;
}

@media (forced-colors: active) {
  :where(a, button, input, select, textarea):focus-visible {
    outline: 3px solid Highlight;
    outline-offset: 2px;
    box-shadow: none;
  }
}

:where() hält die Selektor-Spezifität niedrig. Dadurch können Sie den Ring in einer einzelnen Komponente später gezielt anpassen.

Was der Code zeichnet

Im Modus für erzwungene Farben kann der Browser Schatten entfernen. Die Outline bleibt deshalb erhalten und übernimmt die Systemfarbe Highlight.

Der Ring muss bis zum Auge durchkommen

Ein korrektes :focus-visible genügt nicht, wenn overflow den Ring abschneidet oder ein feststehender Header das fokussierte Element verdeckt.

So prüfen Sie es

  1. Laden Sie die Seite neu und drücken Sie nur Tab. Der Ring muss bei jedem Link und Bedienelement mitwandern und stehen bleiben, bis der Fokus weiterzieht.
  2. Klicken Sie auf eine Schaltfläche. Ein fehlender Autorenring kann hier der Browser-Heuristik entsprechen. Klicken Sie danach in ein Textfeld; dort ist die sichtbare Markierung typischerweise weiterhin sinnvoll.
  3. Tabben Sie bei geöffnetem Sticky Header, Cookie-Banner und Dialog. Das fokussierte Element darf nicht vollständig verdeckt sein; der Ring darf nicht an einem Container abgeschnitten werden.
  4. Prüfen Sie mit aktivierten erzwungenen Farben. Wenn der Schatten entfällt, muss die System-Outline den Fokus weiterhin zeigen.

Aus dem Prüfbericht

Drei Stellen, drei Befunde

Kritisch Die Einlösen-Schaltfläche zeigt nur einen Pfeil Regel button-name

Ohne Text bleibt die Schaltfläche neben dem Feld namenlos. aria-label="Einlösen" oder ein sichtbares Wort nennt die Aktion.

Anleitung: Schaltflächen zugänglich beschriften

Kritisch Die Produktkarte fängt den Fokus zweimal Regel nested-interactive

In der Karte liegt ein Link innerhalb der Schaltfläche. Nebeneinander bekommt jeder Stopp seinen eigenen sichtbaren Rahmen.

Anleitung: Verschachtelte Bedienelemente auflösen

Zum Mitnehmen

Der sichtbare Fokus, korrigiert

Eine Regel im CSS, zwei Namen im HTML.

Korrektur in 3 Schritten ansehen
  1. outline durch eine eigene Markierung ersetzen

    outline: none entfernt die einzige Fokusmarkierung. :focus-visible zeigt sie bei Tastaturbedienung und lässt den Mausklick unverändert.

    KorrekturvergleichSchritt 1 · CSS

    Vorher

    :focus {
      outline: none;
    }

    Nachher

    :focus-visible {
      outline: 3px solid #1b1b1b;
      outline-offset: 2px;
    }

    Markierte Zeilen wurden geändert

    So prüfen Sie es Gehen Sie mit der Tabulatortaste durch die Kasse. Um jedes Element liegt ein deutlicher Rahmen.

  2. Feld und Schaltfläche benennen

    Das label benennt das Feld, aria-label die Schaltfläche. Der Platzhalter entfällt, weil er beim Tippen verschwindet.

    KorrekturvergleichSchritt 2 · HTML

    Vorher

    <input type="text" name="gutschein" placeholder="Gutscheincode">
    <button type="submit"><span aria-hidden="true">→</span></button>

    Nachher

    <label for="gutschein">Gutscheincode</label>
    <input id="gutschein" type="text" name="gutschein">
    <button type="submit" aria-label="Einlösen"><span aria-hidden="true">→</span></button>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Klicken Sie auf „Gutscheincode“. Der Cursor springt ins Feld.

  3. Den Link aus der Schaltfläche nehmen

    Ein Fokusstopp pro Bedienelement. Nebeneinander bekommen Schaltfläche und Link je einen eigenen sichtbaren Rahmen.

    KorrekturvergleichSchritt 3 · HTML

    Vorher

    <button type="button" class="karte">Warenkorb öffnen
      <a href="/versand">Versandkosten</a>
    </button>

    Nachher

    <button type="button" class="karte">Warenkorb öffnen</button>
    <a href="/versand">Versandkosten</a>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Gehen Sie mit der Tabulatortaste durch die Karte. Der Rahmen liegt einmal um die Schaltfläche, einmal um den Link.

Werbung

Kostenloser Website-Barrierefreiheits-Check

Website auf Barrierefreiheit prüfen.

Technische WCAG-Warnsignale erkennen. Kritische Stellen zuerst prüfen.

Der Website-Check ist bereit.

Werbung

Ein letzter Schritt

Prüfen, bevor Sie gehen.

Finden Sie automatisch erkennbare Barrieren auf Ihrer eigenen Website.

Website prüfen

Kostenlos starten · keine Installation

Automatisches Screening. Tastaturbedienung und Screenreader bleiben manuelle Prüfung.