The 2025 TestParty Guide to WCAG 2.3.3 – Animation from Interactions (Level AAA)
Why did the animated button go to therapy? It couldn't stop bouncing back from every interaction—turns out, not everyone appreciates that kind of energy.
WCAG 2.3.3 Animation from Interactions requires that motion animation triggered by user interaction can be disabled, unless the animation is essential to the function or information being conveyed. This Level AAA criterion ensures that people with vestibular disorders, attention deficits, or motion sensitivity can use your site without triggering nausea, dizziness, or distraction.
Table of Contents
- What WCAG 2.3.3 Requires
- Why This Matters
- Quick Implementation Guide
- Common Mistakes to Avoid
- How to Test for WCAG 2.3.3
- How TestParty Helps
- FAQs
What WCAG 2.3.3 Requires
WCAG 2.3.3 mandates that any motion animation triggered by user interaction—clicking a button, hovering over a card, submitting a form—must be disableable by the user. The primary mechanism for this is respecting the prefers-reduced-motion media query, which users set at the operating system level.
Key points:
- Scope: Applies to animations triggered by interaction, not auto-playing animations (those fall under 2.2.2 Pause, Stop, Hide)
- Exceptions: Animation is allowed if it's essential to the functionality (e.g., a progress indicator showing file upload status) or the information being conveyed (e.g., a data visualization that requires motion to show change over time)
- Affected content: Transitions, transforms, parallax effects, scroll-triggered animations, hover effects, button state changes, modal entrances, toast notifications, loading spinners (when non-essential)
The criterion doesn't ban animation—it requires that users who need reduced motion get a static or simplified experience.
Why This Matters
For people with vestibular disorders, motion sensitivity, or certain cognitive disabilities, animated interfaces can cause physical symptoms: nausea, vertigo, headaches, and disorientation. Even subtle parallax scrolling or bouncing buttons can be debilitating.
Legal and compliance context:
WCAG 2.3.3 is Level AAA, so it's not required for baseline ADA Title III compliance (which typically references Level AA). However, it's increasingly expected in government contracts (Section 508 allows agencies to require AAA), healthcare, education, and organizations committed to inclusive design. The European Accessibility Act and EN 301 549 reference WCAG 2.1 Level AA as the floor, but many procurement processes and accessibility statements now include AAA criteria as best practice.
Business case:
Respecting prefers-reduced-motion is low-effort, high-impact. It improves usability for a broader audience (including older users and those with slower devices), reduces cognitive load, and signals that your brand takes accessibility seriously. It's also a progressive enhancement—users who enjoy animation still get it.
Quick Implementation Guide
The most robust approach is to use the prefers-reduced-motion CSS media query to conditionally apply animations.
1. Wrap animations in a media query:
/* Default: animation enabled */
.card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 16px rgba(0,0,0,0.2);
}
/* Reduced motion: disable or simplify */
@media (prefers-reduced-motion: reduce) {
.card {
transition: none;
}
.card:hover {
transform: none;
/* Keep functional change (shadow) but remove motion */
box-shadow: 0 2px 4px rgba(0,0,0,0.3);
}
}2. Use a CSS custom property for animation duration:
:root {
--animation-duration: 0.3s;
}
@media (prefers-reduced-motion: reduce) {
:root {
--animation-duration: 0.01ms; /* Near-instant */
}
}
.modal {
animation: fadeIn var(--animation-duration) ease;
}3. Respect the setting in JavaScript:
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (!prefersReducedMotion) {
element.classList.add('animate-in');
}4. Provide essential information without relying on motion:
If an animation conveys information (e.g., a progress bar filling), ensure the information is also available statically (e.g., "75% complete" text).
Relevant techniques:
- C39: Using the CSS
prefers-reduced-motionmedia query to prevent motion - SCR40: Using
prefers-reduced-motionin JavaScript to conditionally apply animations
Common Mistakes to Avoid
Applying reduced motion globally without testing: Some developers set * { animation: none !important; } under prefers-reduced-motion, which can break functional animations like loading spinners or progress indicators. Be surgical—disable decorative motion, preserve essential feedback.
Ignoring JavaScript-driven animations: CSS isn't the only culprit. Libraries like GSAP, Framer Motion, and Lottie need to respect prefers-reduced-motion too. Check library documentation for built-in support or wrap animation calls in a media query check.
Removing all visual feedback: Reduced motion doesn't mean no feedback. A button can still change color or opacity on hover—just skip the bounce, slide, or scale. Users need to know their interactions registered.
Assuming "reduced motion" means "no motion": The spec allows for subtle, non-distracting motion. A gentle fade (opacity change) is usually fine; a 360° spin is not. When in doubt, test with users or err on the side of simplicity.
How to Test for WCAG 2.3.3
Manual testing:
- Enable reduced motion in your OS:
- macOS: System Preferences > Accessibility > Display > Reduce motion
- Windows: Settings > Ease of Access > Display > Show animations
- iOS/Android: Accessibility settings > Reduce motion
- Interact with your site: Click buttons, open modals, hover over cards, submit forms. Verify that animations are disabled or significantly reduced.
- Check essential animations: Ensure progress indicators, loading states, and functional animations still work (or have static alternatives).
- Test with browser DevTools: In Chrome/Edge, open DevTools > Rendering > Emulate CSS media feature
prefers-reduced-motion: reduce.
Automated testing:
Automated tools can detect whether prefers-reduced-motion is implemented, but they can't judge whether an animation is "essential" or whether the reduced-motion experience is adequate. Tools like axe DevTools, Lighthouse, and Pa11y can flag missing media queries but won't catch every case.
What to check:
- Is
prefers-reduced-motionpresent in your CSS or JavaScript? - Are animations disabled or simplified when the setting is active?
- Do essential animations have static fallbacks or remain functional?
- Are third-party animation libraries configured to respect the setting?
How TestParty Helps
TestParty's AI-powered platform automates detection of WCAG 2.3.3 violations and guides teams toward compliant, user-friendly animation implementations.
What TestParty detects:
TestParty scans your CSS, JavaScript, and component libraries to identify:
- Missing `prefers-reduced-motion` media queries: Flags stylesheets and scripts that define animations (transitions, transforms, keyframes, JavaScript animation libraries) without corresponding reduced-motion overrides.
- Unguarded animation libraries: Detects use of GSAP, Framer Motion, Anime.js, Lottie, and other animation frameworks without
prefers-reduced-motionchecks. - Interaction-triggered motion: Analyzes event handlers (click, hover, focus) that trigger animations and verifies whether reduced-motion alternatives exist.
- CSS custom properties: Identifies animation-duration and timing variables that should be zeroed or minimized under
prefers-reduced-motion.
TestParty's DOM and source code analysis goes beyond surface-level checks—it traces animation definitions to their usage points and flags components that lack reduced-motion handling.
How TestParty suggests fixes:
For each violation, TestParty generates concrete, code-level remediation:
- Auto-generated CSS patches: TestParty suggests
@media (prefers-reduced-motion: reduce)blocks withtransition: none,animation: none, or simplified alternatives (e.g., keeping color changes but removing transforms). - JavaScript snippets: For script-driven animations, TestParty provides boilerplate
matchMediachecks and conditional logic to skip or simplify animations whenprefers-reduced-motionis active. - Library-specific guidance: If you're using Framer Motion, TestParty suggests adding
reduceprops; for GSAP, it recommends settingduration: 0conditionally. - Essential animation annotations: TestParty flags animations that may be essential (progress bars, loading indicators) and prompts developers to confirm whether they should be preserved or given static alternatives.
All suggestions are reviewed by your team or TestParty accessibility specialists before merging—ensuring fixes are contextually appropriate and don't break functionality.
Developer workflow integration:
TestParty integrates into your development lifecycle to catch animation issues early:
- CI/CD gates: Block pull requests that introduce new animations without
prefers-reduced-motionhandling, preventing regressions before they reach production. - IDE and PR annotations: Surface line-level warnings in VS Code, GitHub, or GitLab when a developer adds a CSS transition or JavaScript animation without a reduced-motion check.
- Real-time feedback: As developers write code, TestParty flags potential 2.3.3 violations and suggests fixes inline, reducing back-and-forth during code review.
This shift-left approach is especially valuable for animation-heavy sites (e-commerce product pages, marketing sites, SaaS dashboards) where new interactions are constantly being added.
Ongoing monitoring:
TestParty continuously monitors your site for 2.3.3 compliance:
- Regression detection: If a code change reintroduces animations without reduced-motion handling, TestParty alerts your team immediately.
- Third-party script tracking: Monitors external scripts (analytics, chat widgets, ad networks) that may inject animations without respecting user preferences.
- Audit-ready reports: Generates detailed reports showing which animations respect
prefers-reduced-motion, which are flagged as non-compliant, and which are marked as essential—useful for legal reviews, procurement, and accessibility statements.
By automating detection, suggesting precise fixes, and integrating into your workflow, TestParty makes WCAG 2.3.3 compliance scalable—even for large sites with hundreds of animated components.
Some TestParty features described in this article are currently under development. Visit TestParty.ai to learn more about our current capabilities and roadmap, or book a demo at TestParty.ai/book-a-demo to see TestParty in action.
Disclaimer: Some of this article was generated with Large Language Models (LLMs) and Artificial Intelligence (AI). There may be some errors and we advise you to consult with human professionals for detailed questions.
FAQs About WCAG 2.3.3
What is WCAG 2.3.3 in plain language?
WCAG 2.3.3 requires that animations triggered by user interactions (clicks, hovers, form submissions) can be disabled by the user, typically by respecting the prefers-reduced-motion setting in their operating system. This ensures people with motion sensitivity or vestibular disorders aren't made sick by your interface.
Is WCAG 2.3.3 required for ADA compliance?
No—WCAG 2.3.3 is Level AAA, and ADA Title III compliance typically references WCAG 2.1 Level AA as the standard. However, government contracts (Section 508), healthcare, education, and organizations pursuing best-practice accessibility often adopt AAA criteria. It's also increasingly expected in European markets under the European Accessibility Act.
Does "reduced motion" mean I have to remove all animations?
No. You can keep subtle, non-distracting animations like fades or color changes. The goal is to eliminate motion that causes vestibular symptoms—bouncing, sliding, scaling, parallax, spinning. Essential animations (like progress indicators) can remain if they're necessary for functionality, though static alternatives are ideal.
How do I enable reduced motion to test my site?
On macOS, go to System Preferences > Accessibility > Display > Reduce motion. On Windows, Settings > Ease of Access > Display > Show animations (turn off). On mobile, check Accessibility settings. You can also emulate it in Chrome DevTools: Rendering panel > Emulate CSS media feature prefers-reduced-motion: reduce.
Can I use JavaScript animation libraries and still comply with 2.3.3?
Yes, but you must configure them to respect prefers-reduced-motion. Most modern libraries (Framer Motion, GSAP, Anime.js) support this—check their documentation. Alternatively, wrap animation calls in a matchMedia check and skip or simplify animations when the user has reduced motion enabled.
Stay informed
Accessibility insights delivered
straight to your inbox.


Automate the software work for accessibility compliance, end-to-end.
Empowering businesses with seamless digital accessibility solutions—simple, inclusive, effective.
Book a Demo