cubic-bezier(0.25, 0.10, 0.25, 1.00)cubic-bezier(0.25, 0.10, 0.25, 1.00)transition: all 1.0s cubic-bezier(0.25, 0.10, 0.25, 1.00);animation: slide 1.0s cubic-bezier(0.25, 0.10, 0.25, 1.00);CSS Easing Generator — Cubic-Bezier Editor
What's included
Features
About this tool
Pick the Right CSS Easing for Your Animation — Preview It Live, Then Copy the cubic-bezier()
Your modal slides in but feels wrong — too mechanical, or it overshoots and feels too bouncy. You know you need a different easing function, but picking the right cubic-bezier() values by guessing numbers is tedious. Use this visual editor: drag the handles, watch the ball animate in real time, and copy the value when it feels right.
The curve editor visualizes exactly how your element will accelerate and decelerate. Moving the P1 handle up makes the start faster; moving P2 below the baseline creates an overshoot (spring-like "Back" effect). The animation preview replays automatically with every change. Copy the raw cubic-bezier() value, or grab a ready-to-paste transition or animation CSS line from the output panel.
27 presets covering the full Penner easing library: Sine, Quad, Cubic, Quart, Quint, Expo, Circ, and Back — each with easeIn, easeOut, and easeInOut variants — plus the 5 standard CSS keywords. For most UI animations, start with easeOutCubic for elements entering and easeInCubic for elements leaving. Use easeOutBack for a satisfying spring-settle effect on modals and cards.
Step by step
How to Use
- 1Drag the curve handlesThe SVG curve editor shows two draggable handles. The purple handle (P1) controls the early phase of the motion — drag it up to make the start faster, down to make it slower. The lighter purple handle (P2) controls the late phase — drag it below the baseline to create an overshoot (the spring-like Back effect). The curve updates immediately and the animation ball replays automatically.
- 2Pick a named presetScroll the Presets panel on the left and click any named easing. Presets are grouped by family: CSS Standard (linear, ease, ease-in, ease-out, ease-in-out), Sine, Quad, Cubic, Quart, Quint, Expo, Circ, and Back — each with easeIn, easeOut, and easeInOut variants. For everyday UI work, start with easeOutCubic for entering elements and easeInCubic for exiting ones.
- 3Fine-tune with numeric inputsType exact values into the X1, Y1, X2, Y2 numeric inputs below the curve editor. X values are clamped to 0–1 (time cannot go backward). Y values can range from −1.5 to 2.5 — values outside [0, 1] create undershoot or overshoot effects. The Back presets use Y values like −0.56 and 1.56 for their spring feel.
- 4Adjust the preview durationUse the Duration slider (0.3–3.0s) in the preview section to match your real animation's speed. Click the ▶ play button to replay the animation at any time. Shorter durations reveal whether fast easings feel snappy or abrupt; longer durations show if slow easings feel smooth or sluggish.
- 5Copy the CSS outputClick the ⎘ copy icon next to any of the three output rows: the raw cubic-bezier() value, a complete transition shorthand line, or a complete animation shorthand line. The cubic-bezier value is also displayed in the header with its own global Copy button for quick access.
Real-world uses
Common Use Cases
Got questions?
Frequently Asked Questions
cubic-bezier() is a CSS timing function that controls how an animation or transition progresses over time. The syntax is cubic-bezier(x1, y1, x2, y2) — four values defining two control points of a curve. The x-axis is time (0 = start, 1 = end), the y-axis is progress. By adjusting the control points you create slow starts, fast endings, overshoots, and spring effects. Use it as the timing-function in transition or animation: transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1).
For elements entering the screen, use ease-out or easeOutCubic — they decelerate naturally as the element arrives. For elements leaving, use ease-in (they accelerate out). For modals, drawers, and cards that pop open, easeOutBack adds a subtle spring-settle. For hover effects and micro-interactions, easeInOutSine or easeInOutQuad are smooth without being dramatic. Avoid linear except for continuous loops — any natural motion has acceleration and deceleration.
ease-in starts slow and ends fast — best for elements exiting (they accelerate as they leave). ease-out starts fast and ends slow — best for elements entering (they decelerate as they arrive, feeling natural). ease-in-out starts slow, speeds up in the middle, slows down at end — good for elements moving between two on-screen positions. linear moves at constant speed — only use for loops where natural deceleration creates visible jitter at the restart point.
Use easeOutBack — it briefly overshoots the end state before settling back, creating a spring-like feel. The cubic-bezier values are approximately (0.34, 1.56, 0.64, 1). The overshoot happens because Y2 is above 1, meaning the animation temporarily exceeds its end value. Y values outside [0, 1] are valid in CSS cubic-bezier. For a stronger spring, increase Y2 further; for a subtler one, reduce it toward 1.
Use cubic-bezier() as the timing-function value in the transition shorthand: transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); Or as individual properties: transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); transition-duration: 0.3s; This tool generates a complete ready-to-paste transition line in the CSS output — click the copy icon next to it.
Yes. Apply it as animation-timing-function: animation: slide 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); You can also set different timing functions between individual keyframe steps — place animation-timing-function inside keyframe step blocks (0%, 50%, 100%) to create multi-phase motion with different acceleration curves in each phase.
Yes. Most JS animation libraries accept cubic-bezier values as arrays or strings. GSAP uses CustomEase or accepts [x1, y1, x2, y2] arrays. Framer Motion accepts cubic-bezier strings in transition.ease. Anime.js accepts cubic-bezier arrays. The four coordinate values are shown in the X1 Y1 X2 Y2 inputs in this tool — copy them directly.
CSS cubic-bezier allows Y values outside [0, 1], which creates overshoot effects. A Y2 above 1 means the animation temporarily exceeds its end state before snapping back — the "Back" spring effect. A Y1 below 0 creates an undershoot. X values are constrained to [0, 1] because they represent time (time cannot reverse). The Back presets use values like Y1=-0.56, Y2=1.56 for their characteristic spring overshoot.