staggered-word-reveal

Implements word-by-word text reveal animations triggered by IntersectionObserver on viewport entry.

Updated May 5, 2026
One-click install
npx skills add https://github.com/josippapez/ai-setup --skill staggered-word-reveal-josippapez
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: staggered-word-reveal
Source: https://github.com/josippapez/ai-setup/tree/main/claude/plugins/better-design/skills/staggered-word-reveal
Command: npx skills add https://github.com/josippapez/ai-setup --skill staggered-word-reveal-josippapez

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Adding polished, editorial-style text animations to headlines and hero copy usually requires heavy animation libraries or custom code that breaks accessibility, hides content without JavaScript, or replays awkwardly on scroll. ## Core Features & Use Cases - Word Splitting with Accessibility: Splits text into word spans while preserving spaces, exposing the original sentence to screen readers via aria-label, and avoiding innerHTML. - Viewport-Triggered Reveal: Uses IntersectionObserver with a 20% threshold and lower viewport bias to trigger the staggered fade-and-rise animation exactly once. - Reduced-Motion and No-JS Fallbacks: Keeps text fully visible when JavaScript is disabled or when the user prefers reduced motion. - Use Case: A portfolio site hero headline like "Build interfaces that feel calm, cinematic, and alive" reveals word by word with a 0.07s stagger as the visitor scrolls it into view, then never replays. ## Quick Start Add a staggered word-by-word reveal animation to my hero headline using IntersectionObserver with the default 0.8s duration and 0.07s stagger.

Frequently Asked Questions about staggered-word-reveal

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a word-by-word text reveal animation on scroll?

Split the element's text into word spans with a CSS transition-delay based on each word's index, then use IntersectionObserver to add a visible class when the element is 20% in view. Each word fades from opacity 0 and translateY(20px) with a 0.07s stagger.

How to make scroll text animations accessible for screen readers?

Set the original full sentence as an aria-label on the container and mark each split word span as aria-hidden. This lets screen readers announce the complete sentence once instead of fragmented words.

Can I use this reveal animation with React, Vue, or Framer Motion?

Yes. Run the splitter after component mount and clean up observer instances on route changes. For Framer Motion, use y: 20, opacity: 0, duration 0.8, ease [0.16, 1, 0.3, 1], stagger 0.06-0.08, and once: true.

Does the animation work when JavaScript is disabled or reduced motion is on?

Yes. Text stays visible by default and is only hidden after JavaScript adds a js class to the html element. A prefers-reduced-motion media query disables the transition and shows static readable text immediately.

When should I avoid word-by-word staggered reveals?

Avoid them on long paragraphs, text containing links or buttons, or any inline markup that splitting would break. The technique suits short headlines, subheads, labels, and quotes where a calm editorial feel is wanted.