About this snippet

Build a responsive mega menu navigation bar using just CSS and HTML. This layout lets you display images and multiple columns in your dropdowns, which is perfect for large websites or online stores. It adapts automatically to mobile screens, so your menu looks great on any device.

Size
6.1 KB
Uses
HTML, CSS, JavaScript
Loads
placehold.co
Views
399
<nav class="navbar">
  <div class="container">
    <a href="#" class="logo">
      <svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"></path></svg>
      <span>Brand</span>
    </a>
    <div class="menu-toggle" id="mobile-menu">
      <span class="bar"></span>
      <span class="bar"></span>
      <span class="bar"></span>
    </div>
    <ul class="nav-menu">
      <li><a href="#" class="nav-link">Home</a></li>
      <li class="has-dropdown">
        <a href="#" class="nav-link dropdown-toggle">Products <span class="arrow">&#9662;</span></a>
        <div class="mega-menu">
          <div class="mega-content">
            <div class="mega-column">
              <h3>Software</h3>
              <a href="#">Analytics Platform</a>
              <a href="#">Marketing Tools</a>
              <a href="#">CRM Solutions</a>
              <a href="#">Cloud Storage</a>
            </div>
            <div class="mega-column">
              <h3>Hardware</h3>
              <a href="#">Processors</a>
              <a href="#">Server Racks</a>
              <a href="#">Networking</a>
              <a href="#">Accessories</a>
            </div>
            <div class="mega-column featured">
              <img src="https://placehold.co/300x150/3b82f6/ffffff?text=New+Arrival" alt="Feature">
              <div class="featured-text">
                <h4>New Version 5.0</h4>
                <p>Experience the future of performance.</p>
              </div>
            </div>
          </div>
        </div>
      </li>
      <li><a href="#" class="nav-link">Pricing</a></li>
      <li><a href="#" class="nav-link">About</a></li>
      <li><a href="#" class="nav-btn">Get Started</a></li>
    </ul>
  </div>
</nav>
.navbar {
  font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
  background-color: #ffffff;
  box-shadow: 0 2px 15px rgba(0,0,0,0.05);
  position: relative;
  z-index: 100;
}
.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 70px;
}
.logo {
  display: flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
  color: #1f2937;
  font-weight: 800;
  font-size: 1.5rem;
}
.nav-menu {
  display: flex;
  align-items: center;
  gap: 30px;
  list-style: none;
  margin: 0;
  padding: 0;
}
.nav-link {
  text-decoration: none;
  color: #4b5563;
  font-weight: 500;
  font-size: 1rem;
  transition: color 0.3s;
  display: flex;
  align-items: center;
  gap: 5px;
}
.nav-link:hover {
  color: #2563eb;
}
.nav-btn {
  padding: 10px 24px;
  background: #2563eb;
  color: white;
  border-radius: 50px;
  text-decoration: none;
  font-weight: 600;
  transition: background 0.3s;
}
.nav-btn:hover {
  background: #1d4ed8;
}
/* Mega Menu Desktop */
.has-dropdown {
  position: relative;
  height: 70px;
  display: flex;
  align-items: center;
}
.mega-menu {
  position: absolute;
  top: 70px;
  left: 50%;
  transform: translateX(-50%) translateY(10px);
  background: #ffffff;
  width: 600px;
  border-radius: 12px;
  box-shadow: 0 10px 40px rgba(0,0,0,0.1);
  opacity: 0;
  visibility: hidden;
  transition: all 0.3s ease;
  border: 1px solid #f3f4f6;
  overflow: hidden;
}
.has-dropdown:hover .mega-menu {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(0);
}
.mega-content {
  display: grid;
  grid-template-columns: 1fr 1fr 1.5fr;
  padding: 25px;
  gap: 20px;
}
.mega-column h3 {
  margin: 0 0 15px 0;
  font-size: 0.9rem;
  text-transform: uppercase;
  color: #9ca3af;
  letter-spacing: 1px;
}
.mega-column a {
  display: block;
  padding: 8px 0;
  text-decoration: none;
  color: #1f2937;
  font-weight: 500;
  transition: padding 0.2s, color 0.2s;
}
.mega-column a:hover {
  padding-left: 5px;
  color: #2563eb;
}
.featured img {
  width: 100%;
  border-radius: 8px;
  margin-bottom: 10px;
}
.featured-text h4 {
  margin: 0;
  color: #111827;
}
.featured-text p {
  margin: 5px 0 0 0;
  font-size: 0.85rem;
  color: #6b7280;
}
/* Mobile Menu */
.menu-toggle {
  display: none;
  cursor: pointer;
  flex-direction: column;
  gap: 5px;
}
.bar {
  width: 25px;
  height: 3px;
  background-color: #1f2937;
  border-radius: 2px;
}
@media (max-width: 900px) {
  .menu-toggle {
    display: flex;
  }
  .nav-menu {
    position: absolute;
    top: 70px;
    left: 0;
    width: 100%;
    background: #ffffff;
    flex-direction: column;
    align-items: flex-start;
    padding: 20px;
    box-shadow: 0 10px 20px rgba(0,0,0,0.05);
    display: none;
    box-sizing: border-box;
  }
  .nav-menu.active {
    display: flex;
  }
  .has-dropdown {
    height: auto;
    flex-direction: column;
    align-items: flex-start;
    width: 100%;
  }
  /* Reset Desktop Hover for Mobile */
  .has-dropdown:hover .mega-menu {
    display: none;
  }
  /* Only show when class "dropdown-active" is added by JS */
  .has-dropdown.dropdown-active .mega-menu {
    display: block;
    position: static;
    transform: none;
    width: 100%;
    opacity: 1;
    visibility: visible;
    box-shadow: none;
    border: none;
    padding: 0;
  }
  .mega-content {
    grid-template-columns: 1fr;
    padding: 10px 0 0 20px;
  }
  .featured {
    display: none;
  }
  .nav-menu li {
    width: 100%;
    padding: 10px 0;
    border-bottom: 1px solid #f9fafb;
  }
  .nav-btn {
    display: inline-block;
    margin-top: 15px;
    width: 100%;
    text-align: center;
    box-sizing: border-box;
  }
  .arrow {
    margin-left: auto;
    padding-right: 20px;
  }
}
const mobileMenu = document.getElementById("mobile-menu");
const navMenu = document.querySelector(".nav-menu");
const dropdownToggles = document.querySelectorAll(".dropdown-toggle");

// Toggle Mobile Menu
mobileMenu.addEventListener("click", () => {
  navMenu.classList.toggle("active");
});

// Toggle Dropdowns on Click (Mobile)
dropdownToggles.forEach(toggle => {
  toggle.addEventListener("click", (e) => {
    if (window.innerWidth <= 900) {
      e.preventDefault(); // Prevent link navigation on mobile
      toggle.parentElement.classList.toggle("dropdown-active");
    }
  });
});
Esc
↑↓ moveEnter select

Start from a template

Open an .html file, or HTML, CSS, JS, Markdown, Less or TypeScript files. You can also drop them here. Styles and scripts go into their panes.

Share

Source

Keyboard shortcuts

Save