Un hover da avanzato in Webflow (solo CSS)

Intermedio 17:09 webflowcsshoverhas-selectorvariabili

Costruisci un'interazione hover per card in Webflow — bordo più scuro, immagine che scala, sibling desaturate — senza Interactions, solo hover state, variabili e un po' di CSS.

Punti chiave

  • Le interazioni che sembrano richiedere le Webflow Interactions spesso non le richiedono — style panel, hover state, variabili e poche righe di CSS bastano, in modo più leggero e pulito.
  • L'hover state di Webflow può dare stile solo all'elemento su cui sei — per toccare un figlio (o i suoi sibling) serve un po' di CSS custom.
  • Lega l'interazione a un attributo custom (es. card-link-hover), non a un nome di classe, così lo stesso comportamento funziona su qualsiasi elemento a prescindere dalla classe.
  • Scala un'immagine figlia all'hover con un selettore di attributo, e clippala pulita con overflow: hidden sul wrapper.
  • Il selettore :has() ti fa dare stile ai sibling da una condizione sul parent — body:has([attr]:hover) [attr]:not(:hover) prende ogni card tranne quella su cui sei.
  • Guida i valori con le variabili di Webflow e usa Copy CSS per incollare il nome esatto della variabile nell'embed — niente traduzioni a mano.

Capitoli del video

  1. 00:00 Intro
  2. 01:30 Struttura della sezione
  3. 07:08 Impostare le variabili
  4. 08:20 Animare il colore del bordo
  5. 08:52 Scalare l'immagine
  6. 12:52 Desaturare le altre card
  7. 16:28 Outro

Alla fine di questa lezione avrai costruito un’interazione hover che sembra richiedere un’intera timeline di Interactions — passi su una card e il bordo si scurisce, l’immagine scala restando perfettamente clippata e ogni altra card sfuma verso il bianco e nero — senza usare nessuna Webflow Interaction. Solo style panel, hover state, qualche variabile e un pizzico di CSS.

È proprio questo il punto. È un effetto figo, certo, ma è anche una piccola lezione su come poche righe di CSS moderno possano rendere i tuoi progetti Webflow più potenti, flessibili e intenzionali che trascinare fuori un’interazione per ogni cosa.

Il punto di partenza è una normale griglia CMS di card blog. Due dettagli strutturali contano da subito: il card link ha overflow: hidden con un border-radius (così l’immagine scalata resta clippata), e i pezzi che animeranno — colore del bordo, transform dell’immagine e filter — hanno già delle transizioni (800ms, ease-out expo) così tutto si muove in modo coerente.

Come funziona

Il bordo è la parte facile e l’unica cosa che l’hover state nativo sa fare. Seleziona il card link, passa al suo hover state e imposta il colore del bordo su un valore del tuo gruppo variabili. Fatto — si anima all’hover con la transizione già definita.

L’inghippo arriva con l’immagine: l’hover state di Webflow dà stile solo all’elemento selezionato — non può raggiungere un figlio. Quindi per scalare l’immagine dentro la card su cui sei, serve un po’ di CSS custom. Il modo pulito per agganciarlo è un attributo custom, non una classe. Il card link riceve un attributo come card-link-hover, che stacca il comportamento dal nome della classe — qualsiasi elemento con quell’attributo ottiene l’interazione, anche se ha una classe diversa. Così l’interazione diventa un comportamento riutilizzabile invece di uno stile one-off.

Con l’attributo a posto, una regola scala l’immagine:

[card-link-hover]:hover img {
  transform: scale(var(--card-on-hover--image-scale));
}

In parole povere: quando un elemento con card-link-hover è in hover, scala l’img al suo interno. Il valore viene da una variabile di Webflow — e non traduci il nome a mano, usi Copy CSS sulla variabile e lo incolli dentro scale().

Il pezzo più soddisfacente — desaturare ogni card tranne quella su cui sei — è anch’esso solo tre righe, grazie al moderno selettore :has():

body:has([card-link-hover]:hover) [card-link-hover]:not(:hover) {
  filter: saturate(var(--card-on-hover--saturation));
}

Leggilo a pezzi: body:has([card-link-hover]:hover) significa “solo quando la pagina contiene una card in hover”, e [card-link-hover]:not(:hover) significa “punta a ogni card tranne quella su cui sei”. Insieme: quando una card è in hover, desatura tutte le altre. Invece di costruire un sistema di interazioni, descrivi la relazione in modo diretto — se questo esiste ed è in hover, dai stile a tutti gli altri. È questo che rende il CSS moderno così espressivo qui.

Come si usa

  1. Prepara la struttura — dai al card link overflow: hidden più un border-radius così l’immagine resta clippata, e aggiungi transizioni su border-color, filter e il transform dell’immagine (es. 800ms, ease-out expo).
  2. Salva i valori come variabili — un piccolo gruppo (qui “card on hover”) con la saturazione dei sibling, il fattore di scala dell’immagine e il colore del bordo all’hover.
  3. Anima il bordo — seleziona il card link, passa al suo hover state e imposta il colore del bordo sulla tua variabile. Questa è del tutto nativa.
  4. Aggiungi l’attributo — dai al card link un attributo custom come card-link-hover così l’interazione punta a un comportamento, non a una classe.
  5. Aggiungi un embed per il CSS — metti un elemento Embed (classe global-styles) vicino alla cima della pagina e aprilo per aggiungere un blocco <style>.
  6. Scala l’immagine — incolla la regola [card-link-hover]:hover img { transform: scale(...) }, usando Copy CSS per prendere il nome esatto della variabile.
  7. Desatura i sibling — aggiungi la regola body:has(...) con filter: saturate(...), di nuovo incollando la variabile via Copy CSS. Salva e testa direttamente nel Designer.

Ecco un’interazione per card pulita e riutilizzabile con quasi zero codice — e un buon primo assaggio di quanto lontano possano portarti poche righe di CSS nei tuoi progetti Webflow.

Risorse

Domande frequenti

Posso costruire un effetto hover per card in Webflow senza usare le Interactions?
Sì. Un bordo più scuro, un'immagine che scala e i sibling desaturati si possono fare tutti con hover state, variabili di Webflow e poche righe di CSS in un embed — senza alcuna timeline di Interactions. È più leggero e molto più facile da riusare.
Perché l'hover state di Webflow non può cambiare un elemento figlio?
L'hover state nello style panel dà stile solo all'elemento che hai selezionato — non può raggiungere i figli. Per animare un figlio (come scalare un'immagine quando si passa sulla sua card), aggiungi una piccola regola CSS custom che punta al figlio dal parent su cui sei.
Come sfumo o desaturo le altre card quando ne passo una in Webflow?
Usa il selettore :has(). body:has([tuo-attr]:hover) [tuo-attr]:not(:hover) significa "quando una card è in hover, seleziona ogni card tranne quella" — poi applica filter: saturate(). Descrive la relazione in modo diretto, senza alcun sistema di interazioni.
Come uso una variabile di Webflow dentro il CSS custom?
Apri il pannello variabili, clicca i tre puntini accanto alla variabile e scegli Copy CSS. Incolla direttamente nella tua regola (dentro uno scale() o un saturate(), ad esempio). Webflow genera il nome reale della variabile per te, così non lo traduci a mano.
Perché legare un'interazione di Webflow a un attributo custom invece che a una classe?
Un attributo stacca il comportamento dal nome della classe, così due elementi con classi diverse ma stessa struttura possono condividere la stessa identica interazione — basta dare a entrambi lo stesso attributo. Rende le interazioni comportamenti riutilizzabili invece di stili one-off.

← Torna al corso