CSS Keyboard Focus

Zeigen, wohin der nächste Tastendruck geht

Kopfzeile, Formular, Scrollbereich: jeder Tabstopp braucht eine sichtbare Markierung.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 2.1.1, 2.1.3Protokoll ohne expliziten Fokuszugang

Fokus unter Belastung

Ein Ring, der auf jeder Station sichtbar bleibt

Folgen Sie dem Tastaturweg über helle, dunkle und scrollende Flächen.

Konzeptioneller Fokusweg durch eine Projektseite

aktueller Tastaturfokus

WERKRAUM1 Projekte
Prüfbericht September3 Bericht laden
Schrittprotokoll4Analyse gestartet
Seiten gefunden
Prüfung läuft
Alle Stationen sind gleichzeitig markiert, damit der Weg vergleichbar bleibt. In der echten Oberfläche trägt immer nur das aktuell fokussierte Element den Ring.

Drei Stellen, an denen sichtbarer Fokus verloren geht

Speichern
Am Rand abgeschnitten

overflow: hidden kappt alles außerhalb des Containers, auch die Outline.

Fixierte KopfzeileSprungziel
Von einer Leiste verdeckt

scroll-margin-block hält Sprung- und Fokusziele unter Overlays frei.

Weiternur eine dunkle Linie
Mit dem Hintergrund verschmolzen

Testen Sie jeden Fokuszustand auf allen verwendeten Flächen.

Die vollständige Grundregel

Zwei kontrastreiche Farbbänder funktionieren auf wechselnden einfarbigen Flächen. Im erzwungenen Farbmodus bleibt die Outline erhalten; der Schatten darf dort entfallen.

Löschen Sie vorhandene outline: none-Regeln. Ergänzen Sie keinen Gegen-Selektor für Mausfokus: Der Browser entscheidet per Heuristik, wann :focus-visible nötig ist. Texteingaben können den Ring deshalb auch nach einem Klick zeigen.

:root {
  --focus-inner: #ffffff;
  --focus-outer: #151514;
}

:focus-visible {
  outline: 3px solid var(--focus-inner);
  outline-offset: 2px;
  box-shadow: 0 0 0 7px var(--focus-outer);
}

.kopfzeile {
  overflow: visible;
  padding-block: 0.5rem;
}

main[tabindex="-1"],
.protokoll {
  scroll-margin-block: 6rem;
}

.protokoll {
  max-block-size: 12rem;
  overflow: auto;
}

@media (forced-colors: active) {
  :focus-visible {
    outline: 3px solid Highlight;
    outline-offset: 3px;
    box-shadow: none;
  }
}

Die zwei HTML-Ergänzungen

<main id="inhalt" tabindex="-1">
  <!-- Seiteninhalt -->
</main>

<div class="protokoll" tabindex="0" role="region"
  aria-label="Schrittprotokoll">
  <!-- Mehr Inhalt als in den sichtbaren Bereich passt -->
</div>

tabindex="-1" macht main zum programmatischen Sprungziel, ohne einen zusätzlichen Tabstopp einzubauen. tabindex="0" nimmt den Scrollbereich in die sequenzielle Navigation auf; Rolle und Name erklären dieses Ziel.

So prüfen Sie den ganzen Weg

  1. Tabben Sie vorwärts und rückwärts. Jede Station zeigt dauerhaft einen Ring.
  2. Prüfen Sie helle, dunkle und bildhafte Hintergründe sowie alle Fehlerzustände.
  3. Aktivieren Sie einen Sprunglink. Das fokussierte Ziel bleibt unter fixierten Leisten sichtbar.
  4. Fokussieren Sie den Protokollbereich und scrollen Sie mit Pfeil- und Bildtasten.
  5. Aktivieren Sie den erzwungenen Farbmodus. Die Systemfarbe markiert weiterhin den Fokus.

Aus dem Prüfbericht

Eine Regel, ein übersprungener Halt

Kritisch Tab überspringt das Protokollfenster Regel scrollable-region-focusable

Der Kasten scrollt, ist aber nicht fokussierbar. Mit tabindex="0", role="region" und einem aria-label wird er ein benannter Tabstopp.

Anleitung: Scrollbereiche per Tastatur bedienen

Zum Mitnehmen

Der Tastaturweg, korrigiert

Eine sichtbare Markierung, ein Tabstopp mehr.

Korrektur in 3 Schritten ansehen
  1. Die Markierung wieder einschalten

    outline: none entfernt die Markierung überall. :focus-visible bringt sie für den Tastaturweg zurück, der Abstand hält sie frei vom Text.

    KorrekturvergleichSchritt 1 · CSS

    Vorher

    a,
    button {
      outline: none;
    }

    Nachher

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

    Markierte Zeilen wurden geändert

    So prüfen Sie es Drücken Sie fünfmal Tab. Jeder Halt ist deutlich markiert.

  2. Die Markierung nicht abschneiden

    Eine beschnittene Markierung ist nur halb zu sehen. Sichtbarer Überlauf und etwas Innenabstand lassen sie ganz stehen.

    KorrekturvergleichSchritt 2 · CSS

    Vorher

    .kopfzeile {
      overflow: hidden;
      padding: 0 1rem;
    }

    Nachher

    .kopfzeile {
      overflow: visible;
      padding: 0.5rem 1rem;
    }

    Markierte Zeilen wurden geändert

    So prüfen Sie es Tabben Sie ins Suchfeld. Der Rahmen ist auf allen vier Seiten zu sehen.

  3. Den Scrollbereich zum Tabstopp machen

    Der Kasten verbirgt Zeilen unter seiner Kante. Mit tabindex="0" wird er erreichbar, role und aria-label geben ihm einen Namen.

    KorrekturvergleichSchritt 3 · HTML

    Vorher

    <div class="protokoll" style="max-height:3rem;overflow:auto">
      <p>Schritt 01 · Kreis setzen</p>
    </div>

    Nachher

    <div class="protokoll" style="max-height:3rem;overflow:auto" tabindex="0"
      role="region" aria-label="Schrittprotokoll">
      <p>Schritt 01 · Kreis setzen</p>
    </div>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Tabben Sie bis zum Kasten. Er wird markiert, Pfeil ab zeigt die restlichen Zeilen.

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.