Marquee

An infinite, seamless scroller for logos, testimonials and feeds. Eases to a stop on hover.

Motion

Trusted by teams at

NorthwindAcmeGlobexInitechUmbrellaHooliStarkWayneTyrellSoylent

Playground

Tweak the props, the preview and the code follow.

NorthwindAcmeGlobexInitechHooliUmbrella
Props
40
import { Marquee } from "@/components/ui/marquee"

<Marquee>
  <span>Northwind</span>
  <span>Acme</span>
  …
</Marquee>

Installation

npx @plumsydev/plum-ui add marquee

Usage

import { Marquee } from "@/components/ui/marquee"
<Marquee speed={40} className="[--gap:3rem]">
  <span>Acme</span>
  <span>Globex</span>
</Marquee>

Examples

Opposite rows

Two rows with reverse on the second.

“We replaced three internal libraries in a week.”
LM
Léa Martin
Design lead, Northwind
“The motion feels considered. Nothing is there for show.”
SO
Sam Okafor
Staff engineer, Globex
“Our onboarding finally feels like the rest of the product.”
MC
Mia Chen
Founder, Lumen
“Copy, paste, tweak. No package fighting back.”
TR
Tom Reyes
Frontend, Initech
“Users noticed the polish before we told them about it.”
AR
Ava Rossi
PM, Hooli
“Accessible by default saved us an audit cycle.”
NK
Noah Kim
CTO, Tyrell

Hover a row, it eases to a stop.

Vertical

vertical with a fixed height for a ticker-style feed.

Changelog
NewDock component with magnification
FixCheckbox draws its check again
PerfMarquee now runs on the compositor
NewSpotlight groups light up together
FixToasts respect reduced motion

API Reference

Marquee

Extends div. Set the spacing with [--gap:…].

PropTypeDefault
speed

Speed in px per second, independent of content length.

number40
reverse

Scroll the other way.

booleanfalse
vertical

Scroll vertically. Give the marquee a height.

booleanfalse
pauseOnHover

Smoothly decelerate to a stop while hovered.

booleantrue
fade

Fade the edges with a mask.

booleantrue
repeat

Copies of the content. Raise it if the content is narrower than the container.

number4

Notes

  • Runs on the Web Animations API, so it stays on the compositor and never re-renders React.
  • With reduced motion it becomes a regular scrollable row.