Skip to content
Cuelark UI
MotionAnimated

Marquee

Seamless infinite scrolling loop that eases to a stop on hover.

Marquee loops content endlessly: logo walls, testimonials, tickers. GSAP drives a single track with two copies for a seamless loop, and hover eases it to a stop instead of freezing. With motion off it becomes a scrollable row.

Preview

React 19Tailwind CSS v4Radix UIGSAPTypeScriptshadcn/uiTanStackViteCloudflare
React 19Tailwind CSS v4Radix UIGSAPTypeScriptshadcn/uiTanStackViteCloudflare

Installation

pnpm dlx shadcn@latest add https://ui.cuelark.com/r/marquee.json

The CLI also installs the Cuelark theme tokens, the GSAP motion layer. With the @cuelark namespace configured, use @cuelark/marquee.

Builds on: motion

Usage

import { Marquee } from "@/components/ui/marquee";

<Marquee speed={40}>{logos}</Marquee>

Motion

How it moves

A repeating GSAP tween; hover tweens its timeScale to 0 and back, so it decelerates smoothly.

Scale it with --cl-motion (0 off, 1 default, 1.5 expressive) on any ancestor. Reduced-motion preferences always switch it off.

API reference

Marquee

PropTypeDefaultDescription
speednumber40Pixels per second.
reversebooleanfalseDirection.
pauseOnHoverbooleantrueEase to a stop on hover.
fadebooleantrueFade the edges.
gapstring"2.5rem"Gap between items.

Accessibility

  • The duplicate copy is aria-hidden.
  • Reduced motion stops the loop and allows manual scrolling.

FAQ

Also searched as: react marquee · infinite scroll animation · logo carousel · scrolling text · logo marquee