I bei pulsanti in hover non riguardano la complessità — riguardano la chiarezza, l’intenzione e la scelta dello strumento giusto al momento giusto. Questa lezione scompone cinque micro-interazioni hover, dal pulsante che si espande con rimbalzo a un effetto 3D di luce e ombra, e lungo la strada risponde alla domanda che conta davvero: quando serve GSAP, quando basta il CSS e come lavorano insieme?
C’è un pattern strutturale dietro tutte, e una mentalità dietro la scelta dello strumento. Afferra entrambi e costruirai effetti hover curati senza esagerare con l’ingegnerizzazione.
Come funziona
La struttura. Ogni pulsante qui è un link block, non l’elemento button nativo di Webflow — perché un link block può annidare figli (un’icona, un div overlay, un wrapper di testo), e questi effetti animano proprio quei figli. Alcune mosse riutilizzabili tornano di continuo: un wrapper overflow: hidden per mascherare un elemento in movimento; icone SVG con fill: currentColor così ereditano il colore del pulsante; e position: relative sul pulsante così un overlay in posizione assoluta può allinearsi a esso. Come sempre, le animazioni complesse si costruiscono spezzandole in action piccole e monoscopo.
I reveal. Il pulsante che si espande anima la width di un wrapper di testo da 0 ad auto dentro un genitore overflow-hidden, con easing elastico per il rimbalzo, guidato da toggle play/reverse su mouse-enter/leave. Il riempimento da sinistra fa scorrere un overlay a piena dimensione da translateX(-101%) a 0 mentre il colore del testo cambia per contrasto. Il riempimento dal basso fa lo stesso con un cerchio (aspect-ratio: 1, border-radius: 100%) che scorre da translateY(100%) a 0. Quel -101% invece di -100% è una protezione voluta: a esattamente -100% bordi o arrotondamenti sub-pixel possono lasciare una striscia visibile, quindi l’1% in più lo spinge del tutto fuori vista.
La scelta dello strumento — la vera lezione. Il quarto pulsante (glow) non usa nessuna interazione. Cambia solo il proprio sfondo, colore del testo e box-shadow in hover, quindi lo stato hover di Webflow più le transizioni CSS lo gestiscono per intero — niente GSAP, niente JavaScript generato. Il quinto pulsante (luce + ombra + freccia che ruota) è quello che svela tutto: la scala e la box-shadow del pulsante si fanno in CSS sullo stato hover, ma la freccia al suo interno no, perché lo stato hover di Webflow stila solo l’elemento stesso — non i suoi figli o fratelli. Ruotare quella freccia figlia richiede un’interazione GSAP. Quel confine è la regola pratica: CSS per le proprietà dell’elemento stesso, GSAP nel momento in cui devi raggiungere un figlio. Fai combaciare easing e durata su entrambi così l’effetto combinato sembra un solo movimento.
Il punto più ampio: usare GSAP di default non è gratis — ogni interazione aggiunge JavaScript che Webflow inietta nella pagina. Due o tre interazioni hover non affosseranno le tue performance, ma costruire con consapevolezza — CSS dove basta, GSAP dove serve — tiene il sito leggero e la tua intenzione chiara.
Come si usa
-
Pulsante che si espande con rimbalzo. Link block con un’icona e un wrapper di testo
overflow: hidden. Una action che anima lawidthdel wrapper 0 → auto, easing elastic-out; due eventi hover con control toggle play/reverse. -
Riempimento da sinistra. Pulsante
position: relative,overflow: hidden. Aggiungi un overlay a piena dimensione (position: absolute, offset pieni) atranslateX(-101%). Action 1: X dell’overlay a0%. Action 2: colore del testo verso un off-white per contrasto. Stessa durata, easing back-out. -
Riempimento dal basso. Un
divconaspect-ratio: 1,border-radius: 100%,translateY(100%), centrato dall’allineamento flex del pulsante. Una action che lo porta atranslateY(0). -
Glow (solo CSS). Aggiungi transizioni CSS su sfondo, colore e box-shadow, poi imposta i valori target sullo stato hover del pulsante nel pannello stile. Nessuna interazione necessaria.
-
Luce + ombra (ibrido). Transizioni CSS su
transformebox-shadow; sullo stato hover, scala e aggiungi box-shadow per la luce proiettata e l’ombra. Poi un’interazione GSAP con una action che ruota la freccia figlia (es. -45°), facendo combaciare easing/durata del CSS così tutto si legge come un solo effetto.