🔨 All in one Utilities

CSS Cubic Bezier Generator

Great utilities that help you design, program and maintain your website

utilities for you to make a website
Home » Utilities » CSS Cubic Bezier Generator

CSS Cubic Bezier Generator

The dot replays the curve. Drag a handle, or nudge it with the arrow keys.

Note: The y axis is deliberately unclamped — above 1 the animation overshoots and settles back, below 0 it backs up before setting off. The x axis cannot leave 0–1, because that would place a control point outside the animation's own duration.

A timing function maps elapsed time to progress. The horizontal axis of the curve is how much of the duration has passed, the vertical is how much of the distance has been covered, and everything about how a movement feels is in that shape. A straight diagonal is linear, which reads as mechanical because nothing in the physical world starts and stops instantly.

The two control points are what you drag. Their x values are clamped between 0 and 1 because time cannot run backwards, but y is deliberately not clamped — pulling a handle above 1 makes the animation overshoot its destination and settle back, which is the springy quality people usually mean by bouncy. Pulling below 0 makes it back up slightly before setting off, an anticipation that suggests weight.

Which end to weight depends on what is moving. Something entering the screen should decelerate into place, so ease-out: fast at first, slow at the end. Something leaving should accelerate away with ease-in, since nobody needs to watch it go. Something moving between two on-screen positions wants ease-in-out. Getting this backwards is what makes an interface feel sluggish even at a short duration — an ease-in entrance appears to hesitate before doing anything.

A note on the named keywords: ease is not symmetrical. It is cubic-bezier(0.25, 0.1, 0.25, 1), which front-loads the movement noticeably. If you want a gentle symmetrical curve, ease-in-out is the one you are reaching for.

Frequently Asked Questions

Why can I not drag the handles past the left and right edges?

Because the x axis is time, and a control point outside 0 to 1 would mean the animation reaching a moment before it started or after it ended. The specification clamps x for that reason. The y axis is unconstrained, which is what allows overshoot and anticipation.

Which easing should I use for an element appearing?

ease-out, or a custom curve weighted the same way — fast at the start, slowing into place. It reads as the element arriving and settling. An ease-in entrance starts slowly and feels like the interface is hesitating, even at 200 milliseconds.

How long should the duration be?

Roughly 150 to 250 milliseconds for small things like hovers and toggles, 250 to 400 for panels and modals. Past about 500 the animation stops being feedback and starts being something the user waits for. The curve shapes the feel; the duration decides whether it is in the way.

Is cubic-bezier the same as a spring animation?

No. A bezier curve is fixed in duration and shape, so it always takes exactly as long as you specify. A real spring is defined by stiffness and damping and settles when the physics says it does. You can imitate a single bounce with an overshooting bezier, but not the decay of successive ones.

Related Utilities