Opens in a new tab

On this page

A mega menu is one of those things everyone recognizes and few people build well. It can turn a crowded navigation into something visitors scan in a second, or it can become a panel full of links that opens when nobody asked and closes before anyone can click.

This guide covers what a mega menu is, how to build one that works for mouse, keyboard and touch, patterns worth borrowing, the usual WordPress plugins, and the native way in Bricks Builder.

What is a mega menu

A mega menu is a dropdown that opens a large panel instead of a short list. Where a normal dropdown shows five or six links stacked in a column, a mega menu can show several columns of links grouped under labels, plus images, icons, short descriptions, a featured card or a call to action.

It usually spans the full width of the header and opens from one item in the main navigation. A site might have one mega menu for “Products” and simple dropdowns for everything else.

Mega menus make sense when a site has many categories or pages that visitors need to reach from anywhere, like an online store or an agency with many services. For a site with ten pages, a regular menu is clearer.

Technically, a mega menu is a set of navigation links shown and hidden by a button. That matters when you build it.

How to create a mega menu

Whatever tool you use, a good mega menu comes from the same steps:

  1. Sort the content first. List every link the menu needs and group them into three to five categories with short, plain labels.
  2. Pick a layout per menu. Columns of links for deep catalogs, cards with icons for a handful of services, a featured image or post for editorial sites. One header can mix them.
  3. Decide how it opens. On desktop, open on click, or on hover with a click fallback. On touch screens, hover doesn’t exist, so the toggle has to work with a tap.
  4. Plan the mobile version. The panel rarely fits a phone as is. It usually becomes an accordion or a sliding panel inside the mobile menu.
  5. Make it work with a keyboard. This is where most mega menus fail, and it’s easier to get right from the start than to fix later.

For the keyboard part, the W3C’s Web Accessibility Initiative (WAI) publishes a pattern for exactly this kind of navigation: the disclosure navigation menu. Each top-level item that opens a panel is a button with aria-expanded, and the panel is a plain list of links that the button shows and hides. The WAI example is explicit that it doesn’t use the ARIA menu role, because that role “does not provide the complex functionality that assistive technologies expect in a widget that has the menu role.”

Here is a minimal version of that pattern for one mega menu panel:

<nav aria-label="Main">
  <ul>
    <li>
      <button type="button" aria-expanded="false" aria-controls="mega-products">
        Products
      </button>
      <div id="mega-products" hidden>
        <p>Design</p>
        <ul>
          <li><a href="/templates/">Templates</a></li>
          <li><a href="/components/">Components</a></li>
        </ul>
        <p>Learn</p>
        <ul>
          <li><a href="/doc/">Documentation</a></li>
          <li><a href="/blog/">Blog</a></li>
        </ul>
      </div>
    </li>
    <li><a href="/pricing/">Pricing</a></li>
  </ul>
</nav>

And the script that makes the button work, including closing the panel with Escape:

document.querySelectorAll('nav button[aria-expanded]').forEach((button) => {
  const panel = document.getElementById(button.getAttribute('aria-controls'));

  const setOpen = (open) => {
    button.setAttribute('aria-expanded', String(open));
    panel.hidden = !open;
  };

  button.addEventListener('click', () => {
    setOpen(button.getAttribute('aria-expanded') !== 'true');
  });

  button.parentElement.addEventListener('keydown', (event) => {
    if (event.key === 'Escape' && button.getAttribute('aria-expanded') === 'true') {
      setOpen(false);
      button.focus();
    }
  });
});

A native button already responds to Enter and Space, so there’s no extra key handling to write for opening. Tab and Shift+Tab move through the button and the links in the order they appear. The WAI pattern lists arrow keys, Home and End as optional extras.

The better mega menu: what to avoid

Most mega menu problems come from a few habits:

  • Hover only. If the panel opens only on mouse hover, keyboard and touch users can’t reach it. Always give the trigger a button that opens it on click or tap.
  • Panels that close too fast. Moving the mouse diagonally from the trigger to a link often crosses empty space. The WAI fly-out menu tutorial adds a short delay (one second in its example) before closing when the mouse leaves, to accommodate imprecise mouse movement and users with reduced dexterity.
  • Opening on focus. The same tutorial says submenus shouldn’t open when someone tabs through the menu, or keyboard users have to step through every submenu link to reach the next top-level item.
  • A parent that is both a link and a toggle. If “Products” goes to a page and also opens the panel, keep the link and add a separate toggle button next to it, as the WAI tutorial suggests.
  • Using role="menu" for site navigation. It tells screen readers to expect application-style menu keyboard behavior, which a list of links doesn’t provide.
  • Too much in one panel. A wall of forty links isn’t faster to scan than a category page, and large photos load with every page. Keep groups short and images few.
  • No other route to the links. The WAI tutorial suggests repeating submenu items elsewhere, such as on the parent item’s page, for people who find fly-out menus hard to use.

