Transition & Easing Studio
Design CSS easing the visual way: drag a cubic-bezier curve, watch a demo element play your transition in real time, and get the recommended duration with motion-design guidance. Export to a CSS transition, @keyframes, Tailwind v3 + v4, Framer Motion, or the Web Animations API.
About this ToolHow it works, benefits & use casesTap to collapse
Most easing pickers show you a curve and a code string. This one is a studio: you drag the two handles of a cubic-bezier curve and a real demo element plays your transition the instant you let go, so you tune motion by feel instead of by guessing numbers. Pull a handle above the top guide line and the value overshoots and settles back — the classic "back" or bouncy feel — and the live preview shows exactly that. A categorized easing library (standard, Material, iOS, and playful curves) gives you a great starting point, and editable x1/y1/x2/y2 fields stay in sync with the drag. Alongside the curve you set duration and delay with sliders and get motion-design guidance grounded in Material and Apple ranges: under 100ms feels instant, 100 to 500ms is the responsive sweet spot, and over 500ms starts to drag. You choose what the demo animates — move, scale, fade, rotate, color, or a combo — and which CSS property the output targets. Then export the result as a CSS transition, CSS @keyframes, a Tailwind v3 config plus v4 @theme, a Framer Motion transition, or a Web Animations API call. Every export includes a prefers-reduced-motion fallback, and the whole setup lives in a shareable URL.
How to Use
- 1Pick a starting curve from the easing library, or just drag the two handles on the curve graph.
- 2Watch the demo element replay your transition automatically; hit Replay or enable Loop to keep it running.
- 3Set duration and delay with the sliders and read the guidance card — aim for the 100 to 500ms sweet spot.
- 4Choose what the demo animates and which CSS property the output targets (transform, opacity, color, or custom).
- 5Select an output format (CSS, @keyframes, Tailwind, Framer Motion, or Web Animations API) and copy, download, or share it.
Key Benefits
- Drag a real cubic-bezier curve and see a demo element play it instantly
- Overshoot handles (y above 1) for back/bouncy easing, visualized live
- Categorized easing library: standard, Material, iOS, and playful presets
- Motion-design duration guidance grounded in Material and Apple ranges
- Pick the demo effect (move/scale/fade/rotate/color/combo) and the target CSS property
- Exports to CSS, @keyframes, Tailwind v3 + v4, Framer Motion, and the Web Animations API
- Every export ships a prefers-reduced-motion fallback, and the config is shareable via URL
Common Use Cases
- Designing a button hover or card-lift transition that feels snappy
- Dialing in a playful overshoot for a modal or toast entrance
- Matching Material or iOS motion guidelines on a cross-platform UI
- Getting the exact cubic-bezier and duration for a Framer Motion transition
- Producing a Tailwind timing-function + duration pair for a design system
Easing library
Best for: Pop-in with a little overshoot
Timing
What animates
Copy, download, share, or pipe to another tool
.box {
transform: translateX(0);
transition: transform 400ms cubic-bezier(0.34, 1.56, 0.64, 1);
}
.box:hover,
.box.is-active {
transform: translateX(140px);
}
@media (prefers-reduced-motion: reduce) {
.box { transition: none; }
}Easing is what makes motion feel real
A cubic-bezier() curve maps elapsed time (x) to progress (y). A straight line is linear; bending the handles makes the motion accelerate or decelerate. Pulling a handle abovethe top line (y > 1) makes the value overshoot and settle back — that is the “back” / bouncy feel. Drag the two handles on the curve and the demo plays it instantly.
Pick a duration that feels responsive
Most UI transitions belong in the 100–500ms range — long enough to read the motion, short enough to feel instant. Use ease-out for things entering the screen and ease-in for things leaving. Always keep a prefers-reduced-motion fallback, which every export here includes.
Was this tool helpful?
Share Your Experience
Help others discover this tool!
Related tools
- CSS Easing GeneratorShape cubic-bezier & steps() timing functions on a draggable curve with a live motion preview — 26 presets, overshoot support. Export value, CSS, SCSS, Tailwind, or JS
- CSS FormatterFormat and beautify CSS code
- Spacing Scale CalculatorLinear, geometric, Fibonacci or modular spacing scales with a visual ruler preview and utility classes — export CSS, Tailwind v4, SCSS, JSON
- Tailwind Config GeneratorVisually build a Tailwind config - theme extend, colors, spacing, fonts, screens, plugins - and export it as a v3 JS config or a v4 @theme CSS block
- Container Queries GeneratorDesign CSS @container queries with a live, resizable preview — export CSS, SCSS, and Tailwind v3 + v4
- Design Token GeneratorPerceptual colour ramps + light/dark semantic tokens, live preview, WCAG audit — export CSS, Tailwind v4, W3C DTCG & more
It maps elapsed time (the horizontal x axis, 0 to 1) to animation progress (the vertical y axis, 0 to 1). A straight diagonal line is linear — constant speed. Bending the curve changes how the value accelerates and decelerates: a curve that rises slowly then steeply is ease-in (starts slow), and the reverse is ease-out (ends slow). The two handles are the control points, written as cubic-bezier(x1, y1, x2, y2) in CSS. Dragging them in this tool updates that string live.
Drag a handle above the top guide line so its y value goes beyond 1 (or below 0 for an anticipating wind-up). Because y is progress, a value over 1 means the property travels past its target and then settles back — that is the "back" easing or bouncy feel. The playful presets (Back Out, Bouncy, Snappy) are pre-built examples. Note that true springy, multi-bounce motion is better modeled with a spring animation, since a single cubic-bezier can only overshoot once.

