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.
Linkfarben: :link, :visited, :hover, :active
Links haben vier klassische Zustände plus den Tastaturfokus, und die Reihenfolge der Regeln ist wichtig:
| Pseudoklasse | Gilt, wenn |
|---|---|
:link | Der Link noch nicht besucht wurde |
:visited | Die URL im Browserverlauf steht |
:hover | Der Zeiger darüber ist |
:active | Er gerade gedrückt wird |
:focus-visible | Er 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
:hovernie 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 :hoverbedeutet „ein gehovertes Element innerhalb von.btn“. Schreib.btn:hover. transitionnur 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,:activein dieser Reihenfolge. - Hover ohne Fokusstil. Tastaturnutzer lösen
:hovernie 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: noneauf 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.