Uma *função de easing* no CSS controla como uma animação acelera e desacelera ao longo da sua duração. As palavras-chave ease, ease-in, ease-out e ease-in-out são atalhos pra quatro curvas específicas. Pra qualquer coisa além delas, o CSS te dá cubic-bezier() - uma função que recebe quatro números e desenha uma curva personalizada.
Esses quatro números são as coordenadas de dois pontos de controle (x1, y1, x2, y2). Escrevê-los na mão é incômodo porque mudanças pequenas têm efeitos visuais grandes, e pequenos overshoots produzem movimento *bouncy* que não dá pra ler só nos números. Um editor visual te deixa arrastar as alças e ver a curva responder - bem mais rápido que ajustar decimais.
O editor do Coddy desenha a curva ao vivo, anima uma bola de preview usando seu easing e traz presets pros padrões comuns: as palavras-chave do CSS, a curva *standard* do Material Design, um bouncy out e um anticipate com overshoot. Copie a string cubic-bezier() e cole no CSS - tudo no navegador.
O que saber sobre easing cubic-bezier
A curva plota *progresso* contra *tempo*. O tempo vai da esquerda pra direita (0 → 1); o progresso vai de baixo pra cima (0 → 1). A diagonal reta é linear - progresso constante por unidade de tempo.
Os X dos dois pontos ficam presos a 0..1. Os Y podem ir abaixo de 0 ou acima de 1 - é assim que se faz bounce, anticipate e overshoot (a animação ultrapassa o destino ou começa indo pro lado errado).
Curvas *ease-out* (a maior parte do progresso acontece cedo) parecem ágeis e responsivas - ótimas pra entradas e reações de botão. *Ease-in* (progresso tarde) parece lerdo - geralmente errado pra UI, útil pra saídas.
Como desenhar um easing cubic-bezier
1
Parta de um preset
Clique num preset perto da sensação que quer. *Material standard* e *Bouncy out* são bons pontos de partida pra UI; *ease-out* é o default seguro pra animações de entrada.
2
Arraste as duas alças
Os círculos coloridos são os dois pontos de controle. Arraste o primeiro pra ajustar como a animação *começa*; o segundo, como *termina*. Puxar uma alça pra cima do topo do canvas gera overshoot.
3
Escolha uma duração e replay
Escolha uma duração realista pra animação real. Transições de UI normalmente rodam 150–300ms; movimentos de ênfase 400–600ms. Clique *Replay* pra re-disparar o preview.
4
Refine pelos campos numéricos
Pra valores precisos, digite nos inputs X1/Y1/X2/Y2. Y pode passar de 0..1 - X fica sempre em 0..1.
5
Copie o CSS
Clique *Copiar* pra pegar a regra transition completa. Cole no seu stylesheet e troque transform pela propriedade que você está animando.
Referência rápida cubic-bezier
Easings comuns e os cubic-bezier por trás. As quatro palavras-chave são apelidos de curvas específicas.
Easing
Valores cubic-bezier
Quando usar
ease
(0.25, 0.1, 0.25, 1)
Default de transition - suave mas genérico
linear
(0, 0, 1, 1)
Velocidade constante - geralmente ruim pra UI, ótimo pra spinners
ease-in
(0.42, 0, 1, 1)
Começa lento, termina rápido - melhor pra saídas
ease-out
(0, 0, 0.58, 1)
Começa rápido, termina lento - melhor pra entradas e reações
Y1 negativo faz a animação ir momentaneamente pro lado *oposto* antes de ir pro destino. Vindo da animação clássica - uma pequena antecipação faz o movimento principal parecer intencional.
Erros comuns de easing
Usar ease-in em entradas. Começa lento e termina rápido - o oposto do que parece responsivo. Use ease-out.
Escolher linear pra UI porque parece "neutro". Movimento de velocidade constante parece mecânico; é certo pra barras de progresso e spinners, raramente pra resto.
Exagerar no overshoot em toda transição. Easings com bounce são tempero, não default - aplicados em tudo viram caos.
FAQ Cubic-Bezier
O que os quatro números de cubic-bezier() significam?
São as coordenadas x e y dos dois pontos de controle: cubic-bezier(x1, y1, x2, y2). O primeiro molda como a animação *começa*; o segundo, como *termina*. X sempre fica entre 0 e 1 (tempo); Y pode passar de 0..1 pra efeitos de overshoot/anticipate (progresso).
Qual easing eu uso pra animações de UI?
Pra entradas (algo aparecendo) e reações (hover, focus), use *ease-out* ou o standard do Material cubic-bezier(0.4, 0, 0.2, 1). Pra saídas, *ease-in* faz sentido. Evite *linear* fora de barras de progresso.
Qual a diferença entre ease e ease-out?
Os dois terminam devagar, mas ease também começa devagar. ease-out começa em velocidade máxima e desacelera - esse movimento *imediato* é o que parece mais responsivo.
Como faço uma animação bouncy no CSS?
Arraste a segunda alça pra cima do topo do canvas (Y2 > 1). Ex: cubic-bezier(0.18, 0.89, 0.32, 1.28) ultrapassa o destino ~28% antes de assentar. Pra múltiplos bounces precisa de @keyframes ou biblioteca de spring - cubic-bezier só overshoot uma vez.
Posso usar cubic-bezier em animações @keyframes?
Sim. Use como animation-timing-function, no shorthand animation ou por keyframe. Pra movimentos em várias etapas, dá pra aplicar um easing diferente entre cada par de keyframes.