Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Dual Marquee Monogram Row Logos Block for React

Two rows of two-letter monogram tiles for a textile-ERP maker, scrolling in opposite directions at a tight spacing with one button that pauses both.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

A dense, two-row customer marquee for React with Base UI. A start-aligned header says how many mills and dyeworks run on the product and carries a button that pauses the scrolling. Under it, a ruled band that ends the block holds two rows of small bordered tiles, each a customer's two-letter monogram in a mono face, packed close together and running in opposite directions. Every name is text for screen readers and the marquee's looping copies are hidden from them. It's built from Marquee, Button and Guides, with CSS for the entrance and your theme's tokens for every colour. For a page where the number of customers is the proof and wordmarks would take too much room.

FAQ

How do I change the customers?

Edit FIRST_ROW and SECOND_ROW at the top of the file: each entry is the initials drawn on the tile and the name that screen readers read. Keep the initials to two letters so the tiles stay square, and keep the rows about the same length so they take the same time to loop.

How do the rows stop?

Four ways: the pause button in the header (a toggle with aria-pressed that holds both rows at once), hovering a row, moving keyboard focus into one, and the reduced-motion setting, which stops both rows and leaves each as a row you can scroll by hand. The button is hidden under reduced motion because there is nothing left to pause.

How do the rows run in opposite directions?

The second Marquee has the reverse prop. Both take the same speed, so the rows drift apart evenly. Change speed on each, in pixels per second, for a slower or a lopsided pair.

How does a monogram tile name its customer?

The two letters are decorative, so they are hidden from assistive technology, and the customer's full name sits next to them as screen-reader-only text. The tiles aren't links or buttons, so they aren't tab stops, and the repeated copies the loop needs are hidden and inert.

Does it follow my theme?

Yes. The tiles are bg-card with a border, and the letters are muted-foreground and turn to the foreground on hover. The ends fade by a mask into whatever is behind the band. Nothing is a fixed colour and primary isn't used.

How does it fit on a phone?

Both rows keep scrolling at every width; the tiles don't change size. The header's button stays at the end of the heading row, and nothing scrolls sideways at 320 pixels except the rows themselves.

  • Pro

    Dual Row Marquee Logos

    Multi-row marquees

    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.

  • Pro

    Two rows of customers of a returns-management service in two kinds of logo: wordmarks on top and icon-only tiles on a tinted band below, moving in opposite directions.

  • Pro

    A strip for a children's reading app: a label row with a pause button, then one row of chips, each a square monogram badge and the name of a school.

  • Pro

    Triple Row Marquee Logos

    Multi-row marquees

    Three rows of customer wordmarks for a carbon-credit registry, alternating direction, with a larger, darker, quicker middle row between two smaller, quieter, slower ones.

  • Pro

    Sixteen square monogram tiles for a wildfire-risk mapping product in a narrow framed panel with + corner marks, each tile naming its customer on hover.

  • Pro

    Logo Marquee Hero

    Logos and social proof

    A compact hero for a support platform: copy and two calls to action, then two bands across the column: a strip of customer logos that scrolls on its own with a pause button, and a row of three stats.