
La griglia liquida
Hover, Transizioni
NuovaGratis
Una parete di piastrelle di ceramica in CSS 3D: sotto il puntatore le tessere si girano in onda e sul retro mostrano un altro disegno, poi tornano al loro posto con un rimbalzo. Un clic gira tutta la parete in un’onda che parte dal punto cliccato.
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 turning mosaic</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/index.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/dm-sans@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="studio">
<header class="bar">
<a class="brand" href="#">Saltmarsh Clay Lab</a>
<nav class="bar__nav" aria-label="Sections">
<a href="#">Classes</a>
<a href="#">Kiln days</a>
<a href="#">Tiles</a>
</nav>
</header>
<!-- the wall: one block per tile, built by the script. Each tile has a front, a back and four clay edges -->
<section class="wall-frame" aria-label="A wall of glazed tiles">
<div class="wall" data-wall></div>
</section>
<p class="hint" data-hint>Move over the wall. Click to turn it all.</p>
</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.
24 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 mosaico che si gira» da Animorio e adattala al mio sitoOgni tessera è un div con transform-style: preserve-3d e dentro cinque pezzi: il davanti spinto avanti di mezzo spessore (translateZ), il retro girato di 180 gradi e spinto indietro, e quattro bordi color argilla girati di 90 gradi sui lati. Davanti e retro hanno backface-visibility: hidden, così si vede sempre la faccia rivolta verso di noi. La parete ha perspective: 1500px, che dà a tutte le tessere lo stesso punto di fuga: quelle ai bordi si girano un po’ di sbieco, come una parete vera.
Il davanti è un quarto di stella disegnato in SVG, con il centro nell’angolo in basso a destra; lo script lo copia quattro volte, specchiato con scale(-1, 1) e scale(1, -1), in un blocco di due tessere per due, e ne fa un’immagine sola (un indirizzo blob:). Ogni tessera la usa come sfondo grande il doppio e ne mostra il suo quarto: così quattro tessere fanno una stella intera, e per questo colonne e righe sono sempre in numero pari. Il retro è un’immagine sola grande quanto la parete, dipinta una volta su una canvas (vaso, anelli, titolo misurato con measureText perché stia nello spazio) e messa come sfondo di ogni retro (anche lei come indirizzo blob:), spostata con background-position di quanto la tessera è lontana dall’angolo.
A ogni movimento si misura la distanza fra il puntatore e il centro di ogni tessera, in tessere. Quelle entro RADIUS si girano con un ritardo che cresce con la distanza (WAVE secondi per tessera): è questo che fa l’onda. Il verso del giro dipende dal lato: a destra del puntatore girano in un senso, a sinistra nell’altro, così sembra che il puntatore le spinga via. Quando una tessera esce dal raggio (con un piccolo margine, perché ai bordi non tremi) parte un gsap.delayedCall di LINGER secondi che la riporta indietro; se il puntatore torna prima, si annulla.
Lo stato di una tessera è un oggetto con tre numeri: il giro (ry), l’inclinazione (rx) e quanto si stacca (z). GSAP li anima e a ogni fotogramma una funzione scrive il transform e due variabili CSS: --dim scurisce la faccia quando è di taglio (1 − |cos ry|) e --sheen sposta il riflesso. L’andata usa back.out, che arriva un po’ oltre; il ritorno elastic.out, che passa oltre il piatto più volte, sempre meno. Il distacco e l’inclinazione sono keyframes 0, su, 0, e durante il giro la tessera ha uno z-index più alto, così passa sopra le vicine.
Un clic cambia la faccia di tutta la parete e gira ogni tessera con un ritardo pari alla sua distanza dal punto cliccato per WAVE: un’onda ad anelli. Il puntatore poi mostra sempre l’altra faccia, quindi sulla parete girata apre una finestra sul davanti. Mentre l’onda passa, il puntatore aspetta (quietUntil), poi si ricontrolla dov’è. All’apertura le tessere cadono dal centro con back.out, e la stessa onda parte da sola due volte, avanti e indietro: così si capisce subito che dietro c’è qualcosa.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
TILE | script.js | 76 | Il lato di una tessera in pixel. Su uno schermo stretto si rimpicciolisce perché ce ne stiano almeno sei per riga. |
GAP | script.js | 4 | La fuga fra le tessere, in pixel. |
RADIUS | script.js | 2.2 | Quanto lontano dal puntatore si girano le tessere, in tessere: 1 gira quasi solo quella sotto, 4 apre una finestra grande. |
WAVE | script.js | 0.05 | Il ritardo fra un anello di tessere e il successivo, in secondi per tessera: più alto, l’onda è più lenta e si vede di più. |
LINGER | script.js | 0.35 | Quanti secondi una tessera resta girata dopo che il puntatore se n’è andato: alto, il puntatore lascia una scia. |
BOUNCE | script.js | 0.55 | Quanto la tessera va oltre e rimbalza tornando (0 = si ferma e basta, 1 = molto elastica). |
LIFT | script.js | 26 | Quanto una tessera si stacca dalla parete verso di noi mentre gira, in pixel. |
TITLE | script.js | ['Fired', 'by hand.'] | Il titolo sul retro della parete, una riga per voce: si fa grande quanto lo spazio permette. |
Per la pagina d’apertura di chi lavora con le superfici: un laboratorio di ceramica, un negozio di piastrelle, un architetto, un museo, un marchio di carta da parati. Funziona bene come rivelazione: davanti il motivo, dietro un messaggio o un prodotto. Con tessere da 50 a 100 pixel; più piccole, il giro diventa uno sfarfallio.
La stessa animazione con le misure adattate: le tessere diventano più piccole perché ce ne stiano sei per riga, la parete è verticale e sul retro il vaso sta sopra il titolo. Trascinando il dito sulla parete le tessere si girano come sotto il puntatore e tornano quando lo alzi; un tocco gira tutta la parete.
Le tessere non si girano e non si muovono: il retro compare in dissolvenza sopra il davanti, con lo stesso ritardo a onda, e torna a sparire allo stesso modo. Le tessere all’apertura compaiono in dissolvenza.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0, DM Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 9,3 KB; le librerie: GSAP 28 KB.
Provata il 10 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.