Compose @keyframes from 0% to 100% with opacity and transform (translate, rotate, scale), tune duration, delay, easing, and fill mode, then preview on a live box and copy full CSS. Runs entirely in your browser.
It writes a minimal two-frame @keyframes rule: 0% and 100%, with opacity and a composed transform (translateX/Y, rotate, scale). The
companion animation shorthand lists name, duration, timing function, delay, iteration count, direction, and fill mode — matching what you would hand-write for a simple entrance or looping motion.
Use the timing function dropdown for standard curves, pick Spring (overshoot) for a bouncy cubic-bezier, or choose Custom… and paste any valid
cubic-bezier() or steps() expression. The Replay button forces the preview to run again without changing values.
Unprefixed @keyframes is widely supported today. The optional -webkit- duplicate exists for older Safari/WebKit scenarios; skip it unless your analytics show those users.
No network calls are made when you adjust sliders or copy CSS.
forwards for a one-shot entrance).No. The keyframes string and preview are built in your browser; copying uses the Clipboard API locally when available.
Usually only for legacy support. Modern evergreen browsers use the standard @keyframes name. Enable the checkbox when you must target older WebKit builds.
For accessibility, reduce or disable decorative motion when the user enables “Reduce motion” in the OS. Wrap animations in @media (prefers-reduced-motion: reduce) overrides.
They are typically cheap to composite compared to layout-affecting properties like width or margin. Prefer transform/opacity for smooth 60fps motion.
This tool outputs @keyframes and animation. CSS transition is better when you only move between two states on hover or class toggles without named keyframes.
It controls whether the first/last keyframe styles stick before the animation starts or after it ends — important for animation-delay and one-shot entrances.
This UI is limited to 0% and 100%. Copy the output and insert extra percentage blocks (e.g. 50%) in your editor for bounces or multi-step paths.
Yes as a reference for timing and easing. You will still map values into your framework’s config or component APIs.
Check Iterations — use 1 for a single run. The Spin preset sets infinite on purpose for continuous rotation.