The animation-direction property sets whether an animation plays forward, backward, or turns around between plays. normal goes from the first keyframe to the last. reverse goes from the last back to the first. alternate switches direction on every play.
The turn only shows up when the animation repeats, so set animation-iteration-count to 2 or infinite. It applies to all elements, including ::before and ::after, and it is not inherited. Changing direction does not remove motion for someone who set prefers-reduced-motion.
Standard-track.
Not deprecated and not experimental. normal, reverse, alternate, and alternate-reverse have been widely available since 2015.
Keep the same steps.from is full opacity. to is a quarter.
Open backward.alternate-reverse plays the first (odd) cycle from the end toward the start.
The word starts dim. It fades up to full opacity on that first second.
Then go forward. The next (even) play fades back out. One play alone would look like reverse.
Edge Cases & Pitfalls
If the direction seems to do nothing, the animation probably plays only once.
once
One play hides alternate
The count starts at 1. The first alternate play runs forward, so it matches normal until a second play begins.
jump
normal jumps on every repeat
Each new play starts at the first keyframe. alternate is the value that turns around instead of snapping back.
easing
reverse also flips the timing curve
Steps run backward, and animation-timing-function flips with them. An ease-in curve acts like ease-out while the play is reversed.
order
The shorthand can wipe the direction
animation: 1s infinite fade sets this property back to normal. Write animation-direction after it, or add the keyword inside the shorthand.
list
One keyword per animation name
animation-direction: alternate, reverse follows the order of animation-name. Fewer keywords than names, and the list repeats.
Compatibility
Browser Support
animation-direction is a browser style property. Node.js, Deno, and Bun do not play it. The versions below are the unprefixed property, including all four keywords.
✓ Baseline · Widely available since 2015
animation-direction
Chrome 43+, Firefox 16+, Safari 9+, Edge 12+, Internet Explorer 10+. normal, reverse, alternate, and alternate-reverse share these versions.
97%all four keywords
Google Chrome43+
Full support
Mozilla Firefox16+
Full support
Apple Safari9+
Full support
Microsoft Edge12+
Full support
Opera30+
Full support
Samsung Internet4+
Full support
Internet Explorer10+
Full support
animation-directionWidely supported
Bottom line: Older Chrome, Safari, and Firefox also accepted a prefixed property. The four direction keywords shipped together with CSS animations.
Remember
Key Takeaways
Role: which way each play of an animation runs.
normal: the initial value. Forward, then a jump back to the start.
alternate: first play forward, next play backward. No jump.
Repeat: one play of alternate looks like normal.
One line: repeat the animation, then animation-direction decides whether the next play jumps or turns around.
Frequently Asked Questions
It sets which way each play runs. normal goes from the start keyframe to the end. reverse goes from the end back to the start. alternate and alternate-reverse switch direction on every play.
reverse runs backward every time, then jumps back to the end keyframe. alternate runs forward on the first play and backward on the next, so the animation turns around instead of jumping.
A single play of alternate runs forward, which matches normal. You need at least two plays, or infinite, before the second play runs backward. The odd and even count starts at one.
Yes. Steps run backward, and the easing flips too. An ease-in curve becomes ease-out while the play runs in reverse.
Yes. animation: 1s fade sets direction back to normal. Write animation-direction after the shorthand, or include the keyword in the shorthand, such as animation: 1s infinite alternate fade.
Chrome 43+, Firefox 16+, Safari 9+, Edge 12+, and Internet Explorer 10 support all four keywords. It is a browser style property, not a Node.js feature.