The animation-play-state property sets whether an animation is running or paused. Pausing freezes the current frame. Setting running again continues from that frame. It does not start over.
The initial value is running. The property is not inherited, and it is not animatable: the switch happens in one step. It applies to any element, including ::before and ::after. You still need an animation-name and a duration. This property only decides whether that animation's time moves.
Standard-track.
Not deprecated and not experimental. Baseline widely available since September 2015. Current browsers use the unprefixed property.
Syntax
CSS Syntax
One keyword, or a comma-separated list with one keyword per animation name.
Two rules.slide changes transform. fade changes opacity.
List the names.animation-name: slide, fade runs both, in that order.
Pair the play states.paused, running pauses slide and lets fade continue. The box fades in place.
A single keyword would cover both.animation-play-state: paused repeats for every name, so both would freeze. Write one keyword per name when they should differ.
Edge Cases & Pitfalls
If pause seems to do nothing, or play seems to jump backward, check these.
frame
A box that starts paused sits on frame one
Time never advanced, so the first keyframe is the frozen frame. Let it run, then set paused, when you want a later frame.
reset
running does not restart
Resume continues from the paused frame. Changing animation-name, or removing the animation, starts it over. animation-name: none also drops the frozen styles.
short
The shorthand resets this property
animation: slide 2s infinite leaves out the play state, so it becomes running. Put paused in the shorthand, or set animation-play-state after it.
list
One paused pauses every animation
A shorter list repeats. With two names, paused freezes both. Use paused, running when only the first should stop. This is not animation-fill-mode. Fill mode holds styles outside the active time. Play state holds time while the animation is still active.
hover
Hover alone misses keyboard and touch
Pair :hover with :focus-visible and a focusable element. A looping animation can also be hard to read. prefers-reduced-motion is how a visitor asks for less motion.
Compatibility
Browser Support
animation-play-state is a browser animation property. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Since Sep 2015
animation-play-state
Unprefixed: Chrome 43+, Firefox 16+, Safari 9+, Edge 12+, Opera 30+. Internet Explorer 10+. Samsung Internet 4+.
98%Unprefixed support
Google Chrome43+ · 3+ with -webkit-
Full support
Mozilla Firefox16+ · 5+ with -moz-
Full support
Apple Safari9+ · 4+ with -webkit-
Full support
Microsoft Edge12+
Full support
Opera30+ · 15+ with -webkit-
Full support
Samsung Internet4+
Full support
Internet Explorer10+
Full support
animation-play-stateWidely supported
Bottom line: Safe unprefixed in current browsers. Safari 4–8, Chrome 3–42, and Firefox 5–15 needed a prefix on animation-play-state and on @keyframes. Internet Explorer 10 supports running and paused.
Remember
Key Takeaways
Role:running advances time. paused holds the current frame.
Resume:running continues from the paused frame. It does not restart.
Needs an animation: set a name and a duration above 0s. The default play state is running.
Lists: one keyword per name, in order. A shorter list repeats. The property is not inherited.
One line:animation-play-state pauses the clock on the current frame, and running starts that same clock again.
Frequently Asked Questions
It sets whether an animation's time is moving. running plays it. paused freezes it on the current frame.
The initial value is running. The property is not inherited, and it is not animatable.
No. A paused animation continues from the frame where it stopped. To start over, change animation-name or remove the animation and apply it again.
paused keeps the animation and holds the current frame. animation-name: none removes the animation, so the element returns to its normal styles.
Yes. List one play state per name, in the same order, such as paused, running. A single paused applies to every animation, because a shorter list repeats.
Unprefixed support is Chrome 43+, Firefox 16+, Safari 9+, Edge 12+, and Opera 30+. Internet Explorer 10 and Samsung Internet 4 also support it. It is a browser property. Node.js, Deno, and Bun do not apply it.