Direct answer: the 25 sites carry 641 animation declarations, 1,157 transitions and 1,132 @keyframes; 22 show motion and 20 use keyframes. Yet only seven sites include prefers-reduced-motion (38 blocks, all explicitly setting animation/transition to none/0) and 18 have none at all; another two use scroll-behavior:smooth. The seven supporting sites are E03, E06, E09, E14, E22, E23 and E24; the heaviest is E17 (217 transitions, 86 animations, 86 keyframes).

This study reads CSS declarations only; it does not render or execute scripts, so JS animations and Canvas are out of scope.

641
animations
1,157
transitions
1,132
keyframes
22
sites with motion
7
support reduced motion
18
without support

Method: inline styles plus the first three external CSS files

On 2026-11-09 between 10:41 and 10:45 we requested the HTML of the same 25 cached-200 homepages, read inline <style> blocks and the first three external stylesheets, stripped comments and counted animation:, animation-name:, transition:, @keyframes, prefers-reduced-motion and scroll-behavior:smooth. Each reduced-motion media block is brace-matched and checked for animation/transition set to none/0.

MeasureRuleBoundary
animationOccurrences of animation: and animation-name:Class usage not checked
transitionOccurrences of transition:Shorthand and longhand both count
keyframesCount of @keyframes namePrefixes may double count
Reduced motionOccurrences and media blocks with prefers-reduced-motionnone/0 in a block counts as disabling, coverage not verified
smoothscroll-behavior:smoothTrigger not checked

Result: motion is common, reduced motion is rare

MeasureCountSites
animation declarations64120
transition declarations1,15722
@keyframes1,13220
prefers-reduced-motion queries387
of which actually disable motion387
scroll-behavior:smooth22

Heaviest motion sites

SiteTransitionsAnimationsKeyframesReduced motion
E1721786860
E0314025997
E2213024986
E2310612946
E069910956
E258528300

The seven supporting sites are concentrated among newer templates, and when they do it they mean it: all 38 media blocks contain none/0. Conversely, E17 has 217 transitions and 86 animations but no reduced-motion rule at all; E25 keeps its CSS entirely in one inline <style> block (262.6 KB) and offers no support either.

What this means for acceptance

  1. Honour prefers-reduced-motion. Only seven of the 22 sites with motion support it; cover autoplay, large movement and looping animation at minimum.
  2. Cap transitions. 1,157 in total, 217 on E17 alone; keep interaction feedback and drop decorative transitions.
  3. Trim unused keyframes. 1,132, with about 98 each on E03 and E22; many may never be referenced.
  4. Make smooth scrolling follow the preference. Two sites use it; fall back to auto when the OS reduced-motion setting is on.
  5. Test with the OS setting. Turn on Reduce Motion in Windows or macOS, reload, and confirm animations and smooth scrolling stop. See the website development service.

Limits

  • CSS declarations only: classes may be unused, so the count is not the number of animations that actually play.
  • No JavaScript: Web Animations, Canvas and requestAnimationFrame are not counted.
  • Coverage not verified: none/0 in a block counts as disabling; whether every animation is covered needs a manual check.
  • Fetch boundary: E18 and E20 returned no CSS and are not counted as zero; E25 keeps all CSS inline.
  • 25-site pilot: the same equipment-company sample; no industry claim.

Data and reproduction

Anonymised data: equipment-homepage-motion-2026.csv (25 rows × 12 columns: CSS files and size, animation/transition/keyframes, reduced-motion queries and disabling blocks, smooth scrolling and time). The repository keeps docs/research/2026-11-homepage-motion.csv.

Parser: scripts/motion_probe.py; unit tests: scripts/test_content_motion_probe.py (9, offline). Run:

python -m unittest scripts.test_content_motion_probe

Related: the homepage focus-style recheck, the homepage blocking-resource pilot, the homepage HTML weight composition pilot, and the homepage design-token audit (11 sites use variables, none supports dark mode).

Sources and definitions

  1. Sample: the 25 study-4 homepages cached as 200.
  2. Fetch: 2026-11-09 10:41–10:45 Asia/Shanghai, serial, 0.5 s apart, 15-second timeout.
  3. Styles: inline <style> plus the first three external stylesheets; comments stripped before counting.
  4. Reduced motion: brace-matched media blocks; animation/transition set to none/0 counts as disabling.

Frequently asked questions

Is missing prefers-reduced-motion always a defect?

Not necessarily. Low-motion sites may not need it; but 22 sites in this sample have motion and 15 of them offer no reduced-motion support, with risk concentrated in autoplay, large movement and looping animation.

Do declaration counts equal actual animations?

No. This study counts CSS declarations and @keyframes; many classes may be unused, and what actually plays depends on the HTML and scripts.

Why count the seven sites' 38 blocks as disabling?

Each block contains animation or transition with none/0, so the style layer explicitly turns motion off; whether it covers every animation still needs a manual check.

Why call out smooth scrolling?

It carries a clear vestibular risk and should also be disabled when the OS reduced-motion setting is on; only two sites use it here.

Why are JS animations excluded?

This study reads CSS only. Web Animations, Canvas and requestAnimationFrame need a runtime check, which is a separate study.

Can the data be re-checked?

Yes. The public CSV has 25 rows by 12 columns, and scripts/motion_probe.py has 9 offline unit tests.

About the author

Lingyi Information Official (delivery team) works on requirements, proposals and acceptance for corporate websites, brand and smart-manufacturing projects. This article counts CSS motion declarations and reduced-motion media blocks; it does not render or execute scripts. Twenty-two sites showed motion, and the sample is a pilot.

Motion should be optional

Animation and smooth scrolling can cause discomfort; when the OS Reduce Motion setting is on, the page should settle down.

Request a recheck plan