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