Come funziona :hover
:hover è una pseudo-classe che seleziona un elemento mentre il puntatore del mouse è sopra di esso. Aggiungila a qualsiasi selettore e scrivi gli stili per lo stato in hover:
Cambiano solo le dichiarazioni della regola :hover; tutto il resto viene ereditato da .btn. Quando il puntatore esce, l'elemento torna ai suoi stili normali.
Effetti hover fluidi con transition
Un cambiamento in hover è istantaneo, a meno che tu non aggiunga transition alla regola normale (non alla regola :hover), così si anima sia all'entrata sia all'uscita:
transform e opacity sono le proprietà più leggere da animare; non spostano gli elementi intorno. Animare width, height o margin fa ricalcolare il layout della pagina a ogni fotogramma. Durate, ritardi e curve di easing sono nella pagina su CSS transition.
Colori dei link: :link, :visited, :hover, :active
I link hanno quattro stati classici, più il focus da tastiera, e l'ordine delle regole conta:
| Pseudo-classe | Si applica quando |
|---|---|
:link | Il link non è stato visitato |
:visited | L'URL è nella cronologia del browser |
:hover | Il puntatore è sopra il link |
:active | Il link viene premuto |
:focus-visible | Il link ha il focus da tastiera |
Tutte hanno la stessa specificità, quindi quando due corrispondono vince la regola scritta dopo. Un link visitato in hover corrisponde sia a :visited sia a :hover; se :visited viene per ultimo, il colore hover non si vede mai. L'ordine sicuro è Link, Visited, Hover, Active (LVHA):
I browser limitano ciò che :visited può cambiare, per impedire alle pagine di leggere la tua cronologia. Funzionano solo le proprietà legate al colore (color, background-color, border-color, outline-color e poche altre), e gli script vedono sempre il valore non visitato.
:active: lo stato premuto
:active corrisponde mentre l'elemento viene premuto. Un piccolo spostamento dà al pulsante una sensazione fisica:
Hover sul genitore per dare stile a un figlio
Lo stato hover appartiene all'elemento sotto il puntatore e a tutti i suoi antenati. Quindi .card:hover .title applica lo stile al titolo quando si passa sopra qualsiasi parte della card, e la stessa idea fa comparire elementi nascosti:
La riga con :focus-within è importante: senza, chi usa la tastiera e arriva con Tab al pulsante Delete premerebbe un pulsante invisibile. Abbina ogni elemento che compare in hover a una regola di focus.
Hover sugli schermi touch
Telefoni e tablet non hanno un puntatore che resta sopra un elemento. La maggior parte dei browser mobile applica :hover al primo tocco e lo mantiene finché non tocchi da un'altra parte, quindi uno stile hover può sembrare bloccato. Due regole tengono la cosa sotto controllo:
- Non mettere mai l'unico accesso a un contenuto dietro
:hover. Un menu che si apre in hover deve aprirsi anche al clic. - Racchiudi gli effetti hover puramente decorativi in una media query che verifica la presenza di un vero dispositivo con hover:
@media (hover: hover) {
.card:hover { transform: translateY(-4px); }
}
Errori comuni
- Uno spazio prima dei due punti.
.btn :hoversignifica "un elemento in hover dentro.btn". Scrivi.btn:hover. transitionsolo sulla regola:hover. Così l'animazione funziona all'entrata ma all'uscita torna indietro di scatto. Mettila sulla regola normale.- Ordine dei link sbagliato. Tieni
:link,:visited,:hover,:activein questo ordine. - Hover senza stile di focus. Chi usa la tastiera non attiva mai
:hover; dai agli elementi interattivi anche uno stile:focus-visible. - Hover su un elemento coperto da un altro. Una sovrapposizione invisibile (spesso uno pseudo-elemento assoluto) può catturare il puntatore.
pointer-events: nonesulla sovrapposizione risolve il problema.
Domande frequenti
Come si aggiunge un effetto hover in CSS?
Scrivi una regola con :hover dopo il selettore: .btn:hover { background: #1d4ed8; }. Le dichiarazioni si applicano mentre il puntatore è sopra l'elemento. Aggiungi transition: background 0.2s; alla regola normale per animare il cambiamento.
Qual è la differenza tra :hover e :active?
:hover si applica mentre il puntatore è sopra l'elemento. :active si applica mentre lo stai premendo, da quando abbassi il tasto del mouse a quando lo rilasci. Un pulsante premuto di solito è sia in hover sia attivo.
In che ordine vanno le pseudo-classi dei link?
:link, :visited, :hover, :active (ricorda LVHA, o "LoVe HAte"). Hanno la stessa specificità, quindi vince la regola scritta dopo; in qualsiasi altro ordine uno stile visited o hover può nascondere lo stile hover o active.
Come si cambia il colore dei link in CSS?
Applica lo stile all'elemento a: a { color: #2563eb; }, poi a:visited { color: #7c3aed; } e a:hover { color: #1d4ed8; } per gli altri stati. Impostare color su a copre sia i link non visitati sia quelli visitati.
L'hover funziona su mobile?
Gli schermi touch non hanno un puntatore da tenere sopra un elemento. La maggior parte dei browser mobile applica :hover al tocco e lo mantiene finché non tocchi altrove, e questo può lasciare uno stile hover bloccato. Racchiudi gli effetti solo hover in @media (hover: hover) e non nascondere mai contenuti essenziali dietro l'hover.