CSS Cubic Bezier Generator
Design a custom easing curve for your CSS animations and transitions. Drag the two control points to shape the cubic-bezier() curve, watch a ball animate with your timing, then copy the value straight into transition-timing-function or animation-timing-function.
How to make a cubic-bezier easing curve
- Drag the two control-point handles on the curve, or pick a preset like ease-in-out to start from.
- Play the preview to feel how the easing accelerates and decelerates over the animation.
- Copy the cubic-bezier() value and drop it into your transition or animation timing function.
Examples
Default ease
control points (0.25, 0.1) and (0.25, 1)
cubic-bezier(0.25, 0.1, 0.25, 1)
Snappy ease-out
control points (0, 0) and (0.58, 1)
cubic-bezier(0, 0, 0.58, 1)
Frequently asked questions
What is cubic-bezier easing in CSS?
cubic-bezier() is a timing function that controls how an animation speeds up and slows down over its duration. It is defined by two control points, written cubic-bezier(x1, y1, x2, y2), that bend a curve mapping elapsed time (x) to animation progress (y). The CSS keywords ease, ease-in, ease-out and ease-in-out are all just named cubic-bezier curves.
What do the four numbers mean?
They are the X and Y coordinates of two control points: (x1, y1) and (x2, y2). The curve always runs from (0, 0) to (1, 1). The X values must stay between 0 and 1, but the Y values can go below 0 or above 1 to create overshoot or anticipation effects.
Where do I use the generated value?
Paste it into transition-timing-function or animation-timing-function, for example transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1). You can also use it as the third part of the transition shorthand.
Can Y values be greater than 1 or less than 0?
Yes. Y values outside 0 to 1 make the animation overshoot past its end value or pull back before starting, which is how bouncy or elastic easings are made. Only the X values are clamped to 0 to 1, because time cannot run backwards.
Do these easings work in every browser?
Yes. The cubic-bezier() timing function is supported in every current major browser, including Chrome, Firefox, Safari and Edge, with no vendor prefix needed.
Is my curve sent to a server?
No. The curve, preview and CSS string are all computed in your browser as you drag, so nothing about your easing leaves your device.
Related tools
CSS Clamp Generator
Generate a responsive CSS clamp() value for fluid font sizes and spacing. Set min and max sizes plus viewport bounds and copy the result.
CSS Gradient Generator
Build linear and radial CSS gradients with a live preview. Pick colors, set the angle and copy ready-to-paste background code for your site.
Box Shadow Generator
Build CSS box-shadow visually. Drag sliders for offset, blur, spread, color and opacity, see a live preview, and copy the box-shadow code.
.env to JSON
Convert a .env file to JSON, or JSON back to .env. Parses KEY=value lines, comments, quotes and export. Runs entirely in your browser.
Aspect Ratio Calculator
Calculate aspect ratios fast. Enter a ratio like 16:9 and one dimension to get the other, or enter width and height to simplify the ratio.
Base58 Encoder
Encode and decode Base58 online with the Bitcoin alphabet. Convert text to Base58 or back, UTF-8 safe, no confusing 0 O I l. Runs in your browser.