shadcn.io is not affiliated with official shadcn/ui
Dual Row Marquee Logos Block for React Aria
Two rows of customer wordmarks for a camera-security service, scrolling in opposite directions at one calm speed under a centred header, with a button that pauses both.
Installation
Overview
A two-row logo marquee for React with React Aria. Under a centred header, sixteen customer wordmarks scroll in two rows, the first one way and the second the other, at the same calm speed and fading out at both ends. A small button at the end of the header pauses both rows. The rows share one band: its top rule and a hairline between the rows meet the page rails at + marks, and the second row ends the block so the next block's top rule closes it. Each wordmark is an icon and a name in its own lettering, muted until hovered. It's built from Marquee, Button and Guides, with CSS for the entrance and your theme's tokens for every colour. For a landing page that wants to look busy with customers without a wall of logos.
FAQ
How do I change the customers?
Edit FIRST_ROW and SECOND_ROW at the top of the file: each entry is a Lucide icon, a name, a lettering (the name's type classes) and a mark (inline, badge, ring or trailing, where the icon sits). Keep eight or more per row: the rows fill the width on their own, but a shorter row would show the same logo twice at once. Neighbours should differ in lettering and mark.
How do I change the speed?
Change SPEED (pixels a second, 28 by default); both rows read it. Give a row its own number if you want them to drift apart, and flip a row's direction with its reverse prop.
How does it stop?
Four ways: the pause button in the header (a toggle with aria-pressed that stops both rows), hovering a row, moving keyboard focus into a row, and the visitor's reduced-motion setting. With reduced motion both rows stop and become rows you can scroll by hand, the looping copies are removed, and the pause button is hidden because there is nothing left to pause.
How is it marked up for screen readers?
Each row is a region named "Customer logos, first row" or "second row". The first copy is the real content: each wordmark has the customer's name as text and a decorative icon. The repeated copies that make the loop are hidden from assistive technology and can't be focused. The header's h2 is the block's only heading.