How do I create a CSS-only responsive mega menu?

Creating a CSS-only Responsive Mega Menu

A mega menu is a large, drop-down menu that appears when a user hovers over a navigation link. It often displays many options and categories, providing users with quick access to different parts of a website. In this tutorial, we will learn how to create a CSS-only responsive mega menu without using any JavaScript. This approach will ensure that our menu is lightweight and accessible, even for users with JavaScript disabled in their browsers.

Step 1: HTML Structure

First, let’s create the HTML structure for our mega menu. We’ll use an unordered list for the main navigation and nested unordered lists for the submenu items.

<!-- html -->
<!DOCTYPE html>
<html lang="en">
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CSS-only Responsive Mega Menu</title>
  <link rel="stylesheet" href="styles.css">
  <nav class="mega-menu">
        <a href="#">Menu Item 1</a>
        <div class="submenu">
          <!-- Add submenu content here -->
      <!-- Add more menu items as needed -->

Step 2: Basic CSS Styling

Now let’s add some basic CSS styling to our menu. We will start with resetting some default styles, setting up the main menu items and the submenu container.

/* CSS */

margin: 0;
padding: 0;
box-sizing: border-box;
body {
font-family: Arial, sans-serif;

.mega-menu ul {
list-style-type: none;
display: flex;

.mega-menu li {
position: relative;

.mega-menu a {
display: block;
padding: 15px 20px;
text-decoration: none;
color: #333;

.mega-menu .submenu {
display: none;
position: absolute;
top: 100%;
left: 0;
width: 100%;
background-color: #f1f1f1;
z-index: 1;

Step 3: Hover State and Submenu Visibility

Now we will add the hover state for our menu items and make the submenu visible when a user hovers over a menu item.

/* CSS */
.mega-menu li:hover {
background-color: #f1f1f1;

.mega-menu li:hover .submenu {
display: block;

Step 4: Making the Menu Responsive

To make our mega menu responsive, we will add a media query that adjusts the menu’s styling for smaller screens.

/* CSS */
@media (max-width: 768px) {
.mega-menu ul {
flex-direction: column;

.mega-menu .submenu {
position: static;
width: auto;

Now, our CSS-only responsive mega menu is complete! You can customize the appearance and add more menu items as needed. Remember, you can also create more complex submenu structures using nested unordered lists and additional styling if required.

Got question?

Submit it here

© All rights reserved.