Build faster with Premium Chakra UI Components 💎

Learn more
Skip to Content
DocsShowcaseBlogGuides
Sponsor

Marquee

Create a continuous scrolling display of logos, images, or text horizontally or vertically.

SourceStorybookRecipeArk
AI TipWant to skip the docs? Use the MCP Server

Usage

import { Marquee } from "@chakra-ui/react"
<Marquee.Root>
  <Marquee.Viewport>
    <Marquee.Content>
      <Marquee.Item />
    </Marquee.Content>
  </Marquee.Viewport>
</Marquee.Root>

Examples

Reversed

Use the reverse prop on the Marquee.Root component to reverse the direction of the marquee.

Vertical Animation

To animate content along the Y axis, use the side prop and set it to bottom.

Speed

Use the speed prop to control the animation speed in pixels per second.

Slow (25px/s)
Normal (50px/s)
Fast (100px/s)

Pause On Interaction

Use the pauseOnInteraction prop to pause the animation when the user hovers or focuses the marquee.

Store

Use the Marquee.RootProvider and useMarquee hook to provide the marquee instance to the component and control the animation state programmatically.

Finite Loops

To loop the marquee a finite number of times, set the loopCount prop on Marquee.Root. Alternatively, use the onLoopComplete and onComplete callbacks to track the number of completed loops or when the animation fully finishes.

<Marquee.Root
  loopCount={3}
  onLoopComplete={() => {
    /* handle loop completion */
  }}
  onComplete={() => {
    /* handle animation end */
  }}
>
  {/* Marquee.Item elements */}
</Marquee.Root>

Loop completed: 0 times

Animation completed: 0 times

Edge Gradient

Render the Marquee.Edge component to apply an edge fade.

Multiple

Here's an example of how to render alternating marquee components.

Diagonal

Here's an example of how to animate content diagonally using the marquee component.

Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026
Chakra Conf 2026

News Ticker

Here's an example of how to implement a news ticker with the marquee component.

LATEST NEWS
Bitcoin hits all-time high
New React version released
SpaceX successfully lands rocket
Global markets rally today
AI regulation talks begin in EU

Testimonials

You can display testimonials with the marquee component.

"This library saved me weeks of work. The components are accessible and easy to customize."

SC
Sarah Chen
Product Designer

"The animations are buttery smooth. I love how easy it is to implement the marquee."

MT
Michael Torres
Frontend Dev

"Scalable, reliable, and beautiful. Highly recommended for any modern web project."

EW
Emily Wang
CTO

"Our conversion rates increased by 15% after switching to this UI system."

DS
David Smith
Marketing Lead

"Documentation is top-notch. I was able to build my MVP in a single weekend."

JL
Jessica Lee
Indie Hacker

Props

PropDefaultType
autoFill false
boolean

Whether to automatically duplicate content to fill the container.

defaultPaused false
boolean

Whether the marquee is paused by default.

delay 0
number

The delay before the animation starts (in seconds).

loopCount 0
number

The number of times to loop the animation (0 = infinite).

pauseOnInteraction false
boolean

Whether to pause the marquee on user interaction (hover, focus).

reverse false
boolean

Whether to reverse the animation direction.

side 'start'
Side

The side/direction the marquee scrolls towards.

spacing 1rem
string

The spacing between marquee items.

speed 50
number

The speed of the marquee animation in pixels per second.

as
React.ElementType

The underlying element to render.

asChild
boolean

Use the provided child element as the default rendered element, combining their props and behavior.

For more details, read our Composition guide.
unstyled
boolean

Whether to remove the component's style.

ids
Partial<{ root: string; viewport: string; content: (index: number) => string }>

The ids of the elements in the marquee. Useful for composition.

onComplete
() => void

Function called when the marquee completes all loops and stops. Only fires for finite loops (loopCount > 0).

onLoopComplete
() => void

Function called when the marquee completes one loop iteration.

onPauseChange
(details: PauseStatusDetails) => void

Function called when the pause status changes.

paused
boolean

Whether the marquee is paused.

translations
IntlTranslations

The localized messages to use.