CSS Cubic Bezier Generator
Plot an easing curve and feel what it does. Free, and runs entirely in your browser — nothing you enter is uploaded, stored or sent to a server.
About Cubic Bezier Editor
An easing curve is a graph of progress against time, and the four numbers in cubic-bezier() are two control points that bend it. Plotted and animated together, the relationship stops being abstract: the steeper the curve at a point, the faster the thing is moving at that moment.
The CSS keywords are just named curves. ease is cubic-bezier(0.25, 0.1, 0.25, 1), ease-in-out is (0.42, 0, 0.58, 1), and linear is the diagonal. Selecting them here shows what each one actually does, which is usually enough to explain why ease-in feels wrong for something arriving on screen — it starts slow, and an object appearing should already be moving.
The y values are not limited to the 0–1 range, and that is where the interesting curves live. A y above 1 overshoots the target and settles back, which reads as weight and momentum; a y below 0 pulls backwards before moving forwards, which reads as anticipation — the wind-up before a throw. Both only work on properties that can pass their target and return: transform and opacity can, width and color visibly cannot.
What a bezier cannot do is bounce or oscillate. A curve defined by two control points crosses any progress value at most a couple of times, so a spring that wobbles three times before settling needs linear() with sampled points, or keyframes, or a physics-based library.
Where it helps
- Plots the curve and animates an element with it at the same time, so the graph and the feel are connected.
- Includes the curves behind the CSS keywords and the Material motion set, which is usually where a choice starts.
- Reports overshoot and anticipation as numbers, so a curve that leaves the 0–1 range does not surprise you later.
- Tabulates progress against time, which is what you need when matching an animation to something else on the page.
- Runs entirely in your browser.
Limits
- A cubic bezier cannot bounce or oscillate. Anything springy needs
linear()with sampled points, keyframes, or a spring implementation. - Curves that leave the 0–1 range are unusable on properties that cannot pass their target — colour, width and height among them.
- The x values are clamped to 0 and 1 because time cannot run backwards, which CSS also enforces.
- A curve judged on a moving box may feel different applied to opacity, colour or a large layout change.
- There is no drag-the-handles editor here; the control points are typed as numbers.
Frequently asked questions
What do the four numbers mean?
They are two control points, (x1, y1) and (x2, y2). The curve always starts at (0,0) and ends at (1,1); x is elapsed time and y is progress. Pulling a control point up makes the animation move faster at that part of its duration, and pulling it right delays it.
Why can y go above 1 but x cannot?
Because y is progress and x is time. Overshooting the destination and coming back is a real motion; running time backwards is not, so CSS clamps x to the 0–1 range and leaves y alone.
Which easing should I use by default?
Something like ease-out for anything entering or responding to a click — it starts fast, so the interface feels immediate — and ease-in for things leaving. ease-in-out suits movement between two on-screen positions. linear is right for spinners and progress bars, and wrong for almost everything else.
How do I make a bouncy spring?
Not with a cubic bezier — two control points cannot oscillate. Use linear() with sampled values, keyframes with several stops, or a spring animation from a motion library. A single overshoot is as close as a bezier gets, and for most interface work it is enough.
Related tools
- CSS Animation Generator — Build a keyframe animation and watch it run
- Box Shadow Generator — Design a shadow, stack its layers and copy the CSS
- Gradient Generator — Build linear, radial and conic CSS gradients
- Border Radius Generator — Round corners evenly, one by one, or into a blob
- Color Converter — Convert between hex, RGB, HSL, HWB, LAB, OKLCH and more
- Contrast Checker — WCAG contrast ratio for text and UI colours
More Colors & Design tools
- Color Converter — Convert between hex, RGB, HSL, HWB, LAB, OKLCH and more
- Contrast Checker — WCAG contrast ratio for text and UI colours
- Image Colour Picker — Pick a colour out of a picture and read it back
- Gradient Generator — Build linear, radial and conic CSS gradients
- Random Colour Generator — Random colours from a seed you can keep, in a range you choose
- Palette Generator — Harmonious colour schemes from a base colour
- Box Shadow Generator — Design a shadow, stack its layers and copy the CSS
- Border Radius Generator — Round corners evenly, one by one, or into a blob
- CSS Animation Generator — Build a keyframe animation and watch it run
- Color Scale Generator — Turn one colour into an even 50–950 shade scale for CSS, Tailwind or SCSS
- Color Mixer — Blend two colours in OKLCH, OKLab or sRGB and get the CSS color-mix() for it
- Color Name Finder — The nearest CSS colour names to any colour, and a plain-words description
- Color Blindness Simulator — See a palette as people with each colour-vision deficiency do, and find the pairs that clash
- Image Palette Extractor — Pull the dominant colours out of a picture, with how much of it each covers
- Type Scale Generator — A modular type scale, fixed or fluid with clamp(), ready as CSS variables
- Text Shadow Generator — Soft, glow, neon, outline and retro text shadows with a live preview
- Glassmorphism Generator — Frosted-glass panels with backdrop-filter, a fallback and a live preview
- Clip Path Generator — Cut elements into triangles, hexagons, stars, arrows or your own polygon
- CSS Filter Generator — Build a CSS filter by eye, or find the filter that turns a black icon into any colour
- Design Tokens Converter — Turn W3C or Style Dictionary tokens into CSS variables, SCSS, Tailwind or JS
- Web Font Previewer — Set your own text in a font file before you ship it