CSS

CSS cubic-bezier generator

Details

How to use CSS cubic-bezier generator

What the tool does, how to run it, and what to expect from the result.

How to build a CSS cubic-bezier easing curve

An easing function maps elapsed time to animation progress. The named keywords (ease, ease-in, ease-out) are presets over the same cubic-bezier function, and hand-tuning the four control values is how you get anything they cannot express, such as overshoot.

Drag the four values, watch the curve and the animated dot, and copy the timing function. The preview runs live in your browser.

  • Start from a preset (ease, ease-in, ease-out, ease-in-out, linear) or go straight to the sliders.
  • Adjust x1 and x2 (time, 0 to 1) and y1 and y2 (progress, -1 to 2).
  • Push a y value above 1 for overshoot, or below 0 for a wind-up.
  • Set the duration slider to see the motion at the speed you plan to ship, ideally 150 to 300ms for UI.
  • Copy the transition-timing-function and transition shorthand.
Tips

Getting a better result out of CSS cubic-bezier generator

Specific settings and thresholds, not general advice.

  • The four numbers are the two control points, in the order x1, y1, x2, y2. The x values are time and are clamped to 0 to 1 by the spec, because time cannot run backwards. The y values are progress and can go outside 0 to 1, which is exactly how you get overshoot and anticipation.
  • Pull a y value above 1 and the animation overshoots its target and settles back, which reads as bounce or spring. Pull one below 0 and it pulls back before moving forward, which reads as wind-up. Neither is possible with the named keywords, and that is the whole reason to hand-write a bezier.
  • The CSS keyword ease is not linear-with-rounded-corners: it is cubic-bezier(0.25, 0.1, 0.25, 1), which accelerates fast and decelerates slowly. If your animation feels sluggish at the end, that asymmetry is why.
  • For UI, ease-out (fast start, slow finish) is the right default for things entering the screen, and ease-in for things leaving. Something arriving should decelerate into place; something leaving should accelerate away and stop mattering.
  • Duration matters more than curve. A 600ms animation with a perfect bezier still feels slow. Most interface transitions should sit between 150ms and 300ms; the slider here goes to 4 seconds so you can actually see the curve's shape, not because you should ship that.
Limits

What CSS cubic-bezier generator does not do

The honest boundary, so you do not lose time finding it yourself.

  • The four values are set with sliders and a preset dropdown. There are no draggable control-point handles on the curve.
  • Five presets only: ease, ease-in, ease-out, ease-in-out, and linear.
  • It does not generate steps(), linear() with multiple stops, or spring physics.
  • The preview animates a dot on a track. It does not preview your own element.
At a glance

Who CSS cubic-bezier generator is for

A quick way to understand who this helps, what it solves, and where it connects next.

Best fit

Front-end developers tuning CSS animation easing.

Ideal for

Using the css cubic-bezier generator without installing anything or signing up.

FAQ

Common questions

Short answers for the questions people usually have before trying a utility like this.

What do the four numbers mean?

They are two control points of a cubic bezier: x1, y1 for the first, x2, y2 for the second. The x axis is elapsed time normalised from 0 to 1, and the y axis is animation progress. The curve maps one to the other, so a steep section means the property is changing fast at that moment.

Why can y go above 1 but x cannot?

Because x is time and the browser must be able to evaluate progress for any moment: an x outside 0 to 1 would make the curve non-monotonic in time, which is undefined. y is progress, and progress overshooting 100% is perfectly meaningful. That is how a bezier produces a bounce without any physics engine.

How do I make an animation bounce?

Push y2 above 1, for example cubic-bezier(0.34, 1.56, 0.64, 1). The element overshoots its final position and settles back. For a wind-up, push y1 below 0 so the element moves slightly backwards before going forwards. Both are single-curve effects and need no keyframes.

Which easing should I use for a UI transition?

ease-out for elements entering (a menu opening, a toast appearing), because deceleration into place feels natural. ease-in for elements leaving, because acceleration away signals dismissal. ease-in-out for a movement between two visible states. linear only for a spinner or a progress bar, where constant speed is the point.

Why does my animation feel slow even with a good curve?

Almost always because the duration is too long. Interface motion should mostly land between 150ms and 300ms; anything over 500ms starts to feel like the app is thinking. The curve controls how the motion feels, and the duration controls whether it feels fast, and duration wins.

Recommendations

You Might Also Like

Nearby tools from the catalog that fit the same job or workflow.

Cleanor app

Do it all on your device

Cleanor puts these tools in one app: compress and convert images, video, and audio, work with PDFs, and scan text right on your device. Plus free up storage and clear inbox clutter with Email Cleaner. Start with a free trial.

  • iPhone
  • Android
  • Macsoon
  • Windowssoon