Una *funzione di easing* in CSS controlla come un'animazione accelera e rallenta durante la sua durata. Le parole chiave ease, ease-in, ease-out e ease-in-out sono scorciatoie per quattro curve precise. Per tutto ciò che va oltre, CSS ti offre cubic-bezier(): una funzione che riceve quattro numeri e disegna una curva personalizzata.
Quei quattro numeri sono le coordinate di due punti di controllo (x1, y1, x2, y2). Scriverli a mano è scomodo, perché piccole modifiche hanno grandi effetti visivi e un leggero superamento produce un movimento *con rimbalzo* che dai soli numeri non si vede. Un editor visuale ti permette di trascinare le maniglie e vedere la curva reagire: molto più rapido che ritoccare decimali.
L'editor di Coddy disegna la curva in tempo reale, anima una pallina di anteprima con il tuo easing e offre preset per gli schemi più comuni: le parole chiave CSS, la curva standard di Material Design, un'uscita con rimbalzo e un anticipo con superamento. Copia la stringa cubic-bezier() risultante e incollala nel tuo CSS. Tutto gira nel browser.
Cosa sapere sull'easing cubic-bezier
La curva rappresenta il *progresso* in funzione del *tempo*. Il tempo va da sinistra a destra (0 → 1), il progresso dal basso verso l'alto (0 → 1). Una diagonale dritta è linear: progresso uguale per ogni unità di tempo.
Le coordinate X di entrambi i punti di controllo sono limitate a 0..1. Le coordinate Y possono scendere sotto 0 o superare 1: è così che ottieni easing con rimbalzo, anticipo e superamento (l'animazione oltrepassa per un attimo la destinazione o parte nella direzione sbagliata).
Le curve *ease-out* (gran parte del progresso avviene all'inizio) risultano reattive e scattanti: ottime per le entrate e le reazioni dei pulsanti. Le curve *ease-in* (il progresso avviene alla fine) sembrano lente: di solito sbagliate per la UI, utili per le uscite.
L'easing *standard* consigliato da Material Design è cubic-bezier(0.4, 0, 0.2, 1): partenza rapida, finale lento. iOS usa qualcosa di simile a cubic-bezier(0.42, 0, 0.58, 1) (ease-in-out).
Per animazioni brevi (≤200ms) quasi tutti gli easing sembrano simili: conta più la durata che la curva. Per animazioni più lunghe (300ms+) è l'easing a rendere il movimento curato o approssimativo.
Come progettare un easing cubic-bezier
1
Parti da un preset
Clicca un preset vicino alla sensazione che cerchi. *Material standard* e *Bouncy out* sono buoni punti di partenza per il movimento nella UI; *ease-out* è la scelta sicura per le animazioni di entrata.
2
Trascina le due maniglie
Le maniglie color verde acqua sono i due punti di controllo. Trascina la prima per regolare come *inizia* l'animazione e la seconda per regolare come *finisce*. Portare una maniglia oltre il bordo superiore produce un superamento.
3
Scegli una durata e riproduci
Scegli una durata realistica per la tua animazione. Le transizioni della UI durano di solito 150-300ms, i movimenti di enfasi 400-600ms. Clicca *Riproduci* per rilanciare l'anteprima con la nuova durata.
4
Rifinisci con i campi numerici
Per valori precisi, scrivi nei campi X1/Y1/X2/Y2 sotto la curva. Y può scendere sotto 0 o superare 1, X resta sempre tra 0..1.
5
Copia il CSS
Clicca *Copia* per ottenere la regola transition completa. Incollala nel tuo foglio di stile e sostituisci transform con la proprietà che stai animando.
Riferimento rapido cubic-bezier
Easing comuni e i valori cubic-bezier che li definiscono. Tutte e quattro le parole chiave qui sotto sono alias di curve cubic-bezier precise.
Easing
Valori cubic-bezier
Quando usarlo
ease
(0.25, 0.1, 0.25, 1)
Predefinito per transition: delicato ma generico
linear
(0, 0, 1, 1)
Velocità costante: di solito sbagliato per la UI, giusto per gli spinner
ease-in
(0.42, 0, 1, 1)
Partenza lenta, finale rapido: ideale per le uscite
ease-out
(0, 0, 0.58, 1)
Partenza rapida, finale lento: ideale per entrate e reazioni
Il valore Y2 di 1.28 fa superare alla curva la destinazione, poi la fa assestare. Usalo con moderazione: il movimento con rimbalzo stanca se tutto si muove così.
Un Y1 negativo significa che l'animazione si muove per un attimo nella direzione *opposta* prima di raggiungere la destinazione. È preso dall'animazione classica: un piccolo anticipo rende intenzionale il movimento principale.
Errori comuni con l'easing
Usare ease-in per le animazioni di entrata. Parte lento e finisce veloce, l'opposto di ciò che risulta reattivo. Usa invece ease-out.
Scegliere linear per il movimento della UI perché sembra neutro. Un movimento a velocità costante sembra meccanico: va bene per barre di avanzamento e spinner, raramente per il resto.
Esagerare con il superamento in ogni transizione. Gli easing con rimbalzo sono un accento, non un'impostazione predefinita: usati ovunque sembrano caos.
Cercare di correggere un movimento lento cambiando l'easing invece della durata. Se un ease-out di 600ms sembra pigro, prova prima 300ms.
Dimenticare che le coordinate X di entrambe le maniglie sono limitate a 0..1. Trascinare una maniglia fuori dal lato sinistro o destro dell'area non fa nulla: solo Y può uscire dal riquadro.
Domande frequenti su cubic-bezier
Cosa significano i quattro numeri in cubic-bezier()?
Sono le coordinate x e y di due punti di controllo: cubic-bezier(x1, y1, x2, y2). Il primo punto definisce come *inizia* l'animazione, il secondo come *finisce*. X è sempre tra 0 e 1 (tempo); Y può uscire da 0..1 per effetti di superamento o anticipo (progresso).
Quale easing usare per le animazioni della UI?
Per le entrate (qualcosa che compare) e le reazioni (hover su un pulsante, focus), usa *ease-out* o la curva standard di Material Design cubic-bezier(0.4, 0, 0.2, 1). Per le uscite va bene *ease-in*. Evita *linear* a meno che tu non stia animando un avanzamento.
Che differenza c'è tra ease e ease-out?
Entrambi finiscono lentamente, ma ease parte anche in modo delicato. ease-out parte a piena velocità e poi rallenta: quel movimento *immediato* è il motivo per cui risulta più reattivo di ease.
Come si crea un'animazione con rimbalzo in CSS?
Trascina la seconda maniglia sopra il bordo superiore dell'area (Y2 > 1). Per esempio, cubic-bezier(0.18, 0.89, 0.32, 1.28) supera la destinazione di circa il 28% prima di assestarsi. Per più rimbalzi servono @keyframes o una libreria di fisica a molla: cubic-bezier può superare la destinazione una sola volta.
Posso usare cubic-bezier con le animazioni @keyframes?
Sì. Usalo come animation-timing-function, nella forma abbreviata animation o per singolo keyframe. Per movimenti complessi in più passaggi puoi applicare un easing diverso tra ogni coppia di keyframe.