Skip to content

Navbar Tabs

Two-row header: brand and CTA on top, then a horizontally scrollable strip of pill tabs with emoji where the active tab is an ink-filled pill.

soft-flat/section/navbar-tabs
Open ↗

Source

"use client";

import { useState } from "react";
import { cn } from "@/lib/utils";

export interface NavbarTabsProps {
  brand?: string;
  brandHref?: string;
  tabs?: { label: string; href: string; emoji?: string }[];
  defaultActive?: string;
  cta?: { label: string; href: string };
  className?: string;
}

/** Two-row navbar: brand + CTA on top, then a horizontally scrollable strip of pill tabs (with emoji) whose active tab is a soft filled pill. */
export function NavbarTabs({
  brand = "Planta",
  brandHref = "/",
  tabs = [
    { label: "For teams", href: "#teams", emoji: "👋" },
    { label: "For freelancers", href: "#freelancers", emoji: "🎨" },
    { label: "For students", href: "#students", emoji: "📚" },
    { label: "Templates", href: "#templates", emoji: "🧩" },
    { label: "Integrations", href: "#integrations", emoji: "🔌" },
    { label: "Pricing", href: "#pricing", emoji: "🏷️" },
  ],
  defaultActive = "#teams",
  cta = { label: "Start planning", href: "#signup" },
  className,
}: NavbarTabsProps) {
  const [active, setActive] = useState(defaultActive);
  return (
    <header className={cn("bg-da-surface text-da-surface-fg shadow-da-sm", className)}>
      <div className="da-container flex h-16 items-center justify-between gap-4">
        <a href={brandHref} className="da-focus flex items-center gap-2 rounded-da-md font-da-display text-xl font-extrabold tracking-da-display">
          <span aria-hidden className="grid size-8 place-items-center rounded-full bg-da-secondary text-lg">
            🌱
          </span>
          {brand}
        </a>
        <a
          href={cta.href}
          className="da-focus da-transition inline-flex h-10 items-center rounded-da-pill bg-da-primary px-5 text-sm font-semibold text-da-primary-fg hover:-translate-y-0.5"
        >
          {cta.label}
        </a>
      </div>
      <nav aria-label="Sections" className="da-container overflow-x-auto pb-3 [scrollbar-width:none]">
        <ul className="flex w-max gap-2">
          {tabs.map((t) => (
            <li key={t.href}>
              <a
                href={t.href}
                aria-current={t.href === active ? "page" : undefined}
                onClick={() => setActive(t.href)}
                className={cn(
                  "da-focus da-transition inline-flex items-center gap-2 rounded-da-pill px-4 py-2 text-sm font-medium whitespace-nowrap",
                  t.href === active ? "bg-da-fg text-da-bg" : "bg-da-surface-2 text-da-muted-fg hover:text-da-fg",
                )}
              >
                {t.emoji && <span aria-hidden>{t.emoji}</span>}
                {t.label}
              </a>
            </li>
          ))}
        </ul>
      </nav>
    </header>
  );
}

export default NavbarTabs;

modules/soft-flat/section/navbar-tabs/index.tsx

Props

PropTypeDefaultDescription
brand / brandHrefstring—Brand.
tabs{ label, href, emoji? }[]—Tabs.
defaultActivestring—Initial active href.
cta{ label, href }—CTA.
classNamestring—Classes.

Other navbar variants in Soft Flat

Navbar in other art directions

Navbar Bold

Sticky top bar with square logo mark, mono uppercase links, underlined login and a pressable yellow CTA. Collapses into a full-width stacked menu on mobile.

BrutalistNavbar

Navbar Centered

Boxed navbar card with a hard shadow: links split left and right around a tilted yellow wordmark sticker in the center, ink CTA pressing into its shadow. Mobile opens a two-column ruled menu grid.

BrutalistNavbar

Navbar Overlay

Minimal bar (wordmark + ink MENU button with animated burger) that opens a full-screen yellow overlay with giant numbered links sliding on hover, a contact line and CTA. Same menu on every screen size.

BrutalistNavbar

Navbar Ticker

Two-tier sticky header: a scrolling ink announcement ticker on top, then a ruled bar where every link is a full-height cell that floods yellow on hover and a blue CTA block on the right.

