Skip to content

No.206 · CTAs

Ticker Ring CTA

A closing banner with its small print — dates, seats left, where — running continuously round its border like a ticker; point at the button and the ticker slows so you can read it.

The prompt

Written for the variant you picked above: Night

Build a closing CTA as a dark band (34px wide, 30px outer radius) around a calm inner face. Measure the band with a ResizeObserver and build a rounded-rectangle path through the middle of the band; write the event's facts along it in 11px mono capitals ('NEXT INTAKE 12 JAN · 18 OF 24 SEATS LEFT · MUSCAT & ONLINE · …') with SVG textPath. Repeat the line enough times to fill one lap, fit it exactly with textLength and lengthAdjust=spacing, and render two copies one lap apart so the loop has no seam. Move both copies' startOffset in a requestAnimationFrame loop at 34px/s. While the primary or secondary action is hovered or focused, ease the speed down to 6px/s, light the ticker in the theme's hot colour and ring the inner face in it, so the small print becomes readable exactly when you're deciding. The face holds a mono eyebrow, a balanced headline, a muted paragraph, a pill button with a nudging arrow and an underlined secondary link. Under reduced motion the ticker stands still. Selected variant — Night: theme="night": band #1a181e with ticker text #b8b0a4 around a dark face #121015; the hot colour is warm amber #f0b37a.

Notes

Interaction
Point at or tab to an action and the ticker slows to a crawl and turns amber.
Motion
Ticker 34px/s, easing to 6px/s; colour 400ms.
Accessibility
The ticker is decorative (aria-hidden); its facts are also a visually hidden list that describes the primary link, so screen readers hear them once. Real heading and links. Reduced motion stops the ticker.
Responsive
The path is rebuilt on every resize, so the text always fits one lap; type and padding scale with clamp().
On touch
The ticker keeps running; tapping goes straight to the link.

Featured

301 components