Navbar Dropdowns with Submenus: Extending Dropdown Menus for Deeper Navigation
Bootstrap 5 allows you to create multi-level dropdown menus by nesting dropdown-menu
elements. This is useful for creating more complex navigation structures with submenus.
Key Topics
- Basic Dropdown with Submenu
- Custom Styling for Submenus
- Responsive Submenus
- Complete Dropdown with Submenus Example
Basic Dropdown with Submenu
Create a multi-level dropdown menu by nesting dropdown-menu
elements inside a parent menu item.
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Brand</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdownMenu" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu">
<li><a class="dropdown-item" href="#">Action 1</a></li>
<li class="dropdown-submenu">
<a class="dropdown-item dropdown-toggle" href="#">More Options</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Sub Option 1</a></li>
<li><a class="dropdown-item" href="#">Sub Option 2</a></li>
</ul>
</li>
<li><a class="dropdown-item" href="#">Action 2</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
Explanation: Nest a dropdown-menu
inside another dropdown-item
to create a submenu. Add the dropdown-submenu
class for clarity.
Custom Styling for Submenus
Customize the appearance of submenus using CSS to differentiate them visually from the parent menu.
.dropdown-submenu {
position: relative;
}
.dropdown-submenu .dropdown-menu {
top: 0;
left: 100%;
margin-top: -5px;
}
Explanation: Submenus can be styled to appear next to their parent menu item using CSS positioning and alignment properties.
Responsive Submenus
Ensure that submenus work well on smaller devices by adding hover and click event handling with JavaScript.
document.querySelectorAll('.dropdown-submenu .dropdown-toggle').forEach(function (submenu) {
submenu.addEventListener('click', function (e) {
e.stopPropagation();
submenu.nextElementSibling.classList.toggle('show');
});
});
Explanation: JavaScript ensures submenus toggle properly on smaller devices, improving user interaction.
Complete Dropdown with Submenus Example
The following example demonstrates a fully functional multi-level dropdown menu with custom styling and responsive behavior.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap Navbar Submenu Example</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.dropdown-submenu {
position: relative;
}
.dropdown-submenu .dropdown-menu {
top: 0;
left: 100%;
margin-top: -5px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Brand</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdownMenu" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu">
<li><a class="dropdown-item" href="#">Action 1</a></li>
<li class="dropdown-submenu">
<a class="dropdown-item dropdown-toggle" href="#">More Options</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Sub Option 1</a></li>
<li><a class="dropdown-item" href="#">Sub Option 2</a></li>
</ul>
</li>
<li><a class="dropdown-item" href="#">Action 2</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.querySelectorAll('.dropdown-submenu .dropdown-toggle').forEach(function (submenu) {
submenu.addEventListener('click', function (e) {
e.stopPropagation();
submenu.nextElementSibling.classList.toggle('show');
});
});
</script>
</body>
</html>
Explanation: This example demonstrates a complete multi-level dropdown menu with styling and JavaScript for responsive submenus.
Key Takeaways
- Use nested
dropdown-menu
elements to create submenus. - Customize submenu styling using CSS for alignment and appearance.
- Ensure responsiveness with JavaScript for toggling submenu visibility.