What this generates
CSS @keyframes plus the matching animation shorthand, ready to drop into any stylesheet. Pick a preset, tune the parameters, watch the live preview, copy the result.
Ten presets cover the most common cases:
- fadeIn: opacity 0 → 1
- slideInLeft / Right / Up: translate from off-screen + fade in
- pulse: gentle scale pulse (good for attention-getting buttons)
- shake: horizontal shake (form errors, denial)
- bounce: vertical bounce
- spin: 360° rotation (loading spinners)
- wiggle: small tilt back and forth (notifications, hover effects)
- pop: scale up from 0 with a slight overshoot
Tunable parameters
- Duration: how long the animation runs, in seconds (0.1-10)
- Delay: wait this long before starting (useful for staggered animations)
- Easing: built-in CSS easing curves plus a “spring” cubic-bezier
- Iteration: finite count (1, 2, 3…) or infinite
- Direction: normal, reverse, alternate, alternate-reverse
- Restart: button to replay the animation from scratch when you change params
The live preview re-renders each time you change a parameter, so you can iterate fast.
When you’d use each preset
- fadeIn / slide variants: page-load entrance, modal appear, card mount
- pulse: highlighting a CTA, notification badges
- shake: form validation error, denial gesture
- bounce: success message, attention to a notification
- spin: loading state, refresh icon
- wiggle: hover effect on an icon, soft attention prompt
- pop: success badge appearing, modal “in”
Performance notes
For animations that run continuously (loading spinners, infinite pulses), you want them to be GPU-accelerated. The presets all use transform and opacity, these are the two properties browsers can animate without re-laying out the page. Animations on width, height, top, left are slow and should be avoided.
If you need smoothness:
- Use
will-change: transformon heavy-animated elements (sparingly, overuse defeats the purpose) - Keep animations short (under 0.5s for UI feedback, longer is fine for ambient)
- Test on mobile, desktop performance is misleading
Custom keyframes
The generator builds simple two-stop or multi-stop keyframes. For complex sequences (multiple intermediate stops, multiple properties animated together), you’ll need to hand-edit the output. The generated CSS is straightforward, find the @keyframes block and add stops.
Frequently asked questions
Why does my animation look stuttery? Likely you’re animating layout-affecting properties (width, height, padding) instead of transform. Switch to transform-based animations. Browsers can hardware-accelerate transforms but not layout properties.
Can I chain multiple animations?
CSS supports multiple animations via comma-separated values: animation: fadeIn 0.3s, pulse 2s infinite. The generator builds one at a time, for chains, generate each separately and combine manually.
Will it work in older browsers? CSS animations are supported in IE10+, all modern browsers. No vendor prefixes needed in 2026.
How do I trigger the animation on hover or scroll?
The generated CSS applies the animation immediately. For trigger-based animations, wrap the rule in :hover, or use IntersectionObserver to add a class on scroll-into-view. Both are out of scope for this generator.