Cubic Bezier Curve Generator
Interactive cubic-bezier CSS easing function generator with draggable control points, live animation preview, and 10 built-in presets.
About
CSS transitions and animations rely on timing functions to interpolate between states. The cubic-bezier(x1, y1, x2, y2) function defines a cubic BΓ©zier curve where the x-axis represents time (clamped 0 - 1) and the y-axis represents progression. Incorrect easing choices cause interfaces to feel sluggish, robotic, or physically implausible. A bounce effect with wrong control points produces jarring motion that breaks user trust. This tool computes the exact parametric curve and outputs the CSS function string ready for production use.
The generator accepts y-values outside [0, 1] to produce overshoot and anticipation effects. Note: x-values are always clamped to [0, 1] per the CSS specification because time cannot run backward. This tool approximates visual output at 200 sample points. For production validation, always test against target frame rates on low-powered devices.
Formulas
A cubic BΓ©zier curve is a parametric curve defined by four control points. For CSS easing, the endpoints are fixed at P0 = (0, 0) and P3 = (1, 1). The curve is computed as:
where t β [0, 1] is the parameter. For each component:
where x1, y1 are the coordinates of control point P1 and x2, y2 are the coordinates of P2. The CSS specification requires x1, x2 β [0, 1] while y1, y2 may exceed this range to produce overshoot effects. To evaluate the easing at a given time fraction x, one must solve the cubic in t for the x-component using Newton-Raphson iteration, then evaluate the y-component at that t.
Reference Data
| Preset Name | CSS Value | x1 | y1 | x2 | y2 | Character |
|---|---|---|---|---|---|---|
| linear | cubic-bezier(0, 0, 1, 1) | 0 | 0 | 1 | 1 | Constant velocity |
| ease | cubic-bezier(0.25, 0.1, 0.25, 1) | 0.25 | 0.1 | 0.25 | 1 | CSS default; gentle start & end |
| ease-in | cubic-bezier(0.42, 0, 1, 1) | 0.42 | 0 | 1 | 1 | Slow start, fast end |
| ease-out | cubic-bezier(0, 0, 0.58, 1) | 0 | 0 | 0.58 | 1 | Fast start, slow end |
| ease-in-out | cubic-bezier(0.42, 0, 0.58, 1) | 0.42 | 0 | 0.58 | 1 | Symmetric acceleration |
| easeInSine | cubic-bezier(0.47, 0, 0.745, 0.715) | 0.47 | 0 | 0.745 | 0.715 | Sinusoidal ease-in |
| easeOutCubic | cubic-bezier(0.215, 0.61, 0.355, 1) | 0.215 | 0.61 | 0.355 | 1 | Cubic deceleration |
| easeInOutQuart | cubic-bezier(0.77, 0, 0.175, 1) | 0.77 | 0 | 0.175 | 1 | Quartic S-curve |
| easeInBack | cubic-bezier(0.6, -0.28, 0.735, 0.045) | 0.6 | β0.28 | 0.735 | 0.045 | Anticipation overshoot start |
| easeOutBack | cubic-bezier(0.175, 0.885, 0.32, 1.275) | 0.175 | 0.885 | 0.32 | 1.275 | Overshoot end settle |
| easeInOutBack | cubic-bezier(0.68, -0.55, 0.265, 1.55) | 0.68 | β0.55 | 0.265 | 1.55 | Both-end overshoot |
| snappy | cubic-bezier(0.075, 0.82, 0.165, 1) | 0.075 | 0.82 | 0.165 | 1 | Quick response, smooth land |
| Material Standard | cubic-bezier(0.4, 0, 0.2, 1) | 0.4 | 0 | 0.2 | 1 | Google Material Design default |
| Material Decelerate | cubic-bezier(0, 0, 0.2, 1) | 0 | 0 | 0.2 | 1 | Entering elements |
| Material Accelerate | cubic-bezier(0.4, 0, 1, 1) | 0.4 | 0 | 1 | 1 | Exiting elements |