Bootstrap 5 Dropdown Mega Menu

Follow these steps to create a Bootstrap 5 mega menu using the Bootstrap navbar with a dropdown.

Final output:

On smaller screens:

Bootstrap 5 Mega Menu on smaller screens

1. Let’s start with the first navbar from the official Bootstrap Navbar page:

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Link</a>
        </li>
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
            Dropdown
          </a>
          <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
            <li><a class="dropdown-item" href="#">Action</a></li>
            <li><a class="dropdown-item" href="#">Another action</a></li>
            <li><hr class="dropdown-divider"></li>
            <li><a class="dropdown-item" href="#">Something else here</a></li>
          </ul>
        </li>
        <li class="nav-item">
          <a class="nav-link disabled">Disabled</a>
        </li>
      </ul>
      <form class="d-flex">
        <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-success" type="submit">Search</button>
      </form>
    </div>
  </div>
</nav>

Output:

2. Replace the dropdown-menu list with the mega menu items as required.

<div class="dropdown-menu" aria-labelledby="navbarDropdown">
    <ul>
        <li><a class="dropdown-item" href="#">Action</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
    </ul>
    <ul>
        <li><a class="dropdown-item" href="#">Another action</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
    </ul>
    <ul>
        <li><a class="dropdown-item" href="#">Something else here</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
        <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
    </ul>
</div>

Output:

3. Yes, it’s a mess. Let’s begin styling it.

Get rid of the bullets and unnecessary padding.

.dropdown-menu ul {
  list-style: none;
  padding: 0;
}

I’m also changing the navbar background color and using the bootstrap class navbar-dark instead of navbar-light.

<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #516BEB;">

Modify the Search button to match the new navbar background.

<button class="btn btn-outline-light" type="submit">Search</button>

Output:

4. By default, the display type of dropdown-menu is block. To make it look like the mega menu, change the display type to flex.

.dropdown-menu.show {
  display: flex;
}

To make the first elements of each list stand out as headings, I am changing its color to match the navbar background and adding some basic styling.

.dropdown-menu li:first-child a {
  font-weight: bold;
  font-size: 1.2em;
  text-transform: uppercase;
  color: #516beb;
}

Output:

5. Add some styles to the other list items.

.dropdown-menu li .dropdown-item {
  color: gray;
  font-size: 1em;
  padding: 0.5em 1em;
}

Style the overall dropdown(mega menu).

.dropdown-menu {
  border: none;
  border-radius: 0;
  padding: 0.7em;
  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
}

Output:

6. For now, the mega menu opens only on click. Let’s open it on hover as well.

Also, let’s apply the display type that we changed earlier only for larger screens.

@media only screen and (min-width: 992px) {
  .dropdown:hover .dropdown-menu {
    display: flex;
  }
  .dropdown-menu.show {
    display: flex;
  }
}

I am changing the look of other links on the navbar a bit. You can also add some hover effects like underline or background-color change.

.navbar-dark .navbar-nav a.nav-link {
  color: #ffffff;
  font-size: 1.1em;
}

Output:

7. On mobile screens, you don’t want the navbar to take up all the space. Set a fixed height and make it scrollable.

@media only screen and (max-width: 992px) {
  .dropdown:hover .dropdown-menu {
    max-height: 350px;
    overflow-y: scroll;
  }
}

Output:

(minimize the window to check)


Video tutorial for Bootstrap 5 Mega Menu:


Final Output Code for Bootstrap 5 Mega Menu #1:

HTML

<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #516BEB;">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
      aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Link</a>
        </li>
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown"
            aria-expanded="false">
            Dropdown
          </a>
          <div class="dropdown-menu" aria-labelledby="navbarDropdown">
            <ul>
              <li><a class="dropdown-item" href="#">Action</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
            </ul>
            <ul>
              <li><a class="dropdown-item" href="#">Another action</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
            </ul>
            <ul>
              <li><a class="dropdown-item" href="#">Something else here</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
              <li><a class="dropdown-item" href="#">Mega Menu Link</a></li>
            </ul>
          </div>
        </li>
        <li class="nav-item">
          <a class="nav-link disabled">Disabled</a>
        </li>
      </ul>
      <form class="d-flex">
        <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-light" type="submit">Search</button>
      </form>
    </div>
  </div>
</nav>

CSS

.navbar-dark .navbar-nav a.nav-link {
  color: #ffffff;
  font-size: 1.1em;
}
.dropdown-menu {
  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
  border: none;
  border-radius: 0;
  padding: 0.7em;
}
@media only screen and (min-width: 992px) {
  .dropdown:hover .dropdown-menu {
    display: flex;
  }
  .dropdown-menu.show {
    display: flex;
  }
}
.dropdown-menu ul {
  list-style: none;
  padding: 0;
}
.dropdown-menu li .dropdown-item {
  color: gray;
  font-size: 1em;
  padding: 0.5em 1em;
}
.dropdown-menu li .dropdown-item:hover {
  background-color: #f1f1f1;
}
.dropdown-menu li:first-child a {
  font-weight: bold;
  font-size: 1.2em;
  text-transform: uppercase;
  color: #516beb;
}
.dropdown-menu li:first-child a:hover {
  background-color: #f1f1f1;
}
@media only screen and (max-width: 992px) {
  .dropdown-menu.show {
    flex-wrap: wrap;
    max-height: 350px;
    overflow-y: scroll;
  }
}
@media only screen and (min-width: 992px) and (max-width: 1140px) {
  .dropdown:hover .dropdown-menu {
    width: 40vw;
    flex-wrap: wrap;
  }
}

If you have any doubts or stuck somewhere, you can reach out through Coding Yaar's Discord server.

4.2 12 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
1
0
Would love your thoughts, please comment.x
()
x