Elimina il flicker al page-load GSAP in Webflow

Intermedio 22:29 webflowgsapanimazionipage-loadcss

Elimina il flash of unstyled content prima di un'animazione GSAP al caricamento in Webflow con un pattern riutilizzabile CSS + attributo, sicuro anche senza JavaScript.

Punti chiave

  • Il flicker è un problema di tempismo: per un frame il browser disegna gli elementi nel loro stato CSS finale prima che GSAP applichi i valori iniziali dell'animazione, e l'occhio coglie quel salto.
  • La soluzione è nascondere il wrapper, non ogni singolo elemento: porti la sua opacity a 0 così niente al suo interno può lampeggiare, poi lasci che GSAP la riaccenda nell'istante esatto in cui prende il controllo.
  • Il CSS va nel <head> della pagina: mai nel Designer (nasconderebbe il tuo lavoro) e mai tramite GSAP (sposterebbe solo il flicker sul wrapper).
  • Un attributo custom come remove-flicker batte una lista di selettori di classe: una regola sola colpisce ogni elemento che lo porta, combo class comprese.
  • Limita la regola a .w-mod-js così gira solo quando JavaScript è attivo; se JS è spento GSAP non parte, e il contenuto deve restare visibile invece che nascosto per sempre.

Capitoli del video

  1. 00:00 Intro
  2. 01:30 Anatomia dell'animazione
  3. 07:14 Capire il flicker al page-load
  4. 09:44 Come sistemarlo: l'approccio CSS
  5. 18:01 Cosa fare se JavaScript è disattivato
  6. 20:34 Outro

Puoi ottenere un’animazione GSAP al caricamento perfettamente pulita in Webflow — niente flash, niente salto — con un pattern piccolo e riutilizzabile da mettere in qualsiasi progetto. Webflow oggi include la gestione automatica del FOUC per le interazioni GSAP, e copre parecchi casi. Ma su pagine pesanti e layout complessi puoi ancora beccare un flicker proprio al primo caricamento: ecco come prenderne il pieno controllo.

Non è un trucco improvvisato. È capire un piccolo scarto di tempismo tra quando il browser disegna la pagina e quando GSAP applica gli stati iniziali dell’animazione — e chiuderlo con tre righe di CSS più una singola action GSAP. Una volta che vedi perché succede, userai lo stesso rimedio ogni volta.

Come funziona

Quando GSAP guida un’animazione al caricamento, gli serve un breve istante — dopo che la pagina inizia a renderizzare — per applicare le condizioni iniziali: opacity di partenza, posizione o transform da cui ogni elemento parte. Finché quell’istante non arriva, il browser ha solo i tuoi stili Webflow normali, quindi disegna gli elementi nel loro stato finale. Poi GSAP entra in gioco, li riporta al punto di partenza dell’animazione e la fa partire. Quello scatto — stato finale, poi di colpo lo stato iniziale — è il flicker. Più la pagina è pesante, più il browser ci mette ad arrivare a GSAP, più il flash si nota.

La soluzione è nascondere le cose finché GSAP non è pronto. L’istinto è nascondere ogni elemento animato, ma diventa subito un pasticcio. Meglio nascondere il wrapper più interno che li contiene tutti: abbastanza ampio da coprire l’intera animazione, abbastanza stretto da non oscurare parti della pagina che non c’entrano. Porti l’opacity di quel wrapper a 0 e niente al suo interno può lampeggiare.

Dove metti quel CSS conta. Non nel Designer — il wrapper sarebbe invisibile mentre lavori. Non dentro l’interazione GSAP — a GSAP serve comunque il suo istante, quindi sposteresti solo il flicker sul wrapper. Va nel <head> della pagina, che il browser legge e applica prima di disegnare il contenuto. Quando qualcosa compare a schermo, il wrapper è già a opacity 0.

L’ultimo pezzo è la sicurezza. Il CSS nasconde il wrapper, ma qualcosa deve riaccenderlo — e quel qualcosa è GSAP, che sa esattamente quando l’animazione è pronta. Se un visitatore ha JavaScript disattivato, GSAP non parte mai, quindi devi assicurarti che nemmeno la regola di nascondimento parta. Altrimenti il contenuto resta invisibile per sempre. Webflow ti dà un aggancio pulito per questo: la classe w-mod-js.

Come si usa

  1. Individua il/i wrapper da nascondere. Scegli il contenitore più interno che racchiude ogni elemento animato. Nella demo gli elementi animati stanno in due punti — la navbar e la hero — quindi invece di nascondere l’intero page wrapper ne colpiamo due: il nav wrapper e la sezione video.

  2. Marcali con un attributo custom. Invece di destreggiarti tra selettori di classe e combo class, dai a ogni wrapper lo stesso attributo custom — chiamalo remove-flicker (senza valore). Applicalo al primo elemento, poi copia-incollalo sugli altri.

  3. Nascondili dal <head>. In Impostazioni pagina → Inside <head> tag, aggiungi un blocco di stile che colpisce l’attributo e lo limita a JavaScript attivo:

    <style>
      .w-mod-js [remove-flicker] {
        opacity: 0;
      }
    </style>

    [remove-flicker] colpisce ogni elemento che porta l’attributo, qualunque siano le sue classi. Il prefisso .w-mod-js — una classe che Webflow aggiunge a <html> solo quando JS è in esecuzione — fa sì che la regola si applichi solo quando GSAP riporterà davvero visibili gli elementi.

  4. Riaccendili con GSAP. Apri l’interazione al caricamento e aggiungi una nuova action (chiamala remove flicker). Imposta il target type su Attribute e il nome attributo su remove-flicker. Poi rendila istantanea: duration 0, start 0, type to, property opacity, value 100%. Niente easing, niente delay — i wrapper passano da invisibili a visibili nell’istante in cui GSAP dà il via.

  5. Pubblica e prova sul link live. Il flicker compare solo sul sito pubblicato, quindi controlla lì — ricarica qualche volta e apri in una nuova scheda. Navbar e heading ora dovrebbero caricare puliti ogni volta.

Risorse

Domande frequenti

Perché l'animazione GSAP al caricamento fa flicker sul sito pubblicato ma non nel Designer?
Perché solo la pagina live ha tempi di caricamento reali. GSAP ha bisogno di un istante per applicare i valori di partenza dell'animazione e, finché non lo fa, il browser mostra gli elementi nel loro stato CSS normale: li vedi interi, poi saltano all'inizio dell'animazione. Designer e preview saltano quel ritardo, quindi lì il flash non compare.
Come nascondo gli elementi prima di un'animazione al caricamento senza rompere l'editor di Webflow?
Non impostare l'opacity nel Designer né dentro l'interazione. Aggiungi la regola in Impostazioni pagina → Inside <head> tag, così il browser la applica prima di disegnare la pagina mentre la vista nel Designer resta visibile e modificabile.
A cosa serve la classe .w-mod-js in Webflow?
Webflow aggiunge w-mod-js all'elemento <html> solo quando JavaScript è in esecuzione. Limitare la regola di nascondimento a questa classe fa sì che gli elementi vengano nascosti solo nella situazione esatta in cui GSAP li riporterà visibili: se gli script sono bloccati non si nasconde nulla e il contenuto resta a schermo.
Mi serve ancora, visto che Webflow ora gestisce il FOUC in automatico?
La gestione automatica del FOUC di Webflow copre la maggior parte dei casi semplici, quindi prova prima senza il pattern. Usa questo approccio controllato su pagine pesanti o layout complessi dove un piccolo flash sfugge ancora.

← Torna al corso