Navbar

Responsive navigation bar component with dropdowns, mobile menu, and various styling options.

Navbar Variants

Standard Navbar

Basic navigation bar with links

Navbar with Dropdown

Navigation with dropdown menus

Dark Navbar

Dark themed navigation bar

Real Estate Use Cases

Real Estate Portal Navigation

Implementation Guide

HTML Structure

<!-- Standard Navbar -->
<nav class="lyd-navbar">
    <div class="lyd-navbar-container">
        <a href="#" class="lyd-navbar-brand">
            <img src="logo.svg" alt="Logo" class="lyd-navbar-logo">
        </a>
        
        <ul class="lyd-navbar-menu">
            <li class="lyd-navbar-item">
                <a href="#" class="lyd-navbar-link active">Home</a>
            </li>
            <li class="lyd-navbar-item">
                <a href="#" class="lyd-navbar-link">About</a>
            </li>
        </ul>
        
        <div class="lyd-navbar-actions">
            <button class="lyd-button primary">Sign Up</button>
        </div>
        
        <button class="lyd-navbar-toggle" onclick="toggleMobileMenu(this)">
            <span></span>
            <span></span>
            <span></span>
        </button>
    </div>
</nav>

<!-- Navbar with Dropdown -->
<li class="lyd-navbar-item">
    <a href="#" class="lyd-navbar-link">
        Services
        <svg>...</svg>
    </a>
    <div class="lyd-navbar-dropdown">
        <a href="#" class="lyd-navbar-dropdown-item">Service 1</a>
        <a href="#" class="lyd-navbar-dropdown-item">Service 2</a>
    </div>
</li>

JavaScript for Mobile Menu

// Toggle mobile menu
function toggleMobileMenu(button) {
    button.classList.toggle('active');
    const menu = button.parentElement.querySelector('.lyd-navbar-menu');
    menu.classList.toggle('active');
}

// Handle active state
document.querySelectorAll('.lyd-navbar-link').forEach(link => {
    link.addEventListener('click', function(e) {
        // Remove active from all links
        document.querySelectorAll('.lyd-navbar-link').forEach(l => {
            l.classList.remove('active');
        });
        // Add active to clicked link
        this.classList.add('active');
    });
});

// Close mobile menu on outside click
document.addEventListener('click', (e) => {
    if (!e.target.closest('.lyd-navbar')) {
        document.querySelector('.lyd-navbar-toggle')?.classList.remove('active');
        document.querySelector('.lyd-navbar-menu')?.classList.remove('active');
    }
});

React/Next.js Component

// components/Navbar.tsx
import { useState } from 'react';
import Link from 'next/link';

interface NavItem {
  label: string;
  href: string;
  dropdown?: NavItem[];
}

interface NavbarProps {
  items: NavItem[];
  variant?: 'light' | 'dark';
}

export const Navbar = ({ items, variant = 'light' }: NavbarProps) => {
  const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
  const [activeItem, setActiveItem] = useState('/');
  
  return (
    <nav className={`lyd-navbar ${variant}`}>
      <div className="lyd-navbar-container">
        <Link href="/" className="lyd-navbar-brand">
          <img src="/logo.svg" alt="Logo" className="lyd-navbar-logo" />
        </Link>
        
        <ul className={`lyd-navbar-menu ${mobileMenuOpen ? 'active' : ''}`}>
          {items.map((item) => (
            <li key={item.href} className="lyd-navbar-item">
              <Link
                href={item.href}
                className={`lyd-navbar-link ${
                  activeItem === item.href ? 'active' : ''
                }`}
                onClick={() => setActiveItem(item.href)}
              >
                {item.label}
                {item.dropdown && (
                  <svg width="12" height="12">
                    <path d="M19 9l-7 7-7-7" />
                  </svg>
                )}
              </Link>
              
              {item.dropdown && (
                <div className="lyd-navbar-dropdown">
                  {item.dropdown.map((subItem) => (
                    <Link
                      key={subItem.href}
                      href={subItem.href}
                      className="lyd-navbar-dropdown-item"
                    >
                      {subItem.label}
                    </Link>
                  ))}
                </div>
              )}
            </li>
          ))}
        </ul>
        
        <div className="lyd-navbar-actions">
          <button className="lyd-button primary">Get Started</button>
        </div>
        
        <button
          className={`lyd-navbar-toggle ${mobileMenuOpen ? 'active' : ''}`}
          onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
        >
          <span></span>
          <span></span>
          <span></span>
        </button>
      </div>
    </nav>
  );
};

API Reference

Class Description
.lyd-navbar Main navbar container
.lyd-navbar-container Inner container with max-width
.lyd-navbar-brand Logo/brand area
.lyd-navbar-menu Navigation menu list
.lyd-navbar-item Menu item container
.lyd-navbar-link Navigation link
.lyd-navbar-dropdown Dropdown menu container
.lyd-navbar-dropdown-item Dropdown menu item
.lyd-navbar-actions Action buttons container
.lyd-navbar-toggle Mobile menu toggle
.dark Dark theme variant
.active Active state for links/menu

Accessibility & Best Practices

Keyboard Navigation

  • Tab through navigation items
  • Enter to activate links
  • Escape to close dropdowns
  • Arrow keys for dropdown navigation

Screen Reader Support

  • Use semantic nav element
  • aria-current for active page
  • aria-expanded for dropdowns
  • aria-label for mobile toggle

Best Practices

  • Keep navigation simple and clear
  • Limit top-level items to 5-7
  • Use descriptive link text
  • Ensure mobile-friendly design
  • Provide visual feedback for interactions

Responsive Design

  • Collapse to hamburger menu on mobile
  • Touch-friendly tap targets (44x44px min)
  • Smooth transitions
  • Prevent horizontal scroll