// test easing curves and copy ready-to-use timing functions
Visualize and test CSS easing curves interactively. Preview cubic-bezier, spring, and step timing functions with live animation demos and copy ready-to-use CSS.
Select from the preset library or drag the control points on the curve editor canvas.
Watch five animation types react to your easing β position, scale, opacity, rotation, and bounce.
Hit β Copy to grab the ready-to-paste cubic-bezier() timing function.
The CSS Easing Previewer lets you visually design and test cubic-bezier() timing functions for CSS animations and transitions. Drag control points, choose from curated presets, and instantly see how your easing affects real animated elements.
A cubic-bezier(x1, y1, x2, y2) function defines the speed curve of a CSS animation or transition. It takes four numbers representing two control points that shape the curve between start (0,0) and end (1,1). Values outside 0β1 on the Y axis create overshoot/bounce effects.
CSS provides five keywords: ease (0.25,0.1,0.25,1), ease-in (0.42,0,1,1), ease-out (0,0,0.58,1), ease-in-out (0.42,0,0.58,1), and linear (0,0,1,1). You can use these directly or replace them with a custom cubic-bezier() for more control.
Use Y values outside the 0β1 range. For example, cubic-bezier(0.34, 1.56, 0.64, 1) overshoots past 1 to create a spring feel. Negative Y values create anticipation (slight pull-back before the animation). Try the "Spring" or "Back Out" presets to see this in action.
Yes β cubic-bezier works identically in both animation and transition properties. For example: transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);. You can also use it in the Web Animations API and many JavaScript animation libraries.
steps(n, direction) creates stepped (non-smooth) animations that jump between discrete values. Useful for sprite sheet animations or typewriter effects. The direction (start or end) controls whether the step happens at the beginning or end of each interval.
ease-in starts slow and ends fast (accelerates). ease-out starts fast and ends slow (decelerates). ease-in-out does both. For UI animations, ease-out typically feels most natural for elements entering the screen, while ease-in suits elements leaving.
General guidelines: micro-interactions (button hover, tooltip) 100β200ms; UI transitions (panel open, accordion) 200β400ms; page transitions or complex sequences 400β700ms. Anything over 1000ms starts feeling sluggish unless it's intentional and decorative. Adjust with the duration slider above.
Yes β cubic-bezier() has full support in all modern browsers including Chrome, Firefox, Safari, and Edge, and has been supported since IE 10. It works in both transition-timing-function and animation-timing-function properties with no prefix needed.
A CSS easing previewer is an interactive tool that lets developers and designers visualize, edit, and test CSS timing functions before adding them to their stylesheets. Instead of trial-and-error in the browser DevTools, you can drag control points on a BΓ©zier curve editor, watch live animations respond in real time, and copy the exact cubic-bezier() string directly into your code.
Easing functions are one of the most impactful β and most overlooked β parts of CSS animation. The difference between a flat linear transition and a well-tuned cubic-bezier curve is the difference between an animation that feels robotic and one that feels alive.
π‘ Looking for premium CSS templates and UI kits? MonsterONE offers unlimited downloads of templates, UI kits, and animated assets β worth checking out for your next project.
The cubic-bezier(x1, y1, x2, y2) function takes four arguments representing two control points on a curve that spans from (0,0) to (1,1). The X axis represents time (0 = start, 1 = end), and the Y axis represents the animated value's progress. By moving control points, you shape how fast or slow the animation accelerates and decelerates throughout its duration.
What makes cubic-bezier curves powerful is that Y values are not constrained to 0β1. You can push Y above 1 to overshoot the end value (creating a spring or bounce effect), or pull it below 0 to create anticipation β a brief pull-back before the animation launches forward. These subtle effects add physical realism that flat easings simply cannot achieve.
Understanding when to use each easing type is as important as knowing how to configure it. Here's a practical breakdown:
While cubic-bezier functions create smooth curves, steps(n, direction) creates animations that jump between discrete states. This makes them perfect for sprite sheet animations (where you cycle through frames of an image), typewriter effects (where text appears one character at a time), or any animation that should feel deliberately choppy or mechanical.
The first argument is the number of steps, and the second (start or end) controls when each step triggers. steps(1, start) makes the change happen at the very beginning of the duration β useful for instant value swaps with a delay. steps(n, end) holds the current value and jumps at the end of each interval.
Timing functions work identically whether you apply them via transition-timing-function or animation-timing-function. The key behavioral difference is that in @keyframes animations, the timing function applies to each keyframe segment individually β so a 3-keyframe animation will apply the curve three times, once between each pair of keyframes. This means a single easing on the animation doesn't produce the same curve as the same easing on a transition.
For complex multi-step animations, it's often better to apply different timing functions per keyframe: from { animation-timing-function: ease-in; } for the accelerate phase and 50% { animation-timing-function: ease-out; } for the decelerate phase. This level of control lets you choreograph velocity changes precisely throughout the animation.
A few principles that professional animators and UI engineers follow consistently:
cubic-bezier(0.34, 1.56, 0.64, 1)) gives it physical weight and feel.The interactive canvas in this tool shows the classic four-point cubic BΓ©zier representation. The two endpoints (bottom-left and top-right) are fixed at (0,0) and (1,1). The two draggable handles (P1 and P2) control the curve shape. Dragging P1 up makes the animation start fast; dragging it right makes it start slow. Dragging P2 left makes it end fast; dragging it up creates overshoot. The curve visualizes how your animated property progresses over time β a steep early slope means rapid initial change, a flat slope means the value barely changes during that phase.