CSS Animation Timeline Editor
Build CSS keyframe animations on a timeline and copy them as CSS, Tailwind or Motion code.
Keyframe
Drag keyframes to move them (they snap to 5%; hold Shift for 1%). With a keyframe focused: arrow keys nudge it, Delete removes it.
Code
.slide-in {
animation: slide-in-move-x 2s infinite, slide-in-rotate 2s infinite, slide-in-fade 2s infinite;
}
@keyframes slide-in-move-x {
0% {
translate: -120px 0;
animation-timing-function: ease-in-out;
}
100% {
translate: 120px 0;
}
}
@keyframes slide-in-rotate {
0%, 50% {
rotate: 0deg;
animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
100% {
rotate: 90deg;
}
}
@keyframes slide-in-fade {
0% {
opacity: 0.2;
animation-timing-function: ease-out;
}
40%, 100% {
opacity: 1;
}
}
CSS Animation Timeline Editor FAQ
How do I make a CSS keyframe animation?
Add keyframes at points on the timeline, set each value and easing, and press Play to check it. The CSS tab then shows the class with its animation list and one @keyframes per track; click Copy code and add the class to your element.
Why does each property get its own @keyframes?
So every track keeps its own timing. With one shared transform, a keyframe on one property resets the others at that moment and easing leaks between them. Separate animations on translate, rotate and scale avoid both problems.
What is the difference between ease, ease-in-out and cubic-bezier?
They are all cubic-bezier curves: ease and ease-in-out are named presets, and cubic-bezier(x1, y1, x2, y2) lets you set the curve yourself. Y values below 0 or above 1 make the motion overshoot, as in the Overshoot preset.
Can I use the animation in Tailwind CSS or Framer Motion?
Yes. The Tailwind tab gives keyframes and animation entries for tailwind.config.js, including the timing functions; use the animate- class it names. The Motion tab gives a motion.div with keyframe arrays and a full transition for every value.
Is my animation saved or uploaded?
It is saved in this browser's local storage so it is still there next time, and it is never uploaded. Clearing your browser's site data for this site removes it.