Cubic Bezier Editor

Edits a cubic-bezier easing curve by dragging its two control points, with a live preview of the motion and the CSS value to copy. Easing is what separates animation that feels designed from animation that feels mechanical.

Live demo · real result from this tool

Press Generate to create a result.

Processed on your device — nothing is uploaded.

How to use Cubic Bezier Editor

  1. Drag the two control points, or start from a named easing and adjust.
  2. Watch the preview — the feel matters more than the shape of the curve.
  3. Copy the cubic-bezier value into your transition or animation.
  4. x values must be between 0 and 1; y values may exceed it to produce overshoot.
  5. ease-out suits things arriving, ease-in things leaving, linear only continuous rotation.
  6. 200–300ms suits most interface transitions; test on a slow device, not just yours.

What the four numbers mean

cubic-bezier(x1, y1, x2, y2) gives the two control points of a curve from (0,0) to (1,1). The horizontal axis is elapsed time and the vertical is progress, so the curve’s steepness at any point is the speed at that moment. A straight diagonal is linear. Pulling the first control point right delays the start; pulling the second point left makes it settle early. The x values must stay between 0 and 1 — time cannot run backwards — but y values may go outside it, which is how you get overshoot and anticipation.

The named easings are just presets

ease is cubic-bezier(0.25, 0.1, 0.25, 1) and is the CSS default — a slightly odd curve nobody would choose deliberately. ease-in is (0.42, 0, 1, 1), ease-out is (0, 0, 0.58, 1), ease-in-out is (0.42, 0, 0.58, 1). Knowing this means you can start from a named easing and adjust rather than beginning from scratch, and it explains why custom curves so often look better: the defaults were chosen for compatibility, not for feel.

Which curve for which motion

ease-out for anything entering the screen or responding to a click: fast at first, settling gently, which feels responsive because the user sees movement immediately. ease-in for things leaving, where accelerating away reads as departure. ease-in-out for anything that moves and stops within view. Linear only for continuous rotation such as a spinner — anywhere else it reads as robotic, because nothing physical starts at full speed. A y value above 1 in the second control point produces overshoot, which suits playful interfaces and irritates in a form.

Duration matters as much as the curve

Under about 150ms reads as an instant jump rather than a movement; over 500ms a user is waiting for your animation to finish. Most interface transitions belong in 200–300ms, with larger movements taking slightly longer than small ones, which matches physical intuition. And wrap decorative motion in a prefers-reduced-motion query — a beautifully eased animation is still nauseating to someone with a vestibular disorder.

Frequently asked questions

What is a cubic-bezier easing curve?
A timing function defined by two control points that shapes how an animation accelerates and decelerates over time.
What range can the values use?
The x values are clamped between 0 and 1, while the y values can go slightly beyond for overshoot and bounce effects.
How do I preview the easing?
The editor animates a dot along the curve so you can feel the timing before copying the CSS.
What is the best easing for UI animation?
ease-out for most of it — elements entering, menus opening, anything responding to a tap. It starts fast, so the interface feels immediately responsive, and settles gently. Reserve ease-in for things leaving and linear for spinners.
How do I make an animation overshoot and bounce back?
Push the second control point's y value above 1, for example cubic-bezier(0.34, 1.56, 0.64, 1). The curve passes beyond the end value and comes back, which reads as a spring. Use it sparingly; it draws attention every time.
Why does my animation feel sluggish?
Usually duration rather than curve — anything over about 400ms for a small interface movement feels slow. Also check you are not using ease-in for something arriving, which delays the visible start and reads as lag.

Written by the ToolsRift team · Last updated

Pages are drafted with AI assistance and checked by automated tests. How we write and check pages.

Was this tool useful?

Report a problem

Start typing to search every tool.

↑ ↓ to moveEnter to openEsc to close