
Il banner dei cookie
Consenso, Transizioni, SVG, Fisica
NuovaGratis
Le domande di una piscina all’aperto stanno su una scheda sola, color acqua. Aprendone una, la scheda si strappa lungo i due bordi della riga come un liquido: le fessure corrono dai lati, l’ultimo filo si spezza in due gocce che rientrano nei bordi e il pezzo si stacca e si allunga sulla risposta. Richiusa, i pezzi si cercano, si toccano e la cucitura si richiude fino ai lati.
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 pull-apart accordion</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/geologica@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the questions of an open-air pool. At rest they are one card; opening a question, the card tears along both
edges of its row like a liquid, the row comes away as a piece of its own and stretches down to show the
answer. The card is a single path the script draws behind the rows -->
<div class="faq" data-faq>
<svg class="faq__shape" aria-hidden="true" focusable="false">
<defs>
<linearGradient id="faq-water" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="0" y2="600" data-gradient>
<stop offset="0" class="faq__stop-top"/>
<stop offset="1" class="faq__stop-deep"/>
</linearGradient>
<filter id="faq-lift" x="-20%" y="-20%" width="140%" height="150%" color-interpolation-filters="sRGB">
<feDropShadow class="faq__shadow-far" dx="0" dy="14" stdDeviation="14"/>
<feDropShadow class="faq__shadow-near" dx="0" dy="2" stdDeviation="1.5"/>
</filter>
<filter id="faq-float" x="-30%" y="-40%" width="160%" height="220%" color-interpolation-filters="sRGB">
<feGaussianBlur in="SourceAlpha" stdDeviation="14"/>
<feOffset dy="16" result="soft"/>
<feFlood class="faq__float"/>
<feComposite in2="soft" operator="in"/>
</filter>
</defs>
<g filter="url(#faq-float)" data-lifts></g>
<path class="faq__body" fill="url(#faq-water)" filter="url(#faq-lift)" data-body/>
<g data-seams></g>
</svg>
<div class="faq__item" data-item>
<h3 class="faq__head"><button class="faq__q" type="button" id="faq-q1" aria-expanded="false" aria-controls="faq-a1"><span class="faq__text">Do I need to book?</span><svg class="faq__chev" viewBox="0 0 16 10" aria-hidden="true"><path/></svg></button></h3>
<div class="faq__a" id="faq-a1" role="region" aria-labelledby="faq-q1" hidden><div class="faq__inner"><p>Lanes go in 45-minute sessions you can book up to a week ahead. If a lane is free you can just walk in: the board by the gate shows which ones.</p></div></div>
</div>
<div class="faq__item" data-item>
<h3 class="faq__head"><button class="faq__q" type="button" id="faq-q2" aria-expanded="false" aria-controls="faq-a2"><span class="faq__text">Is the water heated?</span><svg class="faq__chev" viewBox="0 0 16 10" aria-hidden="true"><path/></svg></button></h3>
<div class="faq__a" id="faq-a2" role="region" aria-labelledby="faq-q2" hidden><div class="faq__inner"><p>All year round: 25 degrees in the long pool and 30 in the shallow one. On cold mornings the steam rising off the water is half the fun.</p></div></div>
</div>
<div class="faq__item" data-item>
<h3 class="faq__head"><button class="faq__q" type="button" id="faq-q3" aria-expanded="false" aria-controls="faq-a3"><span class="faq__text">What should I bring?</span><svg class="faq__chev" viewBox="0 0 16 10" aria-hidden="true"><path/></svg></button></h3>
<div class="faq__a" id="faq-a3" role="region" aria-labelledby="faq-q3" hidden><div class="faq__inner"><p>A swim cap, a coin for the lockers and a towel, or borrow one at the desk. Flip-flops help on the deck when the tiles are cold.</p></div></div>
</div>
<div class="faq__item" data-item>
<h3 class="faq__head"><button class="faq__q" type="button" id="faq-q4" aria-expanded="false" aria-controls="faq-a4"><span class="faq__text">Can kids swim alone?</span><svg class="faq__chev" viewBox="0 0 16 10" aria-hidden="true"><path/></svg></button></h3>
<div class="faq__a" id="faq-a4" role="region" aria-labelledby="faq-q4" hidden><div class="faq__inner"><p>From eight years old, after a short swim test at the desk. Younger children swim with an adult, one grown-up for every two children.</p></div></div>
</div>
<div class="faq__item" data-item>
<h3 class="faq__head"><button class="faq__q" type="button" id="faq-q5" aria-expanded="false" aria-controls="faq-a5"><span class="faq__text">What if it storms?</span><svg class="faq__chev" viewBox="0 0 16 10" aria-hidden="true"><path/></svg></button></h3>
<div class="faq__a" id="faq-a5" role="region" aria-labelledby="faq-q5" hidden><div class="faq__inner"><p>We clear the water at the first rumble of thunder and wait half an hour after the last one. Your session goes straight back into your account.</p></div></div>
</div>
</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.
26 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 «La fisarmonica che si stacca» da Animorio e adattala al mio sitoLa scheda è un solo path SVG rifatto a ogni fotogramma dalle posizioni delle righe. Ogni gruppo di righe ancora attaccate è un sotto-tracciato: scende lungo il lato destro e, a ogni cucitura che si sta strappando, entra nella fessura (arco d’angolo, bordo dritto, mezza ellisse per la punta, bordo dritto, arco d’angolo); poi risale dal lato sinistro facendo lo stesso. Le domande sono pulsanti in posizione assoluta che si muovono solo con translate3d; ogni risposta è tagliata da un clip-path inset al fondo del suo pezzo. Mentre si muove, la pagina non viene mai ricalcolata.
Quanto si vede di ogni risposta e ogni spazio fra due righe sono molle, con rigidezza e smorzatura ricavate da una durata e da un rimbalzo come le descrive Apple (OPEN e BOUNCE; gli spazi hanno una molla più svelta). La cima di ogni riga è il fondo di quella sopra più lo spazio fra loro: i pezzi sotto fanno posto da soli e non si sovrappongono mai, nemmeno quando una molla va oltre. I conti si fanno a passi di 1/240 di secondo, col passo del fotogramma limitato a 1/30.
Una tween di GSAP porta l’avanzamento dello strappo da 0 a 1 con power2.in, piano all’inizio e poi di colpo, in TEAR secondi. Ogni fessura è lunga quella frazione della distanza fra il suo lato e il punto d’incontro (dove si è premuto; il centro per la tastiera), e la sua punta è mezza ellisse alta quanto lo spazio: quando le due punte si toccano, il collo è largo zero. Arrivati a 1 i pezzi sono due, ognuno col suo capo strappato: una gobba fatta da due curve di Bézier, alta il 62 per cento dello spazio, che rientra su una molla regolata da WOBBLE, mentre lo spazio riceve una spinta.
Chiudendo, quando lo spazio scende sotto il 60 per cento di GAP i due capi si allungano uno verso l’altro; quando si toccano la cucitura torna intera con le fessure lunghe fino al punto d’incontro, e una tween power3.out le riporta ai lati in 0,36 secondi. Tutto si può interrompere: riaprendo a metà, la tween si gira e la fessura riparte da dove si trova.
Le righe sottili si disegnano solo sul ponte d’acqua che resta e svaniscono man mano che lo strappo corre. La scheda ha due feDropShadow; il pezzo aperto ha in più un’ombra sua, un rettangolo più stretto sfocato e spostato in giù, che cresce con la risposta. Il ciclo gira sul ticker di GSAP solo mentre qualcosa si muove. Le domande sono button dentro un h3 con aria-expanded e aria-controls, le risposte regioni hidden da chiuse; frecce, Home e End passano da una domanda all’altra. La domanda dopo quella aperta ha data-autoclic per l’anteprima.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
FIRST | script.js | 1 | La domanda aperta all’apertura della pagina, da 0; −1 per nessuna. |
ONLY_ONE | script.js | true | Aprendo una domanda si chiude quella aperta; con false se ne possono aprire tante. |
GAP | script.js | 16 | Lo spazio fra due pezzi di scheda staccati, in pixel. |
OPEN | script.js | 0.62 | I secondi di una risposta che si apre o si chiude. |
BOUNCE | script.js | 0.14 | Quanto le risposte e i pezzi vanno oltre il loro posto e tornano (0 per niente). |
TEAR | script.js | 0.42 | I secondi che lo strappo ci mette ad attraversare la scheda. |
WOBBLE | script.js | 0.6 | Quanto ondeggia un capo strappato rientrando nel bordo (0 per niente). |
HINT | script.js | 8 | Quanto si stringe la scheda ai bordi della domanda sotto il mouse, in pixel; 0 per niente. |
ROUND | script.js | 22 | Il raggio degli angoli della scheda, in pixel. |
Per le domande frequenti di un servizio, di un locale o di un’app, per le condizioni di un abbonamento o per le sezioni di una scheda prodotto: ovunque le risposte sono tante e se ne legge una alla volta, e il sito ha un carattere morbido, fresco o giocoso. Il pezzo staccato dice subito quale risposta è aperta anche da lontano.
La scheda è larga al massimo 640 pixel e sul telefono si stringe allo schermo, con 16 pixel di margine per lato (358 su un telefono di 390). Le righe chiuse sono alte 80 pixel sul computer e 72 sul telefono, come nell’altra fisarmonica della libreria, e le domande scendono a 17 pixel. Il dito che preme una domanda fa stringere la scheda ai suoi bordi come il mouse sopra, e lo strappo corre verso il punto toccato.
Niente strappo e niente spostamenti: la scheda si divide e si richiude di colpo, già al suo posto, e il testo della risposta compare in dissolvenza. All’apertura la scheda compare in dissolvenza con la seconda domanda già aperta; niente gocce che si fondono e niente pizzico sotto il mouse.
GSAP 3.15.0, Geologica (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 9,2 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.