Menu

CSS Hover: :hover, :active und die Zustände von Linkfarben

Die Pseudoklasse :hover stylt ein Element, solange der Mauszeiger darüber ist. Hier lernst du Hover-Effekte für Buttons und Karten, weiche Übergänge, Linkfarben mit :link, :visited, :hover und :active in der richtigen Reihenfolge und Hover auf Touchscreens.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

So funktioniert :hover

:hover ist eine Pseudoklasse, die ein Element trifft, solange der Mauszeiger darüber ist. Häng sie an einen beliebigen Selektor und schreib die Styles für den Hover-Zustand:

Nur die Deklarationen in der :hover-Regel ändern sich; alles andere wird von .btn übernommen. Verlässt der Zeiger das Element, kehrt es zu seinen normalen Styles zurück.

Weiche Hover-Effekte mit transition

Ein Hover-Wechsel passiert sofort, außer du fügst transition zur normalen Regel hinzu (nicht zur :hover-Regel), damit er hin und zurück animiert wird:

transform und opacity sind die günstigsten Eigenschaften zum Animieren; sie verschieben die umliegenden Elemente nicht. Wer width, height oder margin animiert, zwingt die Seite in jedem Frame zu einem neuen Layout. Dauer, Verzögerung und Easing-Kurven stehen auf der Seite zu CSS transition.

Links haben vier klassische Zustände plus den Tastaturfokus, und die Reihenfolge der Regeln ist wichtig:

PseudoklasseGilt, wenn
:linkDer Link noch nicht besucht wurde
:visitedDie URL im Browserverlauf steht
:hoverDer Zeiger darüber ist
:activeEr gerade gedrückt wird
:focus-visibleEr den Tastaturfokus hat

Alle haben dieselbe Spezifität, also gewinnt die spätere Regel, wenn zwei passen. Ein besuchter Link, über dem der Zeiger ist, passt auf :visited und :hover; steht :visited zuletzt, erscheint die Hover-Farbe nie. Die sichere Reihenfolge ist Link, Visited, Hover, Active (LVHA):

Browser begrenzen, was :visited ändern darf, damit Seiten deinen Verlauf nicht auslesen können. Nur farbbezogene Eigenschaften (color, background-color, border-color, outline-color und ein paar weitere) wirken, und Skripte sehen immer den unbesuchten Wert.

:active: der gedrückte Zustand

:active trifft, während das Element gedrückt wird. Eine kleine Bewegung lässt einen Button greifbar wirken:

Hover am Elternelement, um ein Kind zu stylen

Der Hover-Zustand gehört dem Element unter dem Zeiger und jedem seiner Vorfahren. Deshalb stylt .card:hover .title den Titel, sobald irgendein Teil der Karte gehovert wird, und nach demselben Prinzip tauchen versteckte Elemente auf:

Die Zeile mit :focus-within ist wichtig: Ohne sie würde jemand, der per Tab-Taste zum Löschen-Button springt, einen unsichtbaren Button drücken. Kombiniere jedes Einblenden per Hover mit einer Fokus-Regel.

Hover auf Touchscreens

Handys und Tablets haben keinen Zeiger, der über einem Element verweilt. Die meisten mobilen Browser wenden :hover beim ersten Tippen an und behalten es, bis du woanders hintippst, sodass ein Hover-Stil hängen bleiben kann. Zwei Regeln halten das im Griff:

  • Mach :hover nie zum einzigen Weg zu einem Inhalt. Ein Menü, das sich beim Hovern öffnet, muss sich auch per Klick öffnen.
  • Pack rein dekorative Hover-Effekte in eine Media Query, die auf ein echtes Hover-Gerät prüft:
@media (hover: hover) {
  .card:hover { transform: translateY(-4px); }
}

Häufige Fehler

  • Ein Leerzeichen vor dem Doppelpunkt. .btn :hover bedeutet „ein gehovertes Element innerhalb von .btn“. Schreib .btn:hover.
  • transition nur in der :hover-Regel. Dann wird die Änderung beim Hineinfahren animiert, springt beim Verlassen aber zurück. Setz es in die normale Regel.
  • Falsche Link-Reihenfolge. Halte :link, :visited, :hover, :active in dieser Reihenfolge.
  • Hover ohne Fokusstil. Tastaturnutzer lösen :hover nie aus; gib interaktiven Elementen auch einen :focus-visible-Stil.
  • Hover auf einem Element, das ein anderes überdeckt. Eine unsichtbare Ebene (oft ein absolut positioniertes Pseudoelement) kann den Zeiger abfangen. pointer-events: none auf dieser Ebene behebt das.

Häufig gestellte Fragen

Wie füge ich in CSS einen Hover-Effekt hinzu?

Schreib eine Regel mit :hover hinter dem Selektor: .btn:hover { background: #1d4ed8; }. Die Deklarationen gelten, solange der Mauszeiger über dem Element ist. Füge der normalen Regel transition: background 0.2s; hinzu, um den Wechsel zu animieren.

Was ist der Unterschied zwischen :hover und :active?

:hover gilt, solange der Mauszeiger über dem Element ist. :active gilt, während es gedrückt wird, vom Drücken der Maustaste bis zum Loslassen. Ein gedrückter Button ist meist gleichzeitig hover und active.

In welcher Reihenfolge stehen die Link-Pseudoklassen?

:link, :visited, :hover, :active (Merkhilfe LVHA, auf Englisch "LoVe HAte"). Sie haben dieselbe Spezifität, also gewinnt die spätere Regel; in jeder anderen Reihenfolge kann ein visited- oder hover-Stil den hover- oder active-Stil verdecken.

Wie ändere ich die Linkfarbe in CSS?

Style das Element a: a { color: #2563eb; }, dann a:visited { color: #7c3aed; } und a:hover { color: #1d4ed8; } für die anderen Zustände. color an a deckt besuchte und unbesuchte Links ab.

Funktioniert Hover auf dem Handy?

Touchscreens haben keinen Zeiger, der über einem Element verweilen kann. Die meisten mobilen Browser wenden :hover beim Tippen an und behalten es, bis du woanders hintippst, sodass ein Hover-Stil hängen bleiben kann. Pack reine Hover-Effekte in @media (hover: hover) und versteck nie wichtige Inhalte hinter Hover.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S