About Cubic Bezier
Drag the two control points of a cubic Bezier curve to design custom CSS easing. A sample animates beside the curve so you see the motion the curve produces. Copy as <code>cubic-bezier(x1, y1, x2, y2)</code> — drop into any <code>transition-timing-function</code> or <code>animation-timing-function</code>.
Why custom easing matters
Default easing is fine for 90% of UI. The 10% where it matters — your motion is the brand. Linear’s animations feel different from Vercel’s, which feel different from Notion’s. The curves are the difference.
Recipes for common feelings
| Feel | Curve |
|---|---|
| Quick acknowledgment | cubic-bezier(0, 0, 0.2, 1) |
| Smooth landing | cubic-bezier(0.16, 1, 0.3, 1) |
| Material standard | cubic-bezier(0.4, 0, 0.2, 1) |
| Bouncy entry | cubic-bezier(0.34, 1.56, 0.64, 1) |
| Decisive snap | cubic-bezier(0.5, 0, 0.75, 0) |
Each gives a different perceived motion, even at the same duration. Try them all in the live preview.
Common workflows
Define motion tokens. Pick 3-5 curves for a design system — a “fast”, “medium”, “decisive”. Use everywhere; consistency is what makes motion feel intentional.
Match a video reference. Designer hands you a video. Tweak the curve until it lines up. Save the values to the design system.
Tune a hero animation. Long animations suffer from default easing — too linear. A custom cubic-bezier gives the deliberate feel that hero sections need.
Limits of cubic-bezier
Cubic-bezier is two control points. For motion that needs more shape (multi-step, oscillation, spring physics), reach for linear() (CSS Easing Level 2, modern browsers), or animation libraries (GSAP, Framer Motion) for true spring math. Cubic-bezier is the simplest tool that handles most cases — start here.
Frequently asked questions
When do I use a custom curve?
ease, ease-in, ease-out, ease-in-out are good defaults. Custom curves shine when the animation is the brand voice — Linear's energetic ease, iOS's spring-like motion, Material's decelerated standard.How do I read a curve?
Common preset values?
ease-in = cubic-bezier(0.42, 0, 1, 1); ease-out = cubic-bezier(0, 0, 0.58, 1); ease-in-out = cubic-bezier(0.42, 0, 0.58, 1). Bezier is a generalization that lets you pick any curve.Can curves overshoot?
Tailwind support?
ease-[cubic-bezier(...)].How long should the animation be?
Related tools
Last updated: 2025-01-15