Skip to content
BaseLayer Themes

Navbar 03

Full-bleed bar with described dropdown items, icons, and column layout

File: src/blocks/navbar/Navbar03.astro

Full-bleed sticky header based on Navbar 01, with richer dropdown panels: each child shows a label plus optional short description and optional icon. Dropdown content uses the shared src/components/nav/ stack (same as all navbar versions). For multi-column mega menus with featured images, see Navbar 04. Authoring reference: Navigation guide.

Types: src/lib/nav.ts · Client: src/scripts/navbar.ts

Mobile: hamburger + slide panel; nested items stay a single-column vertical list (with descriptions and icons).

Config (identity.tsnavigation)

Same navigation slice as Navbar 01 / 02, plus dropdownColumns, dropdownWidth, dropdownIconSize, and optional description / icon / iconSize on children (or full sections for mega menus):

// src/config/identity.ts
navigation: {
  sticky: true,
  dropdownTrigger: "hover", // or "click"
  dropdownColumns: 2, // default grid for Navbar 03 (1–4)
  dropdownWidth: "lg", // panel width: "sm" | "md" | "lg" | "xl"
  dropdownIconSize: 20, // default Lucide px size for child icons
  borderBottom: true,
  borderThickness: "sm",
  borderColor: "soft",
  links: [
    { label: "Themes", href: "/themes/" },

    // Described dropdown — uses dropdownColumns / dropdownWidth unless overridden
    {
      label: "Docs",
      href: "/docs/", // label links here; chevron opens the menu
      columns: 2,
      width: "xl", // optional per-parent width override
      children: [
        {
          label: "Get started",
          href: "/docs/get-started/",
          description: "Install, structure, and first steps.",
          icon: "rocket",
        },
        {
          label: "Blocks",
          href: "/docs/blocks/",
          description: "Full-width sections and version docs.",
          icon: "layout-template",
          iconSize: 22, // optional per-item override
        },
        {
          label: "Components",
          href: "/docs/components/",
          description: "UI atoms, containers, and utilities.",
          icon: "component",
        },
        {
          label: "Templates",
          href: "/docs/templates/",
          description: "Theme packaging and buyer overview.",
          icon: "package",
        },
      ],
    },

    { label: "Pricing", href: "/pricing/" },
  ],
  cta: { label: "Browse themes", href: "/themes/", size: "md" },
},

Columns

Resolution order: link.columnsnavigation.dropdownColumns2.

navigation: {
  dropdownColumns: 3,
  links: [
    {
      label: "Product",
      columns: 2, // overrides the global 3 for this menu only
      children: [
        { label: "Features", href: "/features/", description: "What you get." },
        { label: "Pricing", href: "/pricing/", description: "Plans and licenses." },
      ],
    },
  ],
},

Width

Resolution order: link.widthnavigation.dropdownWidth"lg".

Preset Approx. panel width
sm 20rem
md 28rem
lg 40rem (default)
xl 56rem

All presets clamp to 100vw - 2rem on small screens.

navigation: {
  dropdownWidth: "lg",
  links: [
    {
      label: "Docs",
      width: "xl", // wider panel for this menu only
      columns: 2,
      children: [/* … */],
    },
  ],
},

Icons

Optional Lucide icons (kebab-case from lucide.dev/icons) sit to the left of the label + description, top-aligned.

Resolution order for size: children[].iconSizenavigation.dropdownIconSize20.

navigation: {
  dropdownIconSize: 20,
  links: [
    {
      label: "Docs",
      children: [
        {
          label: "Blocks",
          href: "/docs/blocks/",
          description: "Full-width sections and version docs.",
          icon: "layout-template",
          iconSize: 24, // this item only
        },
      ],
    },
  ],
},
Field Where Notes
href Parent Optional. With children, the label links here and the chevron opens the menu
children[].description Child Optional short text under the label
children[].icon Child Optional Lucide kebab-case name; shown left of title + description
children[].iconSize Child Optional pixel size; overrides dropdownIconSize
columns Parent 1 | 2 | 3 | 4 — overrides dropdownColumns
width Parent sm | md | lg | xl — overrides dropdownWidth
dropdownColumns navigation / prop Default column count for all menus
dropdownWidth navigation / prop Default panel width for all menus
dropdownIconSize navigation / prop Default icon size in px for children with icon

Navbar 01 / 02 use the same width / dropdownWidth panel controls; they render simpler single-column content from children.

Add to a page

---
import Navbar03 from "@/blocks/navbar/Navbar03.astro";
---

<Navbar03 />

Swap in BaseLayout when you want described mega-style dropdowns:

<Navbar03
  dropdownColumns={3}
  dropdownWidth="xl"
  dropdownIconSize={22}
  dropdownTrigger="click"
/>

Inline links with descriptions:

<Navbar03
  dropdownColumns={2}
  links={[
    { label: "Home", href: "/" },
    {
      label: "Product",
      columns: 2,
      children: [
        {
          label: "Features",
          href: "/features/",
          description: "Everything included in the kit.",
          icon: "sparkles",
        },
        {
          label: "Pricing",
          href: "/pricing/",
          description: "Simple plans for teams.",
          icon: "badge-dollar-sign",
        },
      ],
    },
  ]}
/>

Props

Prop Config key Type / values Default / notes
links navigation.links NavLink[] Supports description / icon / iconSize on children; columns / width on parents
dropdownColumns navigation.dropdownColumns 1 | 2 | 3 | 4 Default grid; overridable per parent
dropdownWidth navigation.dropdownWidth sm | md | lg | xl Panel width; default lg; overridable per parent
dropdownIconSize navigation.dropdownIconSize number Default icon px size; default 20; overridable per child
dropdownTrigger navigation.dropdownTrigger click | hover Desktop only; default click
borderBottom navigation.borderBottom boolean Bottom stroke on/off; default true
borderThickness navigation.borderThickness sm | md | lg Stroke weight when enabled
borderColor navigation.borderColor soft | medium | hard Stroke contrast when enabled
ctaLabel navigation.cta.label string
ctaHref navigation.cta.href string
ctaSize navigation.cta.size sm | md | lg
sticky navigation.sticky boolean Pin the navbar while scrolling

← Navbar versions · Navigation guide · Blocks overview