Dual-Row Navbar

About this block

Dual-Row NavbarPRO

Two-tier navbar with slim top bar for announcements and contact info above main navigation. Perfect for e-commerce and service businesses displaying promotions and support details.

A two-tier navbar for e-commerce and service sites: a slim, muted top strip carries an announcement string plus a row of contact links (phone/mail icons, with labels hidden below sm), and a standard bordered navigation row sits underneath it with the logo, links rendered as ghost buttons, and CTAs. Both rows are wrapped together so the whole header stays sticky as one unit.

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/navbar38?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/navbar38.tsx and the shadcn/ui dependencies it needs (button).

Quick start

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

tsx
import { Navbar38, navbar38Demo } from "@/components/beste/block/navbar38";

export default function Layout() {
  return <Navbar38 {...navbar38Demo} />;
}

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

tsx
import { Navbar38 } from "@/components/beste/block/navbar38";

export default function Layout() {
  return (
    <Navbar38
      topBarText="Free shipping on orders over $50"
      topBarLinks={[
        { label: "+1 (555) 123-4567", href: "tel:+15551234567", icon: "phone" },
        { label: "hello@company.com", href: "mailto:hello@company.com", icon: "mail" },
      ]}
      logo={{ text: "DualNav", href: "/" }}
      navItems={[
        { label: "Home", href: "/" },
        { label: "Products", href: "/products" },
        { label: "Contact", href: "/contact" },
      ]}
      buttons={[
        { label: "Sign In", variant: "ghost", href: "/login" },
        { label: "Get Quote", variant: "default", href: "/quote" },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
topBarTextstringAnnouncement text on the left of the top strip; omit to leave that side empty
topBarLinksTopBarLink[][]Contact links on the right of the top strip
logo{ text: string; href?: string }Brand text and link, shown at the left of the main row
navItemsNavItem[][]Desktop and mobile nav links, rendered as ghost buttons on desktop
buttonsArray<{ label: string; href?: string; variant?: "default" | "outline" | "ghost" }>[]Action buttons rendered right of the nav, repeated in the mobile panel
classNamestringExtra classes for the outer wrapper <div>
ts
type TopBarLink = {
  label: string;
  href?: string;
  icon?: "phone" | "mail";
};

type NavItem = { label: string; href?: string };

Behavior notes

  • The whole component (top strip + main nav) is wrapped in one sticky top-0 <div>, so both rows scroll away together and lock to the top as a unit; the main <nav> keeps its own bottom border.
  • TopBarLink.icon maps to a small Phone or Mail icon; the label text itself is hidden below sm (hidden sm:inline), leaving just the icon on narrow viewports.
  • Desktop nav items render as variant="ghost" Buttons (not plain links) inside the main row, giving them a hover background instead of just a color change.
  • Desktop links, buttons, and the top bar's link labels show from lg/sm up; below lg a hamburger toggles a conditionally rendered panel ({mobileMenuOpen && ...}) with plain link rows and stacked full-width buttons — the top strip itself has no mobile-specific collapse.

More Navigation blocks

View all Navigation
PRO

navbar65

Status Tier Navbar

Two-tier navbar — a top strip carries an availability badge with a live dot and utility links, over a main row with an oversized wordmark, nav and pill CTA.

PRO

navbar40

Breadcrumb Navbar

Two-row navbar with main navigation and secondary breadcrumb bar for hierarchical content paths. Perfect for e-commerce product pages and documentation with deep category structures.

PRO

navbar73

Announcement Bar Navbar

A navbar with a dark announcement strip above a hairline-bordered row carrying a lowercase wordmark, uppercase links, a sign-in link, an accent call to action, and a mobile menu.

PRO

navbar51

Tab Bar Navbar

Two-row navbar with brand, availability status and seal CTA on top, and an underlined active-tab link row that scrolls horizontally on mobile.

PRO

navbar79

Announcement Navbar

A sticky navbar topped by a thin ink announcement bar with a small-caps link, then a frosted bar with the serif wordmark, uppercase links that underline from the left on hover, a sliding-marker pill, and a light full-height mobile menu whose links settle in one after another.

PRO

navbar41

Editorial Studio Navbar

Two-tier studio navbar with an availability utility strip, square-mark wordmark, index-numbered links and a seal CTA.