Interaktive Zustände stylen in CSS: `:hover`, `:active` und `:focus`
August 12, 2020
Beim Design von interaktiven Elementen wie Links, Buttons oder Formularfeldern ist es wichtig, dem Benutzer visuelles Feedback zu geben. CSS bietet hierfür spezielle Pseudo-Klassen, mit denen verschiedene Benutzerinteraktionen gestylt werden können: :hover, :active und :focus.
Viele Entwickler konzentrieren sich nur auf :hover und vernachlässigen :focus und :active. Dies führt zu einer schlechteren Benutzererfahrung und beeinträchtigt die Barrierefreiheit erheblich.
1. Die drei Zustände im Detail
:hover (Maus-Interaktion)
Wird ausgelöst, wenn der Benutzer mit dem Mauszeiger über ein Element fährt, ohne es anzuklicken.
- Zweck: Signalisiert dem Benutzer, dass ein Element interaktiv (anklickbar) ist.
:focus (Tastatur-Navigation)
Wird ausgelöst, wenn ein Element den Fokus erhält, typischerweise wenn ein Benutzer mit der Tab-Taste durch die Seite navigiert oder in ein Eingabefeld klickt.
- Zweck: Essentiell für die Barrierefreiheit (Accessibility). Benutzer, die keine Maus verwenden, benötigen eine klare visuelle Anzeige, wo sie sich aktuell auf der Seite befinden.
- Tipp: Entfernen Sie niemals den Standard-Fokusrahmen (
outline: noneoderoutline: 0), ohne einen eigenen, gut sichtbaren Ersatz zu definieren!
:active (Der Klick-Moment)
Wird in dem kurzen Moment ausgelöst, in dem der Benutzer das Element anklickt (die Maustaste gedrückt hält, aber noch nicht losgelassen hat).
- Zweck: Gibt direktes haptisches Feedback für den Klick selbst.
2. Die entscheidende Reihenfolge (Die LoVe/HAte-Regel)
Die Reihenfolge, in der diese Pseudo-Klassen im CSS-Code definiert werden, ist von entscheidender Bedeutung. Da spätere Regeln im Stylesheet vorherige Regeln mit gleicher Spezifität überschreiben (Kaskade), führt eine falsche Reihenfolge dazu, dass bestimmte Zustände nicht angezeigt werden.
Die bewährte Merkregel lautet "L-V-H-F-A" (Link, Visited, Hover, Focus, Active).
:link: Der Standardzustand eines unbesuchten Links.:visited: Ein bereits besuchter Link.:hover: Maus-Interaktion.:focus: Tastatur-Fokus.:active: Der Klick-Moment.
/* KORREKTE REIHENFOLGE */
.button {
background-color: #007bff;
color: white;
border: 1px solid #0056b3;
}
/* 1. Hover-Zustand */
.button:hover {
background-color: #0069d9;
}
/* 2. Focus-Zustand (oft ähnlich wie Hover, aber mit auffälligem Rahmen) */
.button:focus {
outline: 3px solid #80bdff;
outline-offset: 2px;
}
/* 3. Active-Zustand (überschreibt Hover und Focus im Moment des Klicks) */
.button:active {
background-color: #0056b3;
transform: scale(0.98); /* Kleiner haptischer Druck-Effekt */
}
Wenn Sie :active vor :hover definieren, wird der aktive Zustand beim Klicken durch den Hover-Zustand überschrieben und ist nicht sichtbar.
3. Barrierefreie Formular-Designs mit :focus-within
Eine moderne Ergänzung ist die Pseudo-Klasse :focus-within. Sie wird auf ein Eltern-Element angewendet, wenn irgendeines seiner Kind-Elemente den Fokus erhält. Dies ist besonders nützlich, um ganze Formular-Sektionen visuell hervorzuheben.
.form-group {
border: 1px solid #ccc;
padding: 1rem;
transition: border-color 0.2s;
}
/* Hebt das gesamte Formularfeld-Gefäß hervor, wenn das Eingabefeld fokussiert ist */
.form-group:focus-within {
border-color: #007bff;
box-shadow: 0 0 5px rgba(0, 123, 255, 0.25);
}
Fazit
Ein professionelles Web-Interface zeichnet sich durch sorgfältig gestaltete interaktive Zustände aus. Vergessen Sie nicht den :focus-Zustand für Tastatur-Nutzer und achten Sie penibel auf die korrekte Reihenfolge (:hover -> :focus -> :active) in Ihrem CSS-Code, um eine konsistente und barrierefreie Benutzererfahrung zu gewährleisten.