Mega menu examples and designs for inspiration

Most mega menus use one of a handful of patterns, or mix two across the same header.

  • Grouped link columns. Three to five columns, each with a short label and a list of links. The classic layout for stores and large content sites.
  • Columns with a featured image. Link columns on one side, a photo or promo card on the other. Works well when one category or offer deserves attention.
  • Icon cards. A grid of cards, each with an icon, a title and one line of description. Good for services or product lines, where a short explanation helps people pick.
  • Tabs inside the panel. Categories listed down one side; choosing one swaps the links on the other side. Useful when there are many categories with a few links each.
  • Content and contact. Recent posts, contact details or a support link next to the navigation. Handy for “Resources” or “Company” items.
  • All panels at once. Hovering or tabbing into the navigation drops one band with every submenu open as columns under its own link, so visitors see the whole site map in one view.

The Header · Mega menu template in Fancy Bricks combines several of these in one header. It has four mega menus: offer cards with icons, columns of links with a photo, learning cards with a community row, and contact details with recent posts. A plain dropdown, a log-in link and a buy button complete the bar, and on phones each mega menu slides in over the menu. You can see it, and the others, among the mega menu templates for Bricks Builder.

If you don’t need a full mega menu, the header and menu templates for Bricks Builder include classic, centered, off-canvas and full-screen layouts.

Best WordPress mega menu plugins

If your site doesn’t use a page builder with its own mega menu, a plugin is the usual route. Three that come up often, described from their own sites:

Plugin How it works Good to know
Max Mega Menu Extends native WordPress menus; you place widgets, blocks or custom HTML into submenus with a grid layout builder. Free version on WordPress.org, plus a Pro version. Lists native modules for Bricks, Breakdance, Divi and Elementor, and keyboard support with Tab, Enter or Space, and Escape.
JetMenu (Crocoblock) Builds mega menu content from elements and saved templates in your page builder. Made for Elementor and the block editor. Sold on its own or as part of a Crocoblock bundle.
UberMenu A dedicated mega menu plugin with columns, tabs, images, icons and custom content. Styling through the WordPress Customizer with live preview; can generate items from posts and taxonomies.

The best one depends mostly on your builder. If you build with Bricks Builder, you may not need a plugin at all.

Build a mega menu without a plugin, natively in Bricks

Bricks Builder has a mega menu built in. It lives in the Nav (Nestable) element, which holds both your desktop and mobile menu and lets you put any element inside the navigation. When you add it to the canvas, it comes with two Nav links, one Dropdown and two Toggle elements for the mobile menu.

To turn a dropdown into a mega menu:

  1. Add a Nav (Nestable) element to your header template.
  2. Select the Dropdown that should open the panel.
  3. In its Mega menu settings, tick Enable. The panel now covers the full available width.
  4. Optionally, fill in CSS selector (Horizontal) or CSS selector (Vertical) to align the panel with another element, such as your header’s container.
  5. Choose Toggle on: click, hover, or click or hover.
  6. Build the panel’s content with any Bricks elements: blocks for columns, headings, images, buttons, or your own components.

Bricks handles much of the accessibility for you. When the dropdown has an icon, Bricks uses a dedicated toggle button with an aria-label and an aria-expanded attribute that follows the open state. Bricks documents keyboard support for its navigation (Tab, Shift+Tab, Enter to follow a link and Space to toggle a submenu), and it has a setting for the breakpoint where the mobile menu takes over. On mobile, the menu reuses the same markup; a dropdown set to static position always toggles on click.

Native or plugin? A plugin adds its own settings, scripts and styles on top of your builder. The native route keeps the mega menu in the same header template as everything else, styled with the same classes and variables.

If you’d rather not build the panel from scratch, every template in the Bricks Builder template library pastes straight into the builder; the mega menu headers are built on Nav (Nestable) and use your framework’s variables. The guide on how to copy and paste templates into Bricks walks through the first paste.

Frequently asked questions

How do I design a good mega menu?

Group links by category, keep columns scannable, add icons or images sparingly, and make sure it’s just as usable on mobile and with a keyboard.

Which mega menu plugin is best for WordPress?

It depends on whether you’re using a page builder. Bricks Builder users can skip a separate plugin and use the native mega menu setting on the Dropdown element.

Are mega menus good for a website’s navigation?

Yes, when a site has many categories or pages, a mega menu can reduce clicks and help visitors scan their options. For a small site, a regular menu is usually clearer.

Can I build a mega menu without a plugin?

Yes. With Bricks Builder you can build a mega menu as a native dropdown inside the Nav (Nestable) element, with no separate menu plugin required.

Start with free Bricks Builder templates

Create a free account, install Fancy Framework (also free) and paste your first section in a minute.

Create free account