How to Make Scrolling Text More Accessible

Moving text can be useful for a short status, decorative banner, or credits sequence, but motion can also make content harder to read. A good implementation treats animation as presentation, not as the only way to access information.

Respect reduced-motion preferences

Use the prefers-reduced-motion media query to stop continuous animation. The fallback should reveal the complete message rather than hiding it off-screen.

@media (prefers-reduced-motion: reduce) {
  .scrolling-message {
    animation: none !important;
    transform: none !important;
    white-space: normal;
  }
}

Give people control

Hover-to-pause helps mouse users, but it is not enough. Focus should also pause a component that contains links, and informational tickers should offer a visible Pause button. After a pause, the button label should change to Resume and preserve keyboard focus.

Do not duplicate announcements

Seamless loops often duplicate the same text in the DOM. Mark the visual duplicate aria-hidden="true" and expose one understandable accessible label or one real content copy.

Avoid urgent live regions for normal animation

A ticker should not repeatedly announce every visual movement. If new information is injected dynamically, announce only the actual update and choose an appropriate live-region politeness level.

Keep text readable

Long text needs more time. Avoid tiny fonts, low contrast, excessive glow, or motion so fast that a full sentence cannot be read in one pass. Important instructions, errors, prices, or deadlines should also appear in a static location.

Every scrolling-text code generator on this site must include a reduced-motion fallback by default. The main generator also includes pause-on-hover/focus, while the News Ticker Generator adds an explicit pause control.

More guides