
Il pulsante d'acqua
Pulsanti, SVG, Fisica, Hover
NuovaGratis
Una frase con tre parole spiegate, sottolineate d’inchiostro: fermandosi su una, la sottolineatura si gonfia intorno alla parola, che diventa bianca, e da lì sale una colonna d’inchiostro che si apre nel suggerimento, attaccato alla parola da un collo morbido. Passando a un’altra parola non si aspetta: l’inchiostro scende nella prima mentre sale dalla seconda.
Una cartella che funziona da sola: index.html, style.css, script.js e le librerie da CDN. Nelle schede React e Vue la stessa demo è già un componente, che spegne le sue animazioni quando esce dalla pagina.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The tooltip that rises from the word</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/source-serif-4@5.3.0/opsz.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/instrument-sans@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the tooltip that rises from the word: a sentence with three words explained. The ink of a word's underline
swells round the word, and the tooltip rises out of it on a liquid neck; going to another word, the ink sinks
back into the first one while it rises from the next. The ink is painted on the svg, the words on top -->
<div class="gloss" data-gloss data-autoclic>
<svg class="gloss__ink gloss__ink--lines" aria-hidden="true" data-lines></svg>
<svg class="gloss__ink" aria-hidden="true" data-ink></svg>
<p class="gloss__text" data-text>
Fix the <button class="term" type="button" aria-describedby="tip-kerning" data-term><span class="term__word">kerning</span><i class="term__base"></i></button>
in titles, open the <button class="term" type="button" aria-describedby="tip-tracking" data-term><span class="term__word">tracking</span><i class="term__base"></i></button>
and catch every <button class="term" type="button" aria-describedby="tip-widow" data-term><span class="term__word">widow</span><i class="term__base"></i></button>
you set.
</p>
<span class="tip" role="tooltip" id="tip-kerning" data-tip>The space between one particular pair of letters.</span>
<span class="tip" role="tooltip" id="tip-tracking" data-tip>Even space added across a whole run of letters.</span>
<span class="tip" role="tooltip" id="tip-widow" data-tip>A paragraph’s last line, alone at the top of a page.</span>
</div>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="script.js"></script>
</body>
</html>Cambia valori, colori e testi con le manopole e guarda l’animazione rispondere dal vivo. Oppure scrivi tu nel codice. Poi scarica la cartella con le tue modifiche.
22 valori da cambiare
Col connettore di Animorio, Claude Code la prende da qui con tutta la sua guida e la adatta al tuo progetto. Incolla questa richiesta:
Prendi «Il suggerimento che sale dalla parola» da Animorio e adattala al mio sitoOgni parola ha tre path in un svg sopra la frase: la sottolineatura (in un svg a parte, senza ombra), l’inchiostro intorno alla parola, e il collo col corpo del suggerimento. A ogni fotogramma lo script riscrive il loro attributo d da tre molle, ink (l’inchiostro intorno alla parola), rise (la salita) e wide (la larghezza), calcolate sul ticker di GSAP a passi di 4 millisecondi; quando le molle sono ferme non ridisegna niente.
Aprendo, rise parte quando ink ha passato metà strada e wide quando rise ha passato metà strada; chiudendo vanno al contrario, più rigide e senza rimbalzo, così il corpo si stringe, scende per il collo e poi l’inchiostro rientra nella riga. La salita e la larghezza vanno sulla molla SPRING: poco frenata, il corpo va un po’ oltre la sua misura e torna, e si schiaccia un poco mentre è più largo del dovuto.
I due lati del collo sono curve cubiche che partono orizzontali dal bordo del corpo e arrivano orizzontali sul bordo dell’inchiostro della parola: si raccordano con due curve morbide e in mezzo si stringono fino a NECK pixel, per GAP pixel di lunghezza. All’inizio il raccordo in alto e gli angoli vicini sono a zero, e collo e corpo sono una sola colonna larga 22 pixel con la punta tonda; mentre wide cresce il corpo si allarga, il collo si assottiglia e gli angoli si arrotondano.
La parola è dipinta con un gradiente ritagliato sulle lettere (background-clip: text), bianco fino all’altezza dell’inchiostro e blu sopra: lo stop è una variabile CSS che lo script aggiorna a ogni fotogramma. La parola in uso sta sopra l’svg (z-index), le altre parole della frase sotto, così il suggerimento le copre.
Sono testo vero (role tooltip, e aria-describedby sulla parola), messo dove arriverà il corpo e largo quanto la sua riga più lunga, misurata con un Range. Mentre il corpo cresce, un clip-path inset le taglia sui suoi bordi a ogni fotogramma, così non stanno mai fuori dall’inchiostro; chiudendo se ne vanno per prime. Il suggerimento sta sopra la frase e non ne esce di lato più di 10 pixel: se la parola è vicina al bordo, il collo resta sulla parola e il corpo si sposta.
La prima volta dopo DELAY secondi di puntatore fermo; finché un suggerimento è fuori, e per GRACE secondi dopo, il prossimo sale subito. Lasciata la parola aspetta LINGER secondi, così il puntatore può salirci sopra. Col focus da tastiera compare subito, ed Esc lo chiude finché il puntatore o il focus non lasciano la parola; al tocco si apre e si chiude. Un clic da script (l’anteprima della libreria) è un puntatore finto che passa sulle tre parole e poi se ne va.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
DELAY | script.js | 0.5 | I secondi in cui il puntatore resta su una parola prima del primo suggerimento. |
GRACE | script.js | 0.6 | I secondi dopo che un suggerimento è rientrato in cui il prossimo sale senza aspettare. |
SPRING | script.js | [380, 0.52] | La molla su cui il suggerimento sale e si allarga: quanto è rigida e quanto è frenata. |
GAP | script.js | 12 | Quanto è lungo il collo fra la parola e il suggerimento, in pixel. |
NECK | script.js | 8 | Quanto è largo il collo nel punto più stretto, in pixel. |
LINGER | script.js | 0.12 | I secondi che il suggerimento aspetta dopo che il puntatore ha lasciato la parola, perché lo si possa raggiungere. |
Per i glossari dentro un articolo, i termini tecnici di una documentazione, le voci di un contratto o di un’offerta (franchigia, TAEG, SLA), le parole difficili di una lezione: ovunque una parola ha bisogno di una riga di spiegazione senza far lasciare il testo a chi legge.
La frase scende a 20 pixel e sta su due righe, così le parole della prima riga aprono il suggerimento sopra e quelle della seconda sotto, senza coprire le altre parole spiegate. Un tocco apre il suggerimento, un altro tocco o un tocco altrove lo chiude; il suggerimento non ferma il dito, che arriva alla parola sotto. Resta sempre dentro lo schermo.
Niente salita, niente molle: l’inchiostro intorno alla parola e il suggerimento compaiono già al loro posto con una dissolvenza, e nello stesso tempo la parola passa dal blu al bianco. Le sottolineature ci sono già, senza disegnarsi.
GSAP 3.15.0, Source Serif 4 (font variabile) 5.3.0, Instrument Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 8,7 KB; le librerie: GSAP 28 KB.
Provata il 5 ottobre 2026
Puoi usarla nei tuoi progetti e in quelli dei tuoi clienti. Non puoi rivenderla né ridistribuirla così com’è. GSAP resta sotto la sua licenza Standard. Licenza completa.
Con l’email e la password del tuo account.
oppure con l’email
Hai fatto l’accesso come .
Con l’account scarichi lo zip di ogni animazione e di ogni pacchetto, gratis.