Skip to content

No.416 · Text Animations· New

Scroll Outline Text

Big hairline lettering on a sticky stage that fills with ink line by line as you scroll through the section, the last line landing in the accent colour.

The prompt

Copy this text

Automatic copying is unavailable. Copy the selected text using your device’s copy command.

Written for the variant you picked above: Light

Build big poster lettering drawn as hairlines (transparent text with a 1.5px -webkit-text-stroke in the ink colour). Inter 800, uppercase, -0.035em, 0.95 leading, sized from the container width. A section 2.2 viewports tall with a sticky full-height stage on the page colour, holding three lines ('Every pixel / earns its / place.') at up to 176px. Each line has a filled copy over its outline, clipped to its own fill (inset from the right by (1 − f) × 100%). Progress through the section fills the lines one after another with a 15% overlap, so the wipe flows from the end of one line into the next; the last line fills in the accent. Measure progress against the real scrolling element (the nearest scrolling ancestor, else the page). Palette (light / dark): ink #111214 / #f1f0ec, page #f4f3ef / #0b0b0c, accent signal orange #ff4d1c / acid lime #d4ff3a. In forced-colours mode drop the stroke and show plain text. Selected variant — Light (light): Palette for this theme (Light): --sotx-accent #ff4d1c; --sotx-ink #111214; --sotx-page #f4f3ef. Treat these as the root colour tokens, one value per role, and name them to suit your code. Select it with the theme option set to "light". Keep every dimension, spacing value, state and motion from the brief unchanged, and keep text at 4.5:1 contrast or better on these surfaces. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: Scroll through the section to fill the lines; scroll back to empty them. Motion: Scroll-linked, with no easing of its own. It still follows the scroll under reduced motion. Accessibility: One real heading with the outlined text; the filled copies are aria-hidden duplicates. Responsive behavior: Type scales with the container; lines never wrap. Touch: Touch scrolling drives it the same way. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.

Notes

Interaction
Scroll through the section to fill the lines; scroll back to empty them.
Motion
Scroll-linked, with no easing of its own. It still follows the scroll under reduced motion.
Accessibility
One real heading with the outlined text; the filled copies are aria-hidden duplicates.
Responsive
Type scales with the container; lines never wrap.
On touch
Touch scrolling drives it the same way.

Featured

425 components