Cubic-Bezier Easing Generator
Visualize, edit, and export custom CSS easing curves.
Presets:
P1 X (Time / Easing start)0.25
P1 Y (Progress)0.1
P2 X (Time / Easing end)0.25
P2 Y (Progress)1
Animation preview
What is cubic-bezier?
CSS cubic-bezier(x1, y1, x2, y2)defines a custom easing curve using two control points (P1 and P2). The x-values (0–1) represent time, and the y-values represent progress (y < 0 or y > 1 creates overshoot effects). Use named presets like ease-in-out as starting points, then tweak the sliders to fine-tune your animation.
Built and maintained by Meet Shah · Last updated
What this tool is used for
- Building an easing curve that matches a motion spec rather than using a keyword.
- Comparing two curves against a live animation before choosing one.
- Producing an ease-out that decelerates more sharply than the built-in one.
- Getting the control points for a curve a designer drew.
- Checking how a curve feels at the duration you will actually use.
Frequently Asked Questions
- What do the four numbers mean?
- They are the two control points of a curve whose endpoints are fixed at (0,0) and (1,1): `cubic-bezier(x1, y1, x2, y2)`. The horizontal axis is elapsed time, the vertical is progress — so the curve is a speed profile, never a path the element travels along.
- Why must x stay between 0 and 1 when y need not?
- Because x is time, and time cannot run backwards — a control point outside 0–1 horizontally makes the function non-monotonic and CSS rejects it. y is progress, so values below 0 or above 1 are legal and give anticipation and overshoot, which is how a bounce is built.
- What are the keywords equivalent to?
- `linear` is (0, 0, 1, 1); `ease` is (0.25, 0.1, 0.25, 1); `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). `ease` is the default, and its slight asymmetry is why it feels less mechanical than `ease-in-out`.
- Which easing should UI use?
- Ease-out for anything entering or responding to a tap — it starts fast, so the interface feels immediate. Ease-in for things leaving. Ease-in-out for movement between two on-screen positions. Linear only for continuous motion such as a spinner.
- Can a cubic-bezier do a real bounce?
- Only a single overshoot, because one cubic segment can cross its target once. A multi-bounce needs `linear()` with stops, a keyframe animation, or a spring. If you find yourself hunting for magic numbers to get two bounces, the curve is the wrong tool.
- Can a cubic-bezier curve overshoot?
- Yes — Y control points outside 0 to 1 produce a value that passes its target and returns, which is how a bounce or anticipation effect is made. X must stay within 0 to 1, or the curve is not a function of time.
Common errors and gotchas
- Judging a curve at the wrong duration, where the same easing feels entirely different.
- Using control points outside 0-1 on the time axis, which is invalid.
- Choosing an overshoot curve for something that must not move past its target, such as a progress bar.
- Applying the same curve to entering and leaving, where asymmetry usually reads better.
- Ignoring reduced-motion preferences, which no easing curve addresses.
Related Design & CSS tools
Color Converter
Convert a color to HEX, RGB, HSL, HSB, and CMYK at once.
HEX to RGB
Convert HEX color codes to RGB / RGBA values.
RGB to HEX
Convert RGB values into HEX color codes.
CSS Box Shadow Generator
Visually design CSS box-shadow with a live preview and code.
CSS Border Radius Generator
Visually craft border-radius with a live preview.
HEX to CMYK
Convert HEX colors to CMYK print values.
CMYK to HEX
Convert CMYK print values to HEX colors.
HEX to HSB
Convert HEX colors to HSB / HSV values.