animation-timeline view: la guida completa per WordPress

La proprietà CSS animation-timeline: view() sta cambiando radicalmente il modo in cui pensiamo e realizziamo le animazioni web. In questa guida approfondita, esploriamo ogni aspetto di questa potente feature: come funziona, come si usa, quali sono i casi d’uso avanzati, e come integrarla in WordPress per ottenere animazioni performanti e compatibili con tutti i browser.

Cosӏ animation-timeline?

Nelle animazioni CSS tradizionali, la “linea del tempo” (timeline) è il tempo stesso: un’animazione con durata di 1 secondo parte quando viene applicata e finisce dopo 1 secondo, indipendentemente da ciò che succede nella pagina.

Con animation-timeline, puoi cambiare la linea del tempo da “tempo” a “scroll”. In particolare, animation-timeline: view() lega l’animazione alla posizione dell’elemento nel viewport durante lo scroll. L’animazione progredisce mentre l’elemento è visibile sullo schermo.

La sintassi completa di animation-timeline

.elemento {
    animation: nomeAnimazione 1s linear both;
    animation-timeline: view();
    animation-range: entry 0% exit 100%;
}

Valori di animation-timeline

  • none: default, nessuna timeline speciale
  • auto: timeline di default (basata sul tempo)
  • scroll(): legata allo scroll della pagina (o di un contenitore)
  • view(): legata alla visibilità dell’elemento nel viewport

Parametri di view()

view(axis, inset)
  • axis: block (default, verticale), inline (orizzontale), y, x
  • inset: spostamento del trigger (es. view(block 20px))

Esempi avanzati con animation-timeline

1. Animazione con direzione alternata

Usando animation-direction: alternate, l’animazione va avanti e indietro con lo scroll:

.alternato {
    animation: fade 1s ease both;
    animation-timeline: view();
    animation-direction: alternate;
}
@keyframes fade {
    0% { opacity: 0; transform: translateY(50px); }
    100% { opacity: 1; transform: translateY(0); }
}

2. Elemento che ruota mentre scrolli

.ruota {
    animation: rotate 1s linear both;
    animation-timeline: view();
    animation-range: contain 0% contain 100%;
}
@keyframes rotate {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

3. Progresso di lettura

.progresso {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 3px;
    background: linear-gradient(to right, #00c7b1, #0d9488);
    animation: progress 1s linear both;
    animation-timeline: scroll();
    transform-origin: left;
}
@keyframes progress {
    from { transform: scaleX(0); }
    to { transform: scaleX(1); }
}

Differenza tra scroll() e view()

scroll() lega l’animazione allo scroll complessivo della pagina o di un contenitore. È utile per barre di progresso, parallasse globale, effetti che coinvolgono l’intera pagina.

view() lega l’animazione alla visibilità del singolo elemento. È utile per animazioni che partono quando un elemento entra nel viewport, come fade-in, slide-up, zoom.

Fallback per browser non supportati

Per garantire che le animazioni funzionino anche su browser che non supportano animation-timeline, segui questa strategia a tre livelli:

Livello 1: CSS nativo (browser moderni)

L’animazione principale usa animation-timeline: view(). I browser che la supportano ignorano la durata fissa e usano lo scroll come timeline.

Livello 2: Fallback CSS (browser senza supporto, JS disabilitato)

Aggiungi animation-duration: 1s come fallback. I browser senza supporto ignorano animation-timeline e usano la durata fissa:

.animato {
    animation: fadeInUp 1s ease both;
    animation-timeline: view();
}

Livello 3: Polyfill JS (browser senza supporto, JS abilitato)

Un JavaScript leggero rileva se il browser supporta CSS.supports('animation-timeline', 'view()'). Se non supporta, attiva un polyfill che scruba l’animazione via requestAnimationFrame.

Polyfill JS: come funziona tecnicamente

if (!CSS.supports('animation-timeline', 'view()')) {
    const elements = document.querySelectorAll('.animato');
    
    function updateAnimations() {
        const vh = window.innerHeight;
        
        elements.forEach(el => {
            const rect = el.getBoundingClientRect();
            const elTop = rect.top + window.scrollY;
            const elHeight = rect.height;
            const progress = (window.scrollY + vh - elTop) / (elHeight + vh);
            const clamped = Math.max(0, Math.min(1, progress));
            
            el.style.animationDelay = (-clamped) + 's';
            el.style.animationPlayState = 'paused';
        });
        
        requestAnimationFrame(updateAnimations);
    }
    
    updateAnimations();
}

Usare le animazioni scroll-driven in WordPress senza codice

Se tutto questo ti sembra complesso, ClassyBlocks Pro fa tutto automaticamente. Include 151 animazioni scroll-driven in 12 pack, con polyfill JS automatico che si attiva solo quando serve. Su Chrome, Edge e Opera le animazioni sono CSS native con zero JavaScript. Su Safari e Firefox, il polyfill prende il controllo. 100 Lighthouse, zero configurazioni.

Lascia una risposta