A hands-on cubic-bezier easing editor for CSS animation work. You drag the two
control handles directly on the curve, watch a live preview, and copy a
ready-to-paste cubic-bezier() value — but it goes further than a basic generator:
it lets you scrub the timeline to read the exact eased value at any progress
point, compare your curve against a reference, save curves you like, and
export a full @keyframes block when a single timing function is not enough.
It is built for front-end developers, motion designers and anyone fine-tuning the feel of a transition. Easing is what separates motion that feels mechanical from motion that feels intentional, and the only reliable way to nail it is to see the curve, the numbers and the animation side by side — which is exactly what this tool puts in one place.
How it works
A CSS timing function is a Bezier curve with a fixed start at the origin and a fixed end at the top-right. Only the two control handles move. The horizontal axis is progress through the animation (always 0 to 1, because time only moves forward), and the vertical axis is the eased output — which is free to overshoot above 1 or dip below 0 to create bounce and anticipation.
When you drag a handle, the editor re-solves the curve. Because the curve is defined
parametrically, finding the eased value y for a given progress x is not a direct
lookup — the tool runs a few Newton-Raphson iterations (with a bisection fallback) to
invert x(t), then evaluates y(t). That same solver powers the live preview, the
scrub read-off and the keyframe export, so every number you see is the true curve
value, not an approximation of the handle position.
The preview animates a real DOM element using your generated cubic-bezier() so what
you see is precisely what a browser will render. Set a reference curve (a preset
or one of your saved curves) and it is drawn as a dashed line behind yours, making it
easy to judge whether your tweak is subtler, snappier or more dramatic than a known
easing.
Example
Say you want a panel that slides in with a slight overshoot. Start from the
ease-out-back preset, which gives roughly cubic-bezier(0.34, 1.56, 0.64, 1). The
second handle sits well above the top gridline, so the value shoots past 100 percent
before settling — that is the overshoot.
Scrub to 60 percent progress and the read-off shows the element is already past its final position; nudge the first handle right to delay the start, and the motion feels like it gathers momentum before springing into place. Happy with it? Copy the value, or grab the generated rule:
transition: all 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
If you need the easing on a property a timing function cannot touch, open Export as @keyframes and paste the sampled animation instead. Every curve, preview and export is computed in your browser — nothing is uploaded.