Skip to content
Animatio

What this library cannot do

Publishing the limits is a differentiator, not a weakness. Every competitor hides them and users find out in production.

WantWhy CSS cannotWhat Animatio ships
Cursor-following spotlight, magnetic pullCSS has no access to pointer coordinatesan-spotlight-static and an-hover-tilt-grid (genuinely CSS-only, via hover zones), plus a 6-line feed that sets --an-mx/--an-my — the effect stays in our CSS
Text scrambleCSS cannot author text contentan-text-flip-chars — each glyph flips in place to reveal the final one
Per-character animation without spansThere is no ::nth-letter()Split snippets + --an-i for the stagger
Velocity-reactive physics, collisionsNo runtime state in CSSlinear() spring curves, which cover most of the feel
Particles, canvas, WebGLA different rendering modelNothing. Use three.js, and we will say so.
Scroll "once" in Firefox todayCSS cannot latch a scrubbed timelineThe tier ladder, plus an optional 12-line enhancer
SVG refraction in Safariwebkit #245510an-glass plus an opt-in refract path

The once problem, in detail

animation-timeline: view() binds progress to scroll position. So:

  • Back-and-forth is free. It is the default, not a feature.
  • Play-once is the hard case. A scrubbed timeline cannot be latched in pure CSS — confirmed by the spec author.

Animatio exposes this as two class families rather than pretending one API does both: an-scrub-* follows the scrollbar, an-reveal fires on entry. an-reveal then resolves through three tiers, and the docs tell you which one you are on.

If you need true once in Firefox today, animatio/once.js is twelve lines of IntersectionObserver. It is never referenced by the CSS and nothing requires it. Honest framing beats a "CSS ONLY" claim that quietly is not.

Markup helpers, not CSS

Some effects need extra elements. They are marked ◑ throughout, and each ships a copy-paste snippet:

  • an-glitch needs data-text duplicated for its two pseudo-layers
  • an-text-split-* needs one span per character
  • an-flip-card needs a front/back pair
  • an-marquee needs the track duplicated for a seamless loop
  • an-hover-tilt-grid needs nine hover zones

That is a markup helper, not CSS-only, and calling it anything else would be a lie you would discover at implementation time.

MIT. Parity module derived from animate.css 4.1.1, © 2020 Animate.css.