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-clean/section/navbar-fullscreenSource
"use client";
import { useEffect, useId, useState } from "react";
import { cn } from "@/lib/utils";
export interface NavbarFullscreenProps {
brand?: string;
brandHref?: string;
links?: { label: string; href: string; note?: string }[];
contact?: { email: string; social: { label: string; href: string }[] };
className?: string;
}
function FrameMark({ className }: { className?: string }) {
return (
<svg aria-hidden viewBox="0 0 24 24" className={cn("size-6 shrink-0", className)}>
<rect x="1" y="1" width="22" height="22" fill="none" stroke="currentColor" strokeWidth="2" />
<path d="M7 1v22M1 7h22" stroke="currentColor" strokeWidth="2" />
<rect x="15" y="15" width="4" height="4" fill="var(--da-accent)" />
</svg>
);
}
/** 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. */
export function NavbarFullscreen({
brand = "Frame",
brandHref = "/",
links = [
{ label: "Templates", href: "#templates", note: "48" },
{ label: "Showcase", href: "#showcase", note: "New" },
{ label: "Pricing", href: "#pricing" },
{ label: "Journal", href: "#journal" },
],
contact = {
email: "hello@frame.studio",
social: [
{ label: "Instagram", href: "#ig" },
{ label: "Are.na", href: "#arena" },
{ label: "LinkedIn", href: "#li" },
],
},
className,
}: NavbarFullscreenProps) {
const [open, setOpen] = useState(false);
const id = useId();
useEffect(() => {
if (!open) return;
const onKey = (e: KeyboardEvent) => e.key === "Escape" && setOpen(false);
window.addEventListener("keydown", onKey);
return () => window.removeEventListener("keydown", onKey);
}, [open]);
useEffect(() => {
if (!open) return;
const prev = document.body.style.overflow;
document.body.style.overflow = "hidden";
return () => {
document.body.style.overflow = prev;
};
}, [open]);
return (
<header className={cn("relative bg-da-bg text-da-fg", className)}>
<div className="da-container flex h-16 items-center justify-between">
<a href={brandHref} className="da-focus flex items-center gap-2.5 rounded-da-sm font-da-display text-lg font-semibold tracking-da-display">
<FrameMark />
{brand}
</a>
<button
type="button"
aria-expanded={open}
aria-controls={id}
onClick={() => setOpen(true)}
className="da-focus flex items-center gap-3 rounded-da-sm font-da-mono text-xs tracking-da-label uppercase"
>
Menu
<span aria-hidden className="grid w-6 gap-1.5">
<span className="h-px bg-current" />
<span className="h-px bg-current" />
</span>
</button>
</div>
{open && (
<div
id={id}
role="dialog"
aria-modal="true"
aria-label="Menu"
className="fixed inset-0 z-50 flex flex-col bg-da-fg text-da-bg transition-opacity duration-(--da-duration) starting:opacity-0"
>
<div className="da-container flex h-16 w-full items-center justify-between">
<span className="font-da-display text-lg font-semibold tracking-da-display">{brand}</span>
<button type="button" autoFocus onClick={() => setOpen(false)} className="da-focus rounded-da-sm font-da-mono text-xs tracking-da-label uppercase">
Close
</button>
</div>
<nav aria-label="Main" className="da-container flex w-full flex-1 flex-col justify-center">
<ul className="border-t border-current/20">
{links.map((l, i) => (
<li key={l.href} className="overflow-hidden border-b border-current/20">
<a
href={l.href}
onClick={() => setOpen(false)}
className="group da-focus flex items-baseline justify-between py-3 font-da-display text-[clamp(2.5rem,9vw,6rem)] leading-none font-medium tracking-da-display transition-[translate,opacity] duration-(--da-duration-slow) ease-da starting:translate-y-full starting:opacity-0 motion-reduce:transition-none"
style={{ transitionDelay: `${80 + i * 60}ms` }}
>
<span className="transition-transform duration-(--da-duration) group-hover:translate-x-3">{l.label}</span>
{l.note && <span className="font-da-mono text-sm font-normal tracking-normal opacity-70">{l.note}</span>}
</a>
</li>
))}
</ul>
</nav>
<div className="da-container flex w-full flex-wrap justify-between gap-4 py-8 font-da-mono text-xs tracking-da-label uppercase opacity-80">
<a href={`mailto:${contact.email}`} className="da-focus rounded-da-sm hover:underline">
{contact.email}
</a>
<ul className="flex gap-5">
{contact.social.map((s) => (
<li key={s.label}>
<a href={s.href} className="da-focus rounded-da-sm hover:underline">
{s.label}
</a>
</li>
))}
</ul>
</div>
</div>
)}
</header>
);
}
export default NavbarFullscreen;
modules/mono-clean/section/navbar-fullscreen/index.tsx
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| brand | string | — | Brand name. |
| brandHref | string | — | Brand link target. |
| links | { label: string; href: string; note?: string }[] | — | Links. |
| contact | { email: string; social: { label: string; href: string }[] } | — | Contact. |
| className | string | — | Extra classes on the root. |
Other navbar variants in Mono Clean
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Navbar Utility
Two-tier enterprise header: a slim surface-2 utility bar (system status, sales phone, language select, support/login) above the main navbar.
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.
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.
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.
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.
Navbar Centered
Symmetric navbar inside a soft rounded well: links split left and right of a centered wordmark with two overlapping dots, ink pill CTA at the far right; stacked sheet on mobile.
Navbar Sheet
Minimal bar with a wordmark and a big “Menu” pill that unfolds a grid of pastel link tiles (title, description, arrow) with a staggered bouncy entrance, on every screen size.
Navbar Soft
Friendly sticky navbar: rounded pastel logo mark, pill links with a soft lavender active fill, text log-in and a periwinkle pill CTA; rounded drop-down sheet on mobile.
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.