1001Ferramentas
〰️ Dev

Cubic Bezier Generator

Create and visualize cubic-bezier curves for CSS animations. Drag control points, preview the animation and copy the value. Includes presets (ease, ease-in, ease-out). Everything in your browser.

0 1 0 1

O que é?

cubic-bezier(x1, y1, x2, y2) define uma curva de aceleração para transitions e animations CSS. Os dois pontos de controle (P1 e P2) ajustam o ritmo da animação: valores baixos no Y inicial fazem o movimento começar lento; valores altos fazem começar rápido.

Os valores de Y podem ultrapassar [0, 1] para criar efeitos de overshoot (animação que ultrapassa o destino e volta) — útil para botões e elementos com personalidade. Tudo no navegador.

Tune the easing while watching it move

Default CSS easing tends to feel generic, and dialing in the four numbers of a cubic-bezier by hand is pure guesswork: tweak a decimal, reload, still not right. Here you drag the two control points directly on the graph, hit Play to watch a ball travel across at whatever duration you set, and copy the value already formatted for transition-timing-function and animation-timing-function.

On the graph, X is time and Y is animation progress. The generator enforces one rule for you: X1 and X2 stay clamped between 0 and 1, because outside that range the curve stops being a valid function of time and the browser throws the whole value away. Y1 and Y2, on the other hand, may go past those limits on purpose: that is how overshoot works, the effect of shooting past the target and settling back. The back preset uses cubic-bezier(0.68, -0.55, 0.27, 1.55) for exactly that reason.

Start from a preset and nudge gently: a 0.05 change is already noticeable. Test with your project's real duration, since a curve that feels great at 1500 ms can feel abrupt at 300 ms; the duration field accepts 200 to 5000 ms. Also keep in mind that overshoot only shows on properties that can exceed their final value, like transform: opacity gets clamped between 0 and 1. Everything runs in your browser; nothing is sent to a server.

Frequently asked questions

Why can't I drag the point past the sides of the graph?
X values are clamped to the 0-1 range because they represent time; an X outside it would make the cubic-bezier invalid and the browser would fall back to default easing. Only Y may leave the box, above or below.
Why not just use the built-in ease-in-out?
The named keywords are just fixed curves; ease-in-out equals cubic-bezier(0.42, 0, 0.58, 1). Building your own lets you decide how hard the animation accelerates, brakes, or overshoots.
Does the copied value work for animations or only transitions?
Both. The output includes two lines, transition-timing-function and animation-timing-function, carrying the same cubic-bezier; keep whichever one your case needs.

Related Tools