Skip to content

Header Menu

The Header Menu component provides a responsive navigation solution for your application's main menu structure, supporting both desktop and mobile views.

Live Example

View the live example in a new tab.

Requirements

To use the Header Menu component, you'll need to include the following resources:

JavaScript

Include the menu interaction script:

html
<script src="https://cdn.jsdelivr.net/gh/wdalhaj/uo-nds-html-assets@master/js/uo-nds-nav.js"></script>

Examples

Basic Example

html
<header class="header">
    <!-- Branding -->
    <div class="header-nav__branding">
        <a href="#" class="header__logo">
            <img src="img/logo.svg" alt="Logo" />
        </a>
    </div>

    <!-- Mobile menu button -->
    <button type="button" class="header-menu__btn mobile-menu__btn">
        <span class="material-icons btn-icon header-menu__btn-icon">menu</span>
    </button>

    <!-- Mobile close button -->
    <button type="button" class="header-menu__btn close_btn">
        <span class="material-icons btn-icon header-menu__btn-icon">close</span>
    </button>

    <nav class="header-nav--full">      
        <div class="header-nav__main">
            <!-- Menu items -->
            <ul class="header-nav__menu">
                <li>
                    <a href="#" class="header-menu__item has-submenu">
                        <span class="header-menu__item-label">Products</span>
                        <span class="material-icons btn-icon">keyboard_arrow_down</span>
                    </a>
                    <!-- submenu -->
                    <div class="header__sub-menu header__sub-menu--full">
                        <div class="sub-menu__container">
                            <div class="sub-menu__column">
                                <a href="#" class="sub-menu__link">
                                    <div class="flex-column">
                                        <span class="sub-menu__link-label">Product Item</span>
                                    </div>
                                </a>
                            </div>
                        </div>
                    </div>
                </li>
            </ul>
        </div>

        <!-- Action items -->
        <ul class="header-nav__actions">
            <li>
                <a href="#" class="header-menu__item">
                    <span class="material-icons btn-icon">how_to_reg</span>
                    <span class="header-menu__item-label">Sign up</span>
                </a>
            </li>
        </ul>
    </nav>
</header>

<!-- Include the JavaScript file -->
<script src="https://cdn.jsdelivr.net/gh/wdalhaj/uo-nds-html-assets@master/js/uo-nds-nav.js"></script>

Main Structure

Basic Header Setup

html
<header class="header">
    <div class="header-nav__branding">
        <a href="#" class="header__logo">
            <img src="logo.svg" alt="Logo" />
        </a>
    </div>

    <button type="button" class="header-menu__btn mobile-menu__btn">
        <span class="material-icons btn-icon header-menu__btn-icon">menu</span>
    </button>

    <nav class="header-nav--full">
        <div class="header-nav__main">
            <ul class="header-nav__menu">
                <!-- Menu items will be added here -->
            </ul>
        </div>
    </nav>
</header>

<!-- Include menu JavaScript -->
<script src="js/uo-nds-menu.js"></script>

Adding Menu Items

1. Basic Menu Item

html
<li>
    <a href="#" class="header-menu__item">
        <span class="header-menu__item-label">Home</span>
    </a>
</li>

2. Menu Item with Submenu

html
<li>
    <a href="#" class="header-menu__item has-submenu">
        <span class="header-menu__item-label">Products</span>
        <span class="material-icons btn-icon">keyboard_arrow_down</span>
    </a>

    <div class="header__sub-menu header__sub-menu--full">
        <div class="sub-menu__container">
            <div class="sub-menu__column">
                <a href="#" class="sub-menu__link">
                    <div class="flex-column">
                        <span class="sub-menu__link-label">Product 1</span>
                    </div>
                </a>
                <a href="#" class="sub-menu__link">
                    <div class="flex-column">
                        <span class="sub-menu__link-label">Product 2</span>
                    </div>
                </a>
            </div>
        </div>
    </div>
</li>

Features

  • Responsive Design: Adapts to both desktop and mobile views
  • Mobile Menu Toggle: Hamburger menu for mobile view
  • Submenu Support: Dropdown menus for nested navigation
  • RTL Support: Built-in Right-to-Left language support
  • Material Icons: Integrated icon support for menu items and actions

CSS Classes

Class NameDescription
headerMain container for the header
header-nav--fullContainer for the full navigation menu
header-menu__btnMenu button styles
mobile-menu__btnMobile-specific menu button
close_btnClose button for mobile menu
header-nav__mainMain navigation container
header-nav__menuContainer for menu items
header-menu__itemIndividual menu item
has-submenuIndicates menu item has a submenu
header__sub-menuSubmenu container
header-nav__actionsContainer for action items

JavaScript Features

The menu functionality is handled by uo-nds-menu.js, which provides:

  • Mobile menu toggle
  • Submenu toggle
  • Click outside handling
  • Active state management

Mobile Responsiveness

The menu automatically switches to a mobile-friendly view on screens smaller than 56.25em (900px), featuring:

  • Hamburger menu toggle
  • Full-screen overlay navigation
  • Vertical menu layout
  • Close button for easy navigation