KKUONIDesign System

Components

Mega Menu

Beta

A multi-column dropdown navigation panel that expands below the primary nav bar. Used for destination browsers, holiday type menus, and content-rich navigation structures.

Destinations

Holiday TypesOffers

Africa

  • Kenya
  • Tanzania
  • Rwanda

Indian Ocean

  • Maldives
  • Seychelles
  • Mauritius

Asia

  • Japan
  • Sri Lanka
  • India

Purpose

The MegaMenu is a wide, multi-column dropdown for sites with deep navigation hierarchies. Unlike a simple dropdown, it reveals multiple grouped link sets simultaneously — letting users see all of "Destinations" at once without drilling through sub-menus.

On kuoni.co.uk, a MegaMenu would serve:

  • Destinations — columns by region: Africa, Indian Ocean, Asia, Americas, Europe
  • Holiday types — columns: Luxury, Safari, Beach, Ski, Honeymoon, Family
  • Inspiration — columns: Editorial picks, Guides, Expert advice

Items without sub-columns render as simple nav links. Items with columns configured open a full-width panel on hover (desktop) or click (any pointer).

Static rendering note: The MegaMenu is interactive ('use client') and requires hover/click state to open. The preview above shows a static mockup of the open state. In your application, hover a "Destinations"-type nav item to open the panel.

Usage

Reach for MegaMenu when a top-level nav section (like "Destinations") has too many sub-items to fit a simple dropdown legibly — grouping them into headed columns lets users scan an entire category at once. For a nav item with only a handful of links, a simple link (no panel) is enough; reserve MegaMenu for genuinely deep hierarchies.

MegaMenu is triggered from an item inside the site's NavBar — it is not a standalone nav bar itself. On mobile, it does not render a panel at all; navigation instead collapses into the NavBar's built-in drawer pattern.

Anatomy

Destinations ↓Holiday Types

Africa

  • Kenya
  • Tanzania
  • South Africa

Indian Ocean

  • Maldives
  • Seychelles
  • Mauritius
  1. 1
    Nav barHorizontal list of nav items. Items with columns show a ChevronDown that rotates when open.
  2. 2
    Panel backdropFull-width area below the nav. White bg with bottom shadow-kuoni-xl. Appears on hover/click.
  3. 3
    Column headingRegional or category heading in 10px uppercase grey-400. e.g. "Africa", "Indian Ocean".
  4. 4
    Link listVertically stacked Next.js links. Grey-700 text, transitions to teal on hover.
  5. 5
    Featured cardOptional image card in a column — editorial pick with thumbnail, label, and description.
  6. 6
    BadgeOptional teal chip on a link label. e.g. "New" or "Sale".

Variants

The simplest mega menu — columns of grouped links, no featured cards.

<MegaMenu
  items={[
    {
      label: 'Destinations',
      columns: [
        {
          heading: 'Africa',
          links: [
            { label: 'Kenya', href: '/destinations/kenya' },
            { label: 'Tanzania', href: '/destinations/tanzania' },
            { label: 'South Africa', href: '/destinations/south-africa' },
          ],
        },
        {
          heading: 'Indian Ocean',
          links: [
            { label: 'Maldives', href: '/destinations/maldives' },
            { label: 'Seychelles', href: '/destinations/seychelles' },
            { label: 'Mauritius', href: '/destinations/mauritius' },
          ],
        },
        {
          heading: 'Asia',
          links: [
            { label: 'Japan', href: '/destinations/japan', badge: 'New' },
            { label: 'Sri Lanka', href: '/destinations/sri-lanka' },
            { label: 'India', href: '/destinations/india' },
          ],
        },
      ],
    },
    { label: 'Offers', href: '/offers' },
    { label: 'Inspiration', href: '/inspiration' },
  ]}
/>

Add a featured object to a column to render an editorial image card alongside the link lists.

