VibeUI
ComponentsDocs
VibeUI

Components with taste, that you own. Copy the source, retint the tokens, keep every line.

Library

  • All components
  • Signature pieces
  • Text effects
  • Footers

Docs

  • Introduction
  • Installation
  • Theming
  • CLI

Project

  • GitHub
  • Agents and MCP
  • Issues
  • MIT license
© 2026 VibeUI · MIT licensed
  1. Components
  2. Signature
  3. Marquee

Marquee

Infinite horizontal ticker with edge fade. Pauses on hover.

SignatureServer-safe
ButtonDialogDockTabsCommandCarouselToastCalendarSliderTable
ButtonDialogDockTabsCommandCarouselToastCalendarSliderTable
ButtonDialogDockTabsCommandCarouselToastCalendarSliderTable
ButtonDialogDockTabsCommandCarouselToastCalendarSliderTable

Install

bash
npx @agents-npm-packages/vibeui add marquee --dir ./src/components/ui

Import

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

API

Generated from the component's TypeScript types, so it always matches the source. * marks a required prop.

<Marquee>

PropTypeDefaultDescription
children*ReactNode—Content rendered inside the component.
classNamestring—Extra classes, merged with the component's own.
pauseOnHoverbooleantruePauses the animation while hovered.
reversebooleanfalseRuns the animation in the opposite direction.
durationnumber40Seconds for one full loop.

Source

src/components/ui/marquee.tsx
import type { CSSProperties, ReactNode } from "react";
import { cn } from "@/lib/utils";

/** Infinite horizontal ticker with edge fade. Pauses on hover. */
export function Marquee({
  children,
  className,
  pauseOnHover = true,
  reverse = false,
  duration = 40,
}: {
  children: ReactNode;
  className?: string;
  pauseOnHover?: boolean;
  reverse?: boolean;
  /** Seconds for one full loop. */
  duration?: number;
}) {
  return (
    <div
      className={cn(
        "group/marquee relative w-full overflow-hidden py-3",
        "mask-[linear-gradient(to_right,transparent,black_10%,black_90%,transparent)]",
        className,
      )}
    >
      <div
        className={cn(
          "flex w-max animate-marquee",
          pauseOnHover && "group-hover/marquee:[animation-play-state:paused]",
        )}
        style={
          {
            animationDuration: `${duration}s`,
            animationDirection: reverse ? "reverse" : "normal",
          } as CSSProperties
        }
      >
        <div className="flex shrink-0 items-center gap-10 pr-10">{children}</div>
        <div className="flex shrink-0 items-center gap-10 pr-10" aria-hidden>
          {children}
        </div>
      </div>
    </div>
  );
}

Exports Marquee. Peer dependencies: clsx, tailwind-merge.

PreviousMagnet TabsNextMasonry