Columns Mega Navbar

About this block

Columns Mega NavbarPRO

A sticky frosted navbar with two mega items, each dropping a full-width panel of three small-caps link groups in serif type beside a soft featured card with a photograph, an eyebrow and a lifting arrow link. Every panel stays in the markup and is shown with CSS; a light mobile menu groups the same links.

Two mega menus in one bar: each opens a full-width panel of grouped links beside a featured card with its own photograph, with plain links and a pill alongside and a nested mobile menu.

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

Base UI flavor

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

This installs the block to components/beste/block/navbar81.tsx plus the button22 sliding-marker pill it uses.

Quick start

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

tsx
import { Navbar81, navbar81Demo } from "@/components/beste/block/navbar81";

export default function Page() {
  return <Navbar81 {...navbar81Demo} />;
}

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

tsx
import { Navbar81 } from "@/components/beste/block/navbar81";

export default function Page() {
  return (
    <Navbar81
      brand="Altair"
      megas={[
        {
          label: "Sessions",
          href: "/sessions",
          groups: [
            {
              title: "One to one",
              links: [{ label: "Individual therapy", href: "/therapy" }],
            },
          ],
          featured: {
            eyebrow: "Start here",
            title: "A twenty-minute call, free",
            href: "/call",
            linkLabel: "Book the call",
            image: { src: "/photos/pines.jpg", alt: "Pine trees in soft morning fog" },
          },
        },
      ]}
      items={[{ label: "Fees", href: "/pricing" }]}
      button={{ label: "Book", href: "/book" }}
      labels={{ open: "Open menu", close: "Close menu" }}
    />
  );
}

Props

PropTypeDefaultDescription
brandstringWordmark on the left
megasMegaItem[][]Items that open a panel; one panel each
itemsNavItem[][]Plain links beside them
buttonActionButtonPill action, repeated at the foot of the mobile menu
labels{ open?: string; close?: string }{}Accessible names for the menu toggle
classNamestringExtra classes for the outer <header>
ts
type MegaItem = {
  label: string;
  href: string;
  groups: LinkGroup[];
  featured: Featured;
};

type LinkGroup = {
  title: string;
  links: NavItem[];
};

type Featured = {
  eyebrow: string;
  title: string;
  href: string;
  linkLabel: string;
  image: { src: string; alt: string };
};

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

type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • Every panel is rendered, one per mega item, and only the open one is revealed with CSS. Nothing is mounted on hover, so all the links in all the panels are in the server-rendered HTML.
  • Open state is an index rather than a boolean, so opening one panel closes the other without any extra bookkeeping.
  • Hovering a plain link sets the state back to null, which closes whichever panel was open as the pointer moves along the bar.
  • Escape closes both the panels and the mobile menu, and leaving the header with the pointer closes the panels.
  • On a phone the groups are flattened with flatMap, so a two-level menu becomes one indented list per mega item rather than a nested accordion nobody wants to operate with a thumb.
  • The mobile sections stagger through inline transitionDelay values from the index, reset to 0ms on close.
  • The featured card is one Link around the whole tile, with its arrow lifting only under motion-safe:.

More Navigation blocks

View all Navigation
PRO

navbar80

Photo Mega Navbar

A sticky frosted navbar whose first item opens a full-width panel: a ruled list of serif services on the left that brightens and slides an arrow in on hover while the photograph on the right blurs to the matching room, plus plain links, a sliding-marker pill and a light mobile menu. The panel is always in the markup and shown with CSS.

PRO

navbar54

Multi Mega Menu Navbar

Navbar where multiple items each open their own mega panel — three eyebrow-titled columns of described links with a view-all footer strip.

PRO

navbar19

Mega Menu Navbar

Full-width mega menu navbar with multi-column product dropdowns, icon-enhanced links, and promotional cards. Perfect for SaaS products and enterprise sites with extensive feature offerings.

PRO

navbar66

Featured Mega Navbar

Mega-menu navbar whose panels lead with a featured project — a full-color image card with a parenthetical category beside a ruled link list. SSR-mounted panels and a stacked mobile menu.

PRO

navbar60

Mega Studio Navbar

Full mega-menu navbar — bold links open three-column panels with parenthetical section labels, descriptions and a footer link. SSR-mounted panels, pill CTA and a stacked mobile menu.

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.