Cubic Bezier Generator

Drag two control points to shape a CSS cubic-bezier() easing curve, preview the motion, and copy the timing function — all in your browser.

The Cubic Bezier Generator runs entirely in your browser. The curve you drag, the animation preview, and the generated cubic-bezier() CSS never leave your device and nothing is uploaded to ArrayKit.

Open the CSS Formatter

About Cubic Bezier Generator

The Cubic Bezier Generator lets you shape a CSS easing curve by dragging its two control points over a live plot, then copies the exact cubic-bezier(x1, y1, x2, y2) timing function for your transition or animation. Start from named presets like ease, ease-in-out, or a bouncy ease-out-back, then fine-tune the handles with the mouse or arrow keys. An animated dot plays your curve in real time so you can feel the acceleration before you paste it. It is built for front-end developers and designers tuning motion for a transition-timing-function or animation-timing-function without guessing at numbers. Everything renders on your device — the curve, the preview, and the generated CSS never leave your browser.

Features

How to use the Cubic Bezier Generator

  1. Pick a preset like ease-in-out as a starting point
  2. Drag either control point to reshape the curve, or nudge it with arrow keys
  3. Watch the animated preview to feel the acceleration you built
  4. Copy the cubic-bezier() value or the full transition-timing-function rule
  5. Paste it into your CSS transition or animation shorthand

Example

Input

control point 1: 0.34, 1.56
control point 2: 0.64, 1

Output

.card {
  transition: transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);
}

An ease-out-back curve overshoots past 1 for a subtle bounce.

Common errors & troubleshooting

Frequently asked questions

What do the four numbers in cubic-bezier() mean?
They are the x and y coordinates of two control points: cubic-bezier(x1, y1, x2, y2). The curve's start and end are fixed at (0,0) and (1,1), and these two handles bend the path between them to set how the animation accelerates.
Why must the x values stay between 0 and 1?
In CSS the x axis is animation progress over time, which only moves forward. Keeping x1 and x2 in 0 to 1 guarantees the curve represents a single value at each moment. y can go outside that range to create overshoot or anticipation.
How do I make a bouncy or overshoot easing?
Give a control point a y greater than 1 or less than 0. For example cubic-bezier(0.34, 1.56, 0.64, 1) overshoots past the end before settling, which reads as a gentle bounce. Drag a handle above or below the plot to do this.
What is the difference between ease and ease-in-out?
ease is cubic-bezier(0.25, 0.1, 0.25, 1) and starts a touch faster than ease-in-out, which is cubic-bezier(0.42, 0, 0.58, 1) and is symmetric. ease-in-out ramps up and slows down evenly, while ease front-loads the motion slightly.
Can I use this value for animation-timing-function too?
Yes. A cubic-bezier() works anywhere CSS accepts an easing function, including transition-timing-function, animation-timing-function, and the timing slot of the transition and animation shorthands.
Does dragging the curve send anything to a server?
No. The editor, the animated preview, and the generated CSS are all computed in your browser with plain JavaScript. Nothing about your curve is uploaded to ArrayKit.

Related tools

All ArrayKit tools