
La fisarmonica delle domande
Fisarmoniche, Testo, Transizioni
NuovaGratis
Un menu a tutto schermo che esce dal suo pulsante: un cerchio nero cresce dal pulsante fino a coprire la pagina, le voci salgono una dopo l’altra, il pulsante diventa bianco, le sue due linee si incrociano in una X e «Menu» diventa «Close».
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 menu that opens from its button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/syne@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- the button stays above the menu: it opens it and, turned white, closes it -->
<button class="burger" type="button" aria-expanded="false" aria-controls="menu" data-burger data-autoclic>
<span class="burger__words" aria-hidden="true">
<span class="burger__word" data-word-open>Menu</span>
<span class="burger__word" data-word-close>Close</span>
</span>
<span class="sr" data-name>Open the menu</span>
<span class="burger__icon" aria-hidden="true"><i data-line></i><i data-line></i></span>
</button>
<!-- the menu: a black circle that grows out of the button until it covers the page -->
<nav class="menu" id="menu" aria-label="Main" data-menu inert>
<ul class="menu__links" data-links>
<li><a class="menu__link" href="#" data-link><span class="menu__mask"><span class="menu__word" data-rise>Work</span></span><svg class="menu__arrow" viewBox="0 0 40 24" aria-hidden="true"><path d="M2 12h34M26 3l10 9-10 9"/></svg></a></li>
<li><a class="menu__link" href="#" data-link><span class="menu__mask"><span class="menu__word" data-rise>Studio</span></span><svg class="menu__arrow" viewBox="0 0 40 24" aria-hidden="true"><path d="M2 12h34M26 3l10 9-10 9"/></svg></a></li>
<li><a class="menu__link" href="#" data-link><span class="menu__mask"><span class="menu__word" data-rise>Journal</span></span><svg class="menu__arrow" viewBox="0 0 40 24" aria-hidden="true"><path d="M2 12h34M26 3l10 9-10 9"/></svg></a></li>
<li><a class="menu__link" href="#" data-link><span class="menu__mask"><span class="menu__word" data-rise>Contact</span></span><svg class="menu__arrow" viewBox="0 0 40 24" aria-hidden="true"><path d="M2 12h34M26 3l10 9-10 9"/></svg></a></li>
</ul>
<div class="menu__foot" data-foot>
<a href="#">Instagram</a>
<a href="#">LinkedIn</a>
<a href="#">Dribbble</a>
</div>
</nav>
<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.
21 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 menu che si apre dal pulsante» da Animorio e adattala al mio sitoIl menu è tagliato da un clip-path, circle(raggio at x y), con il centro nel mezzo del pulsante e il raggio fino all’angolo della finestra più lontano. GSAP muove solo il raggio, un numero, e a ogni aggiornamento la stringa del clip-path si riscrive: chiudere a metà di un’apertura riparte da dove si trova il cerchio. Il centro si rimisura a ogni apertura, a ogni chiusura e quando la finestra cambia.
Ogni voce sta in una maschera con overflow: hidden e un po’ di spazio sotto per le lettere che scendono. Parte da yPercent 118 e TILT gradi e arriva a zero con power4.out, in RISE[0] secondi, una ogni RISE[1]; cominciano quando il cerchio è al 38% del suo tempo. All’uscita salgono a −118 nell’ordine opposto.
Le due parole stanno nella stessa cella di una griglia, così il pulsante è largo quanto la più lunga; una sale e l’altra entra da sotto. Le due linee prima si incontrano in mezzo, in 0,18 secondi, poi ruotano di 45 gradi in versi opposti con back.out; al ritorno si raddrizzano e poi si separano. Il colore cambia con una transizione CSS.
Una classe sulla lista spegne le altre voci fino a DIM; la maschera di quella indicata si sposta di NUDGE pixel e la sua freccia si disegna: è un tratteggio lungo quanto la linea (getTotalLength), riportato a zero. Vale per il mouse e per il tasto Tab, solo quando il focus è visibile (:focus-visible).
Il menu chiuso è inert. Aperto con la tastiera, il focus va alla prima voce; aperto con un dito o col mouse resta sul pulsante. Il tasto Tab gira dentro il menu e il suo pulsante, Esc chiude e il focus torna al pulsante. Mentre il menu è aperto la pagina sotto non scorre.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
OPEN | script.js | 0.9 | I secondi del cerchio che si apre. |
CLOSE | script.js | 0.65 | I secondi del cerchio che si chiude. |
RISE | script.js | [0.9, 0.07] | Le voci che salgono: i secondi di ognuna e quelli fra una e l’altra. |
TILT | script.js | 6 | Di quanti gradi è inclinata una voce mentre sale. |
DIM | script.js | 0.3 | Quanto restano accese le altre voci mentre se ne indica una. |
NUDGE | script.js | 16 | Di quanti pixel si sposta a destra la voce indicata. |
Per un sito con poche pagine e un carattere forte: un portfolio, uno studio, un marchio. Il menu a tutto schermo dà spazio a voci grandi; con più di sei o sette voci conviene un menu classico.
Il pulsante è un po’ più piccolo e le voci si stringono alla larghezza dello schermo; il tocco fa come il clic. Senza un puntatore le voci non si spengono, ma il menu si apre e si chiude allo stesso modo.
Niente cerchio e niente voci che salgono: il menu compare e scompare in dissolvenza, e il pulsante cambia colore, parola e linee di colpo. Sotto il puntatore le altre voci si spengono comunque e la freccia compare senza disegnarsi.
GSAP 3.15.0, Syne (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 5,5 KB; le librerie: GSAP 28 KB.
Provata il 2 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.