Skip to content

No.415 · Text Animations· New

Hover Outline Text

Big hairline lettering that fills with ink word by word as you point at it. The first time it scrolls into view, the words fill and clear once in order, so you know it responds.

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 two-line headline ('Quiet tools / for loud ideas'), each word a span carrying its text in data-text. A filled copy in ::after is clipped to inset(0 100% 0 0) and wipes open to the right on hover over 0.5s (every third word fills in the accent). The first time it scrolls into view, the words fill and clear once in sequence, 110ms apart (1.6s each: wipe in, hold, wipe out to the right). 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. Show it under a small uppercase hint ('Point at a word') on the page colour. Selected variant — Light (light): Palette for this theme (Light): --otxt-accent #ff4d1c; --otxt-ink #111214; --otxt-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: Point at a word to fill it. The text is always real and readable. Motion: Clip-path wipes of 0.5s, and a one-off staggered intro. Reduced motion removes the intro and makes the fill instant. Accessibility: One real heading; the filled copies are CSS-generated duplicates of visible text, so a screen reader reads it once. Responsive behavior: Type scales with the container (cqi) and wraps at word boundaries. Touch: The words fill once on view; nothing depends on hover. 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
Point at a word to fill it. The text is always real and readable.
Motion
Clip-path wipes of 0.5s, and a one-off staggered intro. Reduced motion removes the intro and makes the fill instant.
Accessibility
One real heading; the filled copies are CSS-generated duplicates of visible text, so a screen reader reads it once.
Responsive
Type scales with the container (cqi) and wraps at word boundaries.
On touch
The words fill once on view; nothing depends on hover.

Featured

425 components