By · Updated

CSS Keyframe Timeline Editor

Type Keyframe Stops as Plain Text Lines, Preview Against a Timeline, Copy @keyframes

No ratings yet

OneTask is free, with no sign-up, and built by one person.
If this tool saved you time, a coffee helps keep new ones coming.

How the Keyframe Timeline works

This CSS keyframe timeline editor turns a list of stops into an animation. Describe each keyframe stop on its own line, using a percentage followed by the values you want at that moment, and the box replays the animation every time you change something. A timeline under the preview marks where each stop sits and a playhead runs along it in step with the motion, so you can see which part of the curve is responsible for what. Copy the @keyframes block and shorthand when you are happy.

CSS keyframe timeline editor: writing the stops

Most keyframe generators give you two or three fixed stops and a handful of sliders, which is fine for a fade or a pulse but not for anything with a settle, a bounce or a hold. This editor takes a plain text list instead: each line starts with a percentage (or from / to) and is followed by any of x, y, scale, rotate, opacity and blur as key=value pairs. Lines are sorted by percentage before export, so you can add a stop in the middle without reordering. Stops that omit a property simply do not mention it, and the browser interpolates it between the nearest stops that do, exactly as it would in hand-written CSS.

x and y are turned into a single translate(), and scale and rotate are appended to the same transform, in that order. Because every stop writes the whole transform, there is no risk of one stop's rotate cancelling another's translate; if you want a property to stay put across a stop, repeat its value on that line. opacity and blur are written as separate declarations and can be animated on their own.

The timeline shows each stop as a tick at its percentage of the total duration. The playhead moves linearly so it represents elapsed time, not eased progress; when the box appears to hang around the 60 to 80 percent region in the default example, that is the easing curve slowing the motion between those two ticks, not the stops themselves. Switching Easing to Linear makes the two agree.

Repeat and Direction feed the shorthand directly. Alternate is useful for idle loops because the animation plays back to its start instead of jumping, which means the first and last stops do not need to match. Fill mode both keeps the first stop's values during any delay and the last stop's values afterwards; use none if the element has its own resting style that the animation should return to.

The exported CSS targets a .box class purely as a placeholder. Copy the @keyframes block and the animation: line onto whatever element you are animating; the size and colour rules are only there so the snippet runs as-is.

FAQ

Why does the box pause where there is no keyframe?

The easing curve slows the motion between two stops; the playhead runs on elapsed time, not eased progress. Switch Easing to Linear and the box will track the playhead exactly.

Can I animate colour or size?

Not in this editor, which covers transform, opacity and blur. Copy the exported @keyframes and add background or width lines to the stops by hand; the browser interpolates them the same way.

Why did my rotation disappear at one stop?

Every stop writes the full transform, so a stop that omits rotate resets it to 0 at that point. Repeat the value on any line where the property should hold still.

Do the stops have to be in order?

No. Lines are sorted by percentage before export, so you can add a stop at 45% at the bottom of the list and it lands in the right place.

See also: all Shadows & Motion tools, Layout & Spacing, Shapes & SVG, UI Components, Forms & Inputs, Colour.

Related tools