〰️ CSS Easing & Animation Timing Generator

Design CSS cubic-bezier easing curves visually. Drag handles, preview animations, pick from presets like ease, ease-in-out, spring. Copy CSS free.

Drag the two bezier control points to shape your animation curve, or pick from preset easings (ease, spring, bounce). The preview animates a ball using your curve so you see exactly how it feels — then copy the cubic-bezier() value for your CSS transition or animation.

How to Use

1

Drag the control points

Click and drag the two colored handles on the SVG canvas to define your easing curve shape.

2

Preview the animation

Click Play to see a box animate using your cubic-bezier curve. Try preset buttons for common easings.

3

Copy the function

Click Copy to copy the cubic-bezier() value. Use it in your CSS transition or animation.

Frequently Asked Questions

What is cubic-bezier in CSS? +
cubic-bezier() is a CSS timing function that controls the speed curve of transitions and animations. It takes four values (P1x, P1y, P2x, P2y) that define two control points of a Bézier curve between (0,0) and (1,1).
What do the four values in cubic-bezier mean? +
The four values are x1, y1, x2, y2 — the coordinates of two control points. x values must be between 0 and 1 (they represent time). y values can be outside 0–1, which creates bounce or overshoot effects.
What are the built-in CSS easing functions? +
ease is cubic-bezier(0.25,0.1,0.25,1). ease-in is cubic-bezier(0.42,0,1,1). ease-out is cubic-bezier(0,0,0.58,1). ease-in-out is cubic-bezier(0.42,0,0.58,1). linear is cubic-bezier(0,0,1,1).
How do I create a bounce animation with cubic-bezier? +
Set y values outside the 0–1 range to create overshoot. For example, cubic-bezier(0.34,1.56,0.64,1) creates a spring-like bounce where the element overshoots and settles back.
Where can I use cubic-bezier in CSS? +
Use it in the transition-timing-function or animation-timing-function properties. Example: transition: transform 0.3s cubic-bezier(0.25,0.46,0.45,0.94).


Complete Guide: CSS Cubic-Bezier Editor

Every CSS transition and animation has a timing function that controls the pace of change over time. The cubic-bezier() function gives you precise control over this pace, letting you create easing effects that feel natural, playful, or mechanical — far beyond what the named keywords like ease or ease-in-out can express. Understanding cubic Bézier curves is essential for motion design that feels polished and intentional.

Understanding the Four Control Points

A cubic Bézier curve in CSS is defined by four values: cubic-bezier(x1, y1, x2, y2). The curve always starts at point (0, 0) and ends at point (1, 1) — representing the start and end of the transition. The two control points P1 (x1, y1) and P2 (x2, y2) pull the curve toward them without being on the curve itself. The X axis represents time (0 = start, 1 = end), and the Y axis represents progress (0 = initial value, 1 = final value).

Named Easing Functions as cubic-bezier Equivalents

CSS's named easing keywords are just shorthand for specific cubic-bezier values:

ease-in vs ease-out: The UX Difference

ease-in starts slow and ends fast. Use it for elements leaving the screen — a slow start acknowledges the user's interaction, while a fast exit feels responsive. ease-out starts fast and ends slow. Use it for elements entering the screen — quick arrival grabs attention while decelerating to a gentle stop. ease-in-out suits elements that change state within the viewport (not entering or leaving), like an accordion opening or a toggle switching.

Overshoot: y Values Greater Than 1

When a Y control point exceeds 1 (or goes below 0), the animation overshoots its target value before settling. This creates a bounce or elastic effect:

/* Bounce overshoot effect */
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);

The Y axis can go above 1 or below 0 to create overshoot. Note: the X axis must stay between 0 and 1 (time cannot go backward), but the Y axis has no such constraint.

Spring Animations vs Cubic-Bezier

CSS cubic-bezier transitions have a fixed duration — the animation always takes exactly the specified time regardless of the element's current state. Spring animations (available in JavaScript via libraries like Framer Motion or the Web Animations API with spring physics) have velocity-based duration: an element interrupted mid-animation continues with its current velocity. For most UI transitions, cubic-bezier is sufficient. Use springs when you need truly natural feel for drag-and-drop or gesture-based interactions.

CSS steps() for Sprite Animations

The steps() timing function creates discrete jumps rather than smooth interpolation — perfect for sprite sheet animations:

.sprite {
  background-position: 0 0;
  animation: walk 0.5s steps(8) infinite;
}

@keyframes walk {
  to { background-position: -800px 0; }
}

With 8 frames at 100px each, steps(8) jumps 100px per step, cycling through all sprite frames.

To generate the animated spinners and loaders that use these timing functions, see the CSS Loader tool. For complete box shadow effects that complement your transitions, visit the Box Shadow Generator.

🧰 50+ Tools