Navbar

Lockness UI Component

VIEW

DOCUMENTATION

Navbar

Documentation for the Navbar component.

Installation

bash
deno run -A jsr:@lockness/ui add navbar

Usage

tsx
import {
  Navbar,
  NavbarBrand,
  NavbarContent,
  NavbarMenuItem
} from '@lockness/ui/components'

<Navbar position="sticky">
  <NavbarBrand href="/">
    <span>My App</span>
  </NavbarBrand>
  <NavbarContent position="center">
    <NavbarMenuItem href="/docs">Docs</NavbarMenuItem>
    <NavbarMenuItem href="/about">About</NavbarMenuItem>
  </NavbarContent>
  <NavbarContent position="right">
    <NavbarMenuItem href="/login">Login</NavbarMenuItem>
  </NavbarContent>
</Navbar>

Props

Navbar

PropTypeDefaultDescription
classstring-Additional CSS classes
childrenunknown-Navbar content
position'sticky' | 'fixed' | 'static''sticky'Position type

NavbarBrand

PropTypeDefaultDescription
classstring-Additional CSS classes
childrenunknown-Brand content (logo, text, etc.)
hrefstring'/'Link href

NavbarContent

PropTypeDefaultDescription
classstring-Additional CSS classes
childrenunknown-Content items
position'left' | 'center' | 'right''center'Position

NavbarMenu

PropTypeDefaultDescription
classstring-Additional CSS classes
childrenunknown-Menu items
openboolean-Open state

NavbarMenuItem

PropTypeDefaultDescription
classstring-Additional CSS classes
childrenunknown-Item content
hrefstring-Link href
activeboolean-Active state

NavbarToggle

PropTypeDefaultDescription
classstring-Additional CSS classes
onClick() => void-Toggle callback
openboolean-Open state

Theming

The Navbar component can be customized using CSS variables. This allows you to change the appearance of the navigation bar, including its height, padding, colors, and link styles globally or override specific instances.

Available CSS Variables

VariableDefaultDescription
--navbar-height4remHeight of the navbar
--navbar-padding-x1remHorizontal padding of the navbar
--navbar-padding-y0.75remVertical padding of the navbar
--navbar-backgroundvar(--background)Background color of the navbar
--navbar-foregroundvar(--foreground)Text color of the navbar
--navbar-border-colorvar(--border)Border color of the navbar
--navbar-link-padding-x0.75remHorizontal padding for navbar links
--navbar-link-padding-y0.5remVertical padding for navbar links
--navbar-link-font-weight500Font weight for navbar links

Theming Examples

Global Customization

Customize all navbars by setting CSS variables in your theme:

css
/* app/view/assets/app.css */
@theme {
    --navbar-height: 5rem;
    --navbar-padding-x: 2rem;
    --navbar-background: hsl(220 20% 10%);
    --navbar-foreground: hsl(0 0% 100%);
    --navbar-link-font-weight: 600;
}

Local Overrides

Override CSS variables for specific navbar instances:

tsx
<div style='--navbar-height: 6rem; --navbar-background: hsl(200 50% 20%);'>
    <Navbar position='sticky'>
        <NavbarBrand href='/'>
            <span>My App</span>
        </NavbarBrand>
        <NavbarContent position='right'>
            <NavbarMenuItem href='/login'>Login</NavbarMenuItem>
        </NavbarContent>
    </Navbar>
</div>

Component-Specific Theming

Create themed sections with different navbar styles:

tsx
<section class="dark-navbar">
    <style>
        .dark-navbar {
            --navbar-background: hsl(0 0% 10%);
            --navbar-foreground: hsl(0 0% 95%);
            --navbar-border-color: hsl(0 0% 20%);
            --navbar-link-padding-x: 1rem;
            --navbar-link-padding-y: 0.75rem;
        }
    </style>
    <Navbar position="sticky">
        <NavbarBrand href="/">Brand</NavbarBrand>
        <NavbarContent position="center">
            <NavbarMenuItem href="/docs">Docs</NavbarMenuItem>
            <NavbarMenuItem href="/about">About</NavbarMenuItem>
        </NavbarContent>
    </Navbar>
</section>

BASIC NAVBAR

tsx
<Navbar position="static">
  <NavbarBrand href="/">
    <span class="text-xl">🦕</span>
    <span>Lockness</span>
  </NavbarBrand>
  <NavbarContent position="center" class="hidden md:flex">
    <NavbarMenuItem href="/" active>Home</NavbarMenuItem>
    <NavbarMenuItem href="/docs">Docs</NavbarMenuItem>
    <NavbarMenuItem href="/components">Components</NavbarMenuItem>
    <NavbarMenuItem href="/examples">Examples</NavbarMenuItem>
  </NavbarContent>
  <NavbarContent position="right">
    <NavbarMenuItem href="/login">Login</NavbarMenuItem>
  </NavbarContent>
</Navbar>

WITH MOBILE MENU

tsx
const [isOpen, setIsOpen] = useState(false)

<Navbar position="static">
  <NavbarBrand href="/">
    <span class="text-xl">🦕</span>
    <span>Lockness</span>
  </NavbarBrand>
  <NavbarContent position="center" class="hidden md:flex">
    <NavbarMenuItem href="/" active>Home</NavbarMenuItem>
    <NavbarMenuItem href="/docs">Docs</NavbarMenuItem>
    <NavbarMenuItem href="/components">Components</NavbarMenuItem>
    <NavbarMenuItem href="/about">About</NavbarMenuItem>
  </NavbarContent>
  <NavbarToggle onClick={() => setIsOpen(!isOpen)} open={isOpen} />
</Navbar>
<NavbarMenu open={isOpen}>
  <NavbarMenuItem href="/" active>Home</NavbarMenuItem>
  <NavbarMenuItem href="/docs">Docs</NavbarMenuItem>
  <NavbarMenuItem href="/components">Components</NavbarMenuItem>
  <NavbarMenuItem href="/about">About</NavbarMenuItem>
</NavbarMenu>

STICKY NAVBAR

Scroll down to see the navbar stick to the top...

Content paragraph 1. This demonstrates the sticky behavior of the navbar.

Content paragraph 2. This demonstrates the sticky behavior of the navbar.

Content paragraph 3. This demonstrates the sticky behavior of the navbar.

Content paragraph 4. This demonstrates the sticky behavior of the navbar.

Content paragraph 5. This demonstrates the sticky behavior of the navbar.

tsx
<Navbar position="sticky">
  <NavbarBrand href="/">
    <span class="text-xl">🦕</span>
    <span>Lockness</span>
  </NavbarBrand>
  <NavbarContent position="center" class="hidden md:flex">
    <NavbarMenuItem href="/">Home</NavbarMenuItem>
    <NavbarMenuItem href="/products">Products</NavbarMenuItem>
    <NavbarMenuItem href="/pricing">Pricing</NavbarMenuItem>
  </NavbarContent>
</Navbar>