Questa lezione conclusiva affronta un problema che non è ovvio finché non ci sbatti contro: staggerare le card riga per riga mentre entrano allo scroll, mantenendo lo stagger corretto quando la griglia si riflow tra i breakpoint. È un finale azzeccato per il corso, perché si appoggia a quasi tutto ciò che abbiamo costruito — un trigger di scroll, il pattern “GSAP fa il toggle di una classe, il CSS anima”, variabili e variable modes di Webflow — più una funzione CSS moderna che tiene insieme il tutto.
La parte elegante è quanto poco codice serva: una set action, una classe utility, un po’ di CSS e una sola variabile.
Come funziona
Perché lo stagger di GSAP non va bene. Ti aspetteresti una action animate con move-Y, opacity e stagger attivo. Ma non c’è un buon target. Punta la action sul trigger element e ogni card anima isolata — un singolo elemento non ha fratelli con cui staggerare. Puntala sull’attributo condiviso data-animate-item e, la prima volta che parte, GSAP staggera l’intera collezione in una volta, incluse le card molto sotto la piega. Nessuno produce uno stagger per riga legato a ciò che entra davvero nel viewport.
La strategia: classe + delay CSS. Quindi GSAP fa il minimo — una action set che aggiunge una classe in-view a ogni card mentre scorre dentro (interazione scroll, trigger actions, enter → play, soglia quando il top dell’item tocca ~90% dell’altezza del viewport). L’animazione vive nel CSS: lo stato iniziale della card è opacity: 0 e translateY(20%); la classe in-view è lo stato finale (opacity: 1, translateY(0)) più due transizioni (transform + opacity, 800ms, expo). Lo stagger è poi solo un transition-delay per card.
Delay responsive via sibling-index() + una variabile. Il delay deve dipendere dalla posizione di una card nella sua riga, e le righe cambiano dimensione tra i breakpoint. Salva il numero di colonne in una variabile Webflow (number-of-columns) con un variable mode per breakpoint (3 desktop / 3 tablet / 2 landscape / 1 portrait). In CSS custom, usa la moderna funzione sibling-index() insieme a quella variabile per calcolare l’indice di ogni card nella riga, poi convertilo in un transition-delay. Dato che la formula legge la variabile, la stessa regola ricalcola i delay corretti ogni volta che la griglia si riflow — pienamente responsive, senza ricostruire. Il CSS espone alcune manopole comode: animation-mode (0 = lineare, 1 = esponenziale, in mezzo = un mix), uno step/max-delay e un expo-base per la curva; la sezione “matematica” sotto può restare intatta.
Restare modificabili nel Designer. Dato che lo stato iniziale nasconde le card, sparirebbero mentre costruisci. Una regola di override le mostra ogni volta che la classe JS runtime di Webflow non è sull’elemento html — condizione vera solo dentro il Designer — così l’editing resta normale e l’animazione live non è toccata. (Come sempre, tieni la classe in-view registrata in uno style guide così Webflow non la elimina.)
Come si usa
-
Layout + trigger. Una griglia CMS (o statica) dove ogni item ha
data-animate-item. Sull’item card imposta lo stato iniziale:opacity: 0,translateY(20%). -
Interazione scroll. Target
data-animate-item, trigger actions,enter → play, soglia di start ~90% dell’altezza del viewport. Una action set che aggiunge la classein-viewal trigger element. -
Lo stato in-view. Definisci una classe
in-viewconopacity: 1, tutti i move transform a0e transizioni su transform + opacity (800ms, ease-out-expo). Registrala nello style guide. -
Variabile colonne responsive. Crea una variabile numerica
number-of-columnse un variable mode per breakpoint con i valori giusti (es. 3/3/2/1). -
Il motore dello stagger (CSS). Aggiungi un embed con il CSS che colpisce
[data-animate-item].in-view, calcola l’indice di riga di ogni card dasibling-index()enumber-of-columns, e imposta da esso untransition-delay. Regolaanimation-mode, lo step/max-delay eexpo-basea piacere. Aggiungi l’override di visibilità per il Designer. Pubblica e prova tra i breakpoint.
Il CSS dello stagger (la formula del delay e il suo blocco di config) si incolla dal cloneable — lì è pieno di commenti. Copialo e regola i valori di config invece di ricostruire la matematica.