RevealTheme logo

Cubic Bezier Easing Generator

Build a CSS cubic-bezier() easing curve with four sliders and copy the ready-to-paste transition-timing-function declaration. Four named presets are included as starting points.

transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);

How to use this tool

  1. 1

    Click a preset (ease, ease-in, ease-out, or ease-in-out) to load its four control values, or skip this to start from the default ease curve.

  2. 2

    Drag the a, b, c, and d sliders to adjust the two control points; each ranges from -1 to 2 in steps of 0.05 and the current value shows above the slider.

  3. 3

    Read the generated transition-timing-function: cubic-bezier(a, b, c, d); line in the output box.

  4. 4

    Copy that declaration by hand and drop it into your CSS transition or animation rule.

What does a CSS cubic-bezier() easing curve actually define?

An easing function maps animation progress (input time, 0 to 1) to output progress (0 to 1), controlling how a transition speeds up and slows down rather than moving at a constant rate. CSS cubic-bezier() describes this with a Bezier curve fixed at (0,0) and (1,1), shaped by two control points P1 = (a, b) and P2 = (c, d) — the exact four numbers these sliders set. A steeper section means faster motion there; a flatter section means slower. Per the CSS spec, the x coordinates (a and c) must stay within 0 to 1 because time cannot run backward, while the y coordinates (b and d) may exceed that range to produce anticipation or overshoot (bounce-like) effects. This tool lets all four sliders go from -1 to 2, so it is possible to dial in a and c values outside 0 to 1 that browsers will reject as invalid; keep a and c between 0 and 1 for output a browser will accept. The named presets (ease, ease-in, ease-out, ease-in-out) reproduce the same fixed values defined in the CSS spec.

Common use cases

  • Tuning a button hover or focus transition so it feels snappy on entry and gentle on exit instead of using the generic default ease.

  • Designing a card or modal that overshoots slightly on open by pushing the d (P2 y) value above 1 for a subtle bounce.

  • Matching a brand motion spec where designers handed you specific cubic-bezier control points to reproduce in CSS.

  • Replacing a linear or default easing on a loading spinner or progress bar with a custom acceleration profile.

  • Quickly grabbing the canonical values behind ease-in-out without memorizing 0.42, 0, 0.58, 1.

  • Prototyping menu slide-in and drawer animations by comparing how ease-in versus ease-out change the perceived weight of the motion.

Frequently asked questions

What is the difference between ease, ease-in, ease-out, and ease-in-out?▼
ease (the default, 0.25, 0.1, 0.25, 1) starts quickly, then slows. ease-in (0.42, 0, 1, 1) starts slow and accelerates into the end. ease-out (0, 0, 0.58, 1) starts fast and decelerates. ease-in-out (0.42, 0, 0.58, 1) is slow at both ends and fastest in the middle. Click any of the four buttons to load its values.
Why can I set values that browsers will not accept?▼
The sliders range from -1 to 2 so you can experiment, but the CSS spec requires the x coordinates a and c to be between 0 and 1. If you set a or c outside that range the generated cubic-bezier() is invalid and the browser ignores it, falling back to its default. The y values b and d may legitimately go outside 0 to 1 to create overshoot or anticipation.
How do I use the output in my CSS?▼
Copy the generated line, for example transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);, into a rule that also defines a transition or animation. You can also use just the cubic-bezier(...) part as the third value of a transition shorthand or the animation-timing-function property.
Does this tool show a visual graph of the curve?▼
No. It is a slider-based generator that outputs the cubic-bezier() text and live numeric values; there is no plotted curve or animated preview. Pair it with your browser dev tools, which plot and animate the same curve, if you want a visual check before shipping.
Can I create a bounce or overshoot effect?▼
A single cubic-bezier() can overshoot once by setting the y control values (b or d) beyond 0 to 1, which makes the value pass its target and settle back. It cannot produce a true multi-bounce that oscillates several times; for that you need CSS @keyframes or the steps()/linear() functions, not a single Bezier.
Is my data uploaded anywhere?▼
No. Everything runs in your browser with local React state. Your slider values and the generated CSS never leave your device and nothing is sent to a server.

Related tools