BrutalistNavbar

Navbar Bar

Full-width sticky frosted bar with a Features dropdown that opens a glass panel of four icon cards, plain links and a gradient pill CTA; stacked mobile menu.

GlassNavbar

Navbar Dock

macOS-style floating bottom dock: a glass pill of round icon links that magnify with a spring when hovered (neighbours too), tooltips, a gradient active item with dot and an ink CTA.

GlassNavbar

Navbar Floating

Floating frosted pill navbar detached from the top edge: gradient orb logo, centered links, gradient CTA. On mobile the pill opens a frosted dropdown panel that fades in.

GlassNavbar

Navbar Islands

Three separate floating glass islands — brand pill, centered links pill, actions pill with gradient CTA — that merge into a single button and frosted panel on mobile.

GlassNavbar

Navbar Announcement

Two-tier header: a dismissible ink announcement bar with a link, above a hairline navbar with links, a ⌘K search trigger (wired to onSearch) and log in / demo actions.

MinimalNavbar

Navbar Blur

Sticky 56px top bar that is transparent at the top of the page and turns into a translucent blurred bar with a hairline once scrolled. Muted links, ink CTA, compact mobile menu.

MinimalNavbar

Navbar Mega

Navbar with a full-width Product mega menu: six icon + description items in a 3-column grid and a featured launch card, closes on outside click and Escape; grouped mobile menu.

MinimalNavbar

Navbar Pill

Floating, centered pill navbar with backdrop blur: logo, links with a shared hover/active pill indicator, ink CTA; collapses into a dropdown sheet with Escape support on mobile.

MinimalNavbar

Navbar Fullscreen

Minimal bar (logo + “Menu”) that opens a full-screen ink overlay with giant stacked links sliding up line by line, mono notes and contact details; Escape closes and scroll is locked.

Mono CleanNavbar

Navbar Index

Studio-style index navbar: numbered links “(01) Work”, a live local clock with city in mono, availability dot in the signal color and an underlined text CTA; stacked list on mobile.

Mono CleanNavbar

Navbar Meta

Two-tier editorial header: a mono meta strip (version, status with signal dot, changelog link) over a nav bar closed by a full-ink rule; oversize logo wordmark on desktop; stacked menu on mobile.

Mono CleanNavbar

Navbar Mono

Clean monochrome navbar on a hairline: square logo, links whose underline wipes in on hover (orange dot marks the active one), text sign-in and an ink button; text “Menu/Close” toggle opens a ruled list on mobile.

Mono CleanNavbar

Navbar Corporate

Corporate navbar: logo, two dropdown menus (items with descriptions), plain links, “Sign in”, bordered “Contact sales” and a blue primary; mobile accordion menu.

Neo CorporateNavbar

Navbar Mega

Navbar with a wide “Platform” mega menu: three titled columns of icon links plus a navy promo card, closing on Escape/outside click; stacked on mobile.

Neo CorporateNavbar

Navbar Scroll

Sticky navbar that starts tall and transparent and condenses on scroll into a white bordered bar with a subtle shadow and a smaller CTA.

Neo CorporateNavbar

Navbar Utility

Two-tier enterprise header: a slim surface-2 utility bar (system status, sales phone, language select, support/login) above the main navbar.

Neo CorporateNavbar

Navbar Announce

Sage announcement strip (leaf icon, message, link, dismiss) above a simple cream navbar with a terracotta-tinted secondary pill and sage primary pill; drop-down menu on mobile.

Organic SoftNavbar

Navbar Floating

Floating pill navbar: a rounded, softly blurred surface bar detached from the top edge, with centered links and an arrow CTA; expands into a rounded panel on mobile.

Organic SoftNavbar

Navbar Organic

Calm cream navbar: round leaf logo + serif wordmark, links with a hand-drawn underline on the active one, text sign-in and a sage pill CTA; rounded sheet menu on mobile.

Organic SoftNavbar

Navbar Split

Editorial symmetric navbar: links split on both sides of a centered logo + large serif wordmark, a thin warm rule below, outlined pill CTA; full-width stacked menu on mobile.

Organic SoftNavbar