User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
Category CSS Tools
ms
Presets
Compare with linear
Custom
Linear
Tip: Select a handle on canvas, then use Arrow keys to nudge. Hold Shift for fine control.
Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

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.

cubic-bezier css easing animation timing bezier curve css transition easing function generator

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:

B(t) = (1 βˆ’ t)3 β‹… P0 + 3(1 βˆ’ t)2 β‹… t β‹… P1 + 3(1 βˆ’ t) β‹… t2 β‹… P2 + t3 β‹… P3

where t ∈ [0, 1] is the parameter. For each component:

x(t) = 3(1 βˆ’ t)2 β‹… t β‹… x1 + 3(1 βˆ’ t) β‹… t2 β‹… x2 + t3
y(t) = 3(1 βˆ’ t)2 β‹… t β‹… y1 + 3(1 βˆ’ t) β‹… t2 β‹… y2 + t3

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 NameCSS Valuex1y1x2y2Character
linearcubic-bezier(0, 0, 1, 1)0011Constant velocity
easecubic-bezier(0.25, 0.1, 0.25, 1)0.250.10.251CSS default; gentle start & end
ease-incubic-bezier(0.42, 0, 1, 1)0.42011Slow start, fast end
ease-outcubic-bezier(0, 0, 0.58, 1)000.581Fast start, slow end
ease-in-outcubic-bezier(0.42, 0, 0.58, 1)0.4200.581Symmetric acceleration
easeInSinecubic-bezier(0.47, 0, 0.745, 0.715)0.4700.7450.715Sinusoidal ease-in
easeOutCubiccubic-bezier(0.215, 0.61, 0.355, 1)0.2150.610.3551Cubic deceleration
easeInOutQuartcubic-bezier(0.77, 0, 0.175, 1)0.7700.1751Quartic S-curve
easeInBackcubic-bezier(0.6, -0.28, 0.735, 0.045)0.6βˆ’0.280.7350.045Anticipation overshoot start
easeOutBackcubic-bezier(0.175, 0.885, 0.32, 1.275)0.1750.8850.321.275Overshoot end settle
easeInOutBackcubic-bezier(0.68, -0.55, 0.265, 1.55)0.68βˆ’0.550.2651.55Both-end overshoot
snappycubic-bezier(0.075, 0.82, 0.165, 1)0.0750.820.1651Quick response, smooth land
Material Standardcubic-bezier(0.4, 0, 0.2, 1)0.400.21Google Material Design default
Material Deceleratecubic-bezier(0, 0, 0.2, 1)000.21Entering elements
Material Acceleratecubic-bezier(0.4, 0, 1, 1)0.4011Exiting elements

Frequently Asked Questions

The x-axis represents time progression in CSS transitions. Allowing x-values outside [0, 1] would mean time running backward, which is physically meaningless for animation scheduling. The y-axis represents the output property value (opacity, position, etc.), and values beyond [0, 1] create overshoot - the element moves past its target and settles back, producing bounce or anticipation effects.
CSS keywords are predefined cubic-bezier aliases. For example, ease-in-out equals cubic-bezier(0.42, 0, 0.58, 1). The keyword form offers no parameters to tune. Using the explicit cubic-bezier() function gives precise control over the acceleration profile, letting you match specific motion design specifications from tools like After Effects or Figma.
Setting P1 = (0, 0) and P2 = (1, 1) produces a linear curve - constant velocity with no acceleration. This is identical to cubic-bezier(0, 0, 1, 1) or the linear keyword. The curve degenerates into a straight diagonal from origin to (1, 1).
A single cubic-bezier segment cannot produce multiple oscillations. It can create one overshoot (y > 1) or one anticipation dip (y < 0), but not repeated bounces. True bounce or elastic effects require CSS @keyframes with multiple steps, or JavaScript-based easing functions with damped sinusoidal terms.
At 60 fps over a 300ms transition, the browser evaluates roughly 18 frames. Rendering the preview curve with 200 sample points provides more than sufficient visual fidelity. The parametric evaluation at each sample is O(1) - four multiplications and three additions - so performance is negligible even at 1000 samples.
Yes. Aggressive easing (steep curves) on short durations (under 150ms) can feel jarring because the acceleration phase happens within 2-3 frames. For micro-interactions (100-200ms), use subtle curves like cubic-bezier(0.25, 0.1, 0.25, 1). Reserve dramatic ease-in-back or ease-out-back for durations of 300ms or longer where the overshoot is perceptible but not disorienting.