Announcement Marquee Navbar

About this block

Announcement Marquee NavbarPRO

Navbar with a dark scrolling announcement bar on top — looping links that pause on hover and fade at the edges — over a clean wordmark row with a pill CTA.

Navbar topped with a dark, continuously scrolling announcement bar — a looping row of links that pauses on hover and fades out at both edges — sitting above a clean wordmark row with quiet links and a pill CTA.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/navbar62?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/navbar62?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/navbar62.tsx, the button12 component it uses for its CTA, and its dependencies.

Quick start

The installed file exports navbar62Demo alongside the block: the exact props behind the preview above. Spread it to get a working navbar in one line.

tsx
import { Navbar62, navbar62Demo } from "@/components/beste/block/navbar62";

export default function Layout() {
  return <Navbar62 {...navbar62Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Navbar62 } from "@/components/beste/block/navbar62";

export default function Layout() {
  return (
    <Navbar62
      brand="Northwind"
      announcements={[
        { label: "We are booking new partners for autumn", href: "/contact" },
        { label: "The Northwind rebrand is live", href: "/journal/rebrand" },
      ]}
      links={[
        { label: "Work", href: "/work" },
        { label: "Studio", href: "/studio" },
      ]}
      button={{ label: "Start a project", href: "/contact" }}
    />
  );
}

Props

PropTypeDefaultDescription
brandstring–Wordmark text; omitted entirely when not set
announcementsAnnouncement[][]Looping links in the marquee bar; the bar is hidden entirely when empty
linksNavLink[][]Desktop and mobile nav links in the row beneath the marquee
button{ label: string; href: string }–Pill CTA next to the links; hidden entirely when not set
classNamestring–Extra classes for the outer <header>
ts
type Announcement = { label: string; href: string };
type NavLink = { label: string; href: string };

Behavior notes

  • The marquee duplicates the announcements array once ([...announcements, ...announcements]) and animates it with a CSS translateX(0) to translateX(-50%) keyframe running on a 36s linear infinite loop, which is what makes the loop appear seamless.
  • Hovering the marquee track pauses the animation via animation-play-state: paused on group-hover.
  • Both edges of the marquee have a gradient fade (from-foreground to-transparent) blending the scrolling track into the dark bar.
  • The marquee bar uses fixed bg-foreground/text-background tones regardless of theme, it does not adapt like the rest of the header.
  • The mobile menu toggle is a plain useState boolean with no outside-click or Escape handling; there is no mega-menu behavior on this navbar.

More Navigation blocks

View all Navigation
PRO

navbar79

Announcement Navbar

PRO

navbar73

Announcement Bar Navbar

PRO

navbar43

Dark Announcement Navbar

Get Pro access