<MegaMenu
  items={[
    {
      label: 'Destinations',
      columns: [
        {
          featured: {
            label: 'Destination of the month: Japan',
            description: 'Cherry blossoms and hidden ryokans',
            href: '/destinations/japan',
            image: {
              alt: 'Cherry blossom avenue at a Kyoto temple',
            },
          },
        },
        {
          heading: 'Asia',
          links: [
            { label: 'Japan', href: '/destinations/japan' },
            { label: 'Sri Lanka', href: '/destinations/sri-lanka' },
          ],
        },
      ],
    },
  ]}
/>

States

StateTrigger appearancePanel
All closedGrey-700 textHidden
Hover on item with columnsTeal text, ChevronDown rotated 180°Full-width panel visible
Hover on simple linkTeal textNo panel
Active link (current page)Teal text
Panel link hoverTeal text
Any nav item focusedTeal focus ringPanel opens

Best practices

Do

Limit mega menu columns to 4 per panel and links per column to 8.

Three to four columns of 6-8 links each gives users a complete picture without scrolling.

Don't

Try to fit every destination or holiday type into a single mega menu panel.

A mega menu with 6 columns of 15 links each is harder to scan than a search box.

Do

Give every column a clear heading that groups the links logically.

Column headings like 'Indian Ocean' immediately orient users within the geography.

Don't

Put all links in one column without sub-headings.

An ungrouped flat list of 30 destinations with no headings requires reading every item.

Do

Ensure the mega menu closes reliably on outside click and Escape key.

The panel closes when the user clicks outside or presses Escape — natural exit affordance.

Don't

Keep the mega menu open until the user explicitly closes it — rely on outside click + Escape.

A sticky open mega menu blocks page content and confuses users who want to scroll.

Do

Mix simple nav links (no panel) with mega menu items (with columns) in the same nav bar.

Simple top-level links (Offers, Inspiration) sit alongside mega menu items without a panel.

Don't

Give every nav item a mega panel, even simple sections with just a few links.

Forcing every nav item to open a panel adds interaction cost for simple sections.

Props

MegaMenu

PropTypeDefaultDescription
items*NavItem[]Array of nav items. Each item is either a simple link or has columns for a mega panel.
classNamestringAdditional Tailwind classes on the nav element.
PropTypeDefaultDescription
label*stringText label for the nav item.
hrefstring'#'URL for simple link items (no panel). Ignored when columns are provided.
activebooleanfalseMarks this nav item as the current page link (teal colour).
columnsPanelColumn[]When provided, the item opens a mega panel instead of linking directly.

PanelColumn shape

PropTypeDefaultDescription
headingstringColumn section heading. e.g. "Africa", "Indian Ocean".
linksArray<{ label: string; href: string; icon?: ReactNode; badge?: string }>[]Array of link items within this column.
featured{ label, description?, href, image? }Optional featured card at the top of the column with image thumbnail.

Accessibility

<nav aria-label="Primary navigation with mega menu">
  <ul role="menubar">
    <li role="none">
      <button role="menuitem" aria-haspopup="true" aria-expanded={isOpen}>
        Destinations
      </button>
    </li>
  </ul>
</nav>
  • role="menubar" on the nav list + role="menuitem" on each nav item follow the WAI-ARIA Menu pattern
  • aria-haspopup="true" on items with panels signals that a sub-menu will open
  • aria-expanded announces open/closed state to screen readers

Keyboard interaction

KeyAction
TabMove between nav items
Enter / SpaceOpen/close panel or follow a simple link
EscapeClose open panel
Tab within panelNavigate between panel links
Enter on panel linkFollow the link and close the panel

Mobile

On mobile, the MegaMenu renders nav items as flat links without panels. Use the NavBar component's built-in mobile drawer for mobile navigation — the MegaMenu is a desktop-only component.

  • Navigation — MegaMenu panels are triggered from items inside the site's NavBar; the two are used together, not interchangeably.
  • Drawer — the pattern NavBar falls back to for mobile navigation, replacing the desktop-only MegaMenu panel.