Cubic Bezier Generator
Design custom CSS easing curves visually — drag control points to create spring, bounce, and ease variants with live animation preview.
Last updated: March 25, 2026
Find this tool useful? Support the project to keep it free!
Buy me a coffeeWhat is Cubic Bezier Generator?
CSS animations and transitions require a timing function that controls how the animated value changes over time. Without a timing function, all animations would progress at a constant speed (linear) — which looks robotic and unnatural. CSS provides named easing functions (ease, ease-in, ease-out, ease-in-out) as starting points, but these rarely match the precise character of professional motion design.
The cubic-bezier() function lets you define a custom S-curve (or any other shape) using four numbers: cubic-bezier(x1, y1, x2, y2). These represent two "control points" on a Bézier curve graph — the horizontal axis is time (0–1), and the vertical axis is animation progress (0–1). The curve shape between the start and end points determines whether the animation starts slow and ends fast (ease-in), starts fast and slows (ease-out), has a spring overshoot past 1.0 (back/anticipate easing), or any other motion characteristic you can imagine. The named presets are just shorthand: ease = cubic-bezier(0.25, 0.1, 0.25, 1).
How to Use Cubic Bezier Generator
Drag the two blue control point handles on the Bézier graph to shape the curve
Alternatively, type the four numeric values directly in the input fields (P1x, P1y, P2x, P2y)
Watch the comparison animation showing your custom easing vs linear easing side-by-side
Browse the preset library (ease, ease-in, ease-out, easeInOutQuad, spring, bounce) for starting points
Click "Copy CSS" to copy cubic-bezier(x1, y1, x2, y2) value ready to paste into transition or animation-timing-function
Common Use Cases
- Creating a "spring" button press animation that overshoots slightly then settles (adds physicality)
- Designing a menu slide-in that starts fast and decelerates smoothly at the final position
- Tuning a modal overlay fade-in to feel fast-appearing but soft-landing rather than clinically linear
- Creating an "anticipate" effect where a card moves slightly backward before flying forward
- Matching motion to a specific design system motion spec (Material Design, Apple HIG, Fluent)
- Designing a page transition that feels snappy without being jarring
- Synchronizing multiple simultaneously animated elements to feel cohesive using the same easing curve
- Replacing all transition: all 0.3s ease on a design system with more intentional per-property easing
Example Input and Output
Named CSS easing presets and their cubic-bezier() equivalents:
ease (default)
ease-in
ease-out
ease-in-out
linear
easeInOutCubic (from Penner)
Spring-like
Anticipate / Back-incubic-bezier(0.25, 0.1, 0.25, 1.0)
cubic-bezier(0.42, 0, 1.0, 1.0)
cubic-bezier(0, 0, 0.58, 1.0)
cubic-bezier(0.42, 0, 0.58, 1.0)
cubic-bezier(0, 0, 1, 1)
cubic-bezier(0.645, 0.045, 0.355, 1.000)
cubic-bezier(0.175, 0.885, 0.32, 1.275) /* overshoots */
cubic-bezier(0.36, 0, 0.66, -0.56) /* dips back first */Client-Side Processing
The Bézier curve computation and live animation preview run entirely in your browser. No data is sent to our servers.
CSS Custom Properties for Easing
Store your easing curves as CSS custom properties: :root { --ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); --ease-out-smooth: cubic-bezier(0.2, 0.8, 0.2, 1); }. Reference them throughout your stylesheet: transition: transform 0.3s var(--ease-spring). This creates a consistent motion vocabulary across your design system.
CSS Linear() for Complex Curves
CSS linear() (Chrome 113+, Firefox 112+) is the newest timing function that allows multiple eased segments, enabling true spring and bounce curves in pure CSS without JavaScript: animation-timing-function: linear(0, 0.7px 2.5%, 1, 0.96, 1.01, 1). This is a major advancement over cubic-bezier which is always limited to a single cubic curve.
Frequently Asked Questions
What do the four cubic-bezier values mean?
How can the animation value go above 1.0?
What is the difference between ease-in and ease-out?
When should I use cubic-bezier vs spring physics animations?
Can I use the same easing for all CSS properties?
What is the Penner easing library?
How This Tool Works
The SVG Bézier graph renders the four control points: (0,0), P1(x1,y1), P2(x2,y2), (1,1) connected by a cubic Bézier path using SVG cubic-bezier curve commands. The two inner control points (P1 and P2) are rendered as draggable SVG circles. Dragging updates x1/y1/x2/y2 values, which regenerates the SVG path and triggers the CSS animation demo by applying the cubic-bezier() function to the demo element's transition. The animation loops every few seconds to show the motion behavior.
Technical Stack