Evo Web
  • Components
  • Accessibility
  • Guides

Site Menu

Main Navigation
Components
Accessibility
Guides
  • Components
  • Accessibility
  • Guides
  • Github Repo
  • Accordion
  • Alert Dialog
  • Avatar
  • Badge
  • Breadcrumbs
  • Button
  • Calendar
  • Card
  • Carousel
  • Ccd
  • Chart Legend
  • Checkbox
  • Chip
  • Chips Combobox
  • Combobox
  • Confirm Dialog
  • Date Textbox
  • Details
  • Donut Chart
  • Education Notice
  • Eek
  • Field
  • File Input
  • File Preview Card Group
  • File Preview Card
  • Filter Chip
  • Filter Input
  • Flag
  • Floating Label
  • Global
  • Icon Button
  • Icon
  • Image Placeholder
  • Infotip
  • Inline Notice
  • Item Tile Group
  • Item Tile
  • Layout Grid
  • Lightbox Dialog
  • Link
  • List
  • Listbox Button
  • Listbox
  • Marketsans
  • Menu Button
  • Menu
  • Number Input
  • Page Grid
  • Page Notice
  • Pagination
  • Panel Dialog
  • Phone Input
  • Progress Bar Expressive
  • Progress Bar
  • Progress Spinner
  • Progress Stepper
  • Radio
  • Sass
  • Section Notice
  • Section Title
  • Segmented Buttons
  • Select
  • Selection Chip
  • Signal
  • Skeleton
  • Snackbar Dialog
  • Split Button
  • Star Rating Select
  • Star Rating
  • Switch
  • Table
  • Tabs
  • Textbox
  • Toast Dialog
  • Toggle Button Group
  • Toggle Button
  • Tokens
  • Tooltip
  • Tourtip
  • Typography
  • Utility
  • Accessibility Docs

  • Patterns

    • Description List
    • Fake Menu Button
    • Fake Tabs
    • Footnote
    • Form
    • Form Validation
    • Heading
    • Image
    • Input Dialog
    • Input Meter
    • Input Validation
    • Popover
    • Pulldown List
    • Region
    • Skip Navigation
    • Table Cell
    • Time
  • Anti Patterns

    • Disabling Pinch To Zoom
    • Hand Cursor On Buttons
    • Javascript Href
    • Layout Table
    • Non Interactive Hover
    • Open New Window
    • Setting Focus On Page Load
    • Tabindex Itis
    • Title Tooltip
  • Techniques

    • Active Descendant
    • Alternative Text
    • Ambiguous Label
    • Background Icon
    • Keyboard Interface
    • Keyboard Trap
    • Live Region
    • Offscreen Text
    • Roving Tabindex
    • Skip To Main Content
  • Testing

    • Checklist
    • Known Issues
  • Misc

    • Aria Essentials
    • Component Naming Scheme
    • Faq
  • Page Grid Use Guide
  • Skeleton Use Guide
  • Animation Guide

COMPONENTS

  • Accordion
  • Alert Dialog
  • Avatar
  • Badge
  • Breadcrumbs
  • Button
  • Calendar
  • Card
  • Carousel
  • Ccd
  • Chart Legend
  • Checkbox
  • Chip
  • Chips Combobox
  • Combobox
  • Confirm Dialog
  • Date Textbox
  • Details
  • Donut Chart
  • Education Notice
  • Eek
  • Field
  • File Input
  • File Preview Card Group
  • File Preview Card
  • Filter Chip
  • Filter Input
  • Flag
  • Floating Label
  • Global
  • Icon Button
  • Icon
  • Image Placeholder
  • Infotip
  • Inline Notice
  • Item Tile Group
  • Item Tile
  • Layout Grid
  • Lightbox Dialog
  • Link
  • List
  • Listbox Button
  • Listbox
  • Marketsans
  • Menu Button
  • Menu
  • Number Input
  • Page Grid
  • Page Notice
  • Pagination
  • Panel Dialog
  • Phone Input
  • Progress Bar Expressive
  • Progress Bar
  • Progress Spinner
  • Progress Stepper
  • Radio
  • Sass
  • Section Notice
  • Section Title
  • Segmented Buttons
  • Select
  • Selection Chip
  • Signal
  • Skeleton
  • Snackbar Dialog
  • Split Button
  • Star Rating Select
  • Star Rating
  • Switch
  • Table
  • Tabs
  • Textbox
  • Toast Dialog
  • Toggle Button Group
  • Toggle Button
  • Tokens
  • Tooltip
  • Tourtip
  • Typography
  • Utility

You are here

  • Evo Web
  • Components
  • Menu
  • Css
  • Overview
  • Accessibility
  • CSS 2.3
  • Marko Storybook 2.3
  • React Storybook 2.3
  • Design System

Menu Component

NOTE: Only limited JavaScript behaviour has been implemented in these examples. For detailed behaviour requirements, please visit our menu pattern .

Default Menu

The default menu is a stateless menu. Each item has a role of menuitem .

Item 1
Item 2
Item 3
Item 4
<div class="menu">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitem">
      <span> Item 1 </span>
    </div>
    <div class="menu__item" role="menuitem">
      <span> Item 2 </span>
    </div>
    <div class="menu__item" role="menuitem" aria-disabled="true">
      <span> Item 3 </span>
    </div>
    <div class="menu__item" role="menuitem">
      <span> Item 4 </span>
    </div>
  </div>
</div>

Badged Menu

A menu item can be badged using the badge module.

The menuitem element requires an additional menu__item--badged modifier.

Item 1 3
Item 2 77
Item 3
<span class="menu">
  <div class="menu__items" role="menu">
    <div
      aria-label="Item 1 (3 notifications)"
      class="menu__item menu__item--badged"
      role="menuitem"
    >
      <span aria-hidden="true">
        Item 1
        <span class="badge"> 3 </span>
      </span>
    </div>
    <div
      aria-label="Item 2 (77 notifications)"
      class="menu__item menu__item--badged"
      role="menuitem"
    >
      <span aria-hidden="true">
        Item 2
        <span class="badge"> 77 </span>
      </span>
    </div>
    <div class="menu__item menu__item--badged" role="menuitem">
      <span> Item 3 </span>
    </div>
  </div>
</span>

Single-Select Menu

For single-select state, use role menuitemradio on each menu item.

Item 1
Item 2
Item 3
<div class="menu">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitemradio" aria-checked="true">
      <span> Item 1 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div class="menu__item" role="menuitemradio" aria-checked="false">
      <span> Item 2 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div class="menu__item" role="menuitemradio" aria-checked="false">
      <span> Item 3 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
  </div>
</div>

Multi-Select Menu

For multi-select state, use role menuitemcheckbox on each menu item.

Item 1
Item 2
Item 3
<div class="menu">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitemcheckbox" aria-checked="true">
      <span> Item 1 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div class="menu__item" role="menuitemcheckbox" aria-checked="false">
      <span> Item 2 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div class="menu__item" role="menuitemcheckbox" aria-checked="false">
      <span> Item 3 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
  </div>
</div>

Grouped Menu

Menu items can be separated into groups, using the hr tag.

Item A1

Item B1
Item B2
Item B3

Item C1
Item C2
<div class="menu">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitem">
      <span> Item 1 </span>
    </div>
    <hr class="menu__separator" role="separator" />
    <div
      class="menu__item"
      role="menuitemradio"
      aria-checked="true"
      data-makeup-group="sort"
    >
      <span> Item B1 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div
      class="menu__item"
      role="menuitemradio"
      aria-checked="false"
      data-makeup-group="sort"
    >
      <span> Item B2 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div
      class="menu__item"
      role="menuitemradio"
      aria-checked="false"
      data-makeup-group="sort"
    >
      <span> Item B3 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <hr class="menu__separator" role="separator" />
    <div
      class="menu__item"
      role="menuitemcheckbox"
      aria-checked="true"
      data-menuitemcheckbox-name="sort"
    >
      <span> Item 2 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
    <div
      class="menu__item"
      role="menuitemcheckbox"
      aria-checked="true"
      data-menuitemcheckbox-name="sort"
    >
      <span> Item 3 </span>
      <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
        <use href="#icon-tick-16" />
      </svg>
    </div>
  </div>
</div>

Fake Menu

A fake menu is simply a list of links, styled to look like ARIA menu items.

  • Link 1
  • Link 2
  • Link 3
<div class="fake-menu">
  <ul class="fake-menu__items">
    <li>
      <a
        class="fake-menu__item"
        href="https://www.ebay.com"
        aria-current="page"
      >
        <span> Link 1 </span>
        <svg class="icon icon--16" height="10" width="14" aria-hidden="true">
          <use href="#icon-tick-16" />
        </svg>
      </a>
    </li>
    <li>
      <a href="https://www.ebay.com" class="fake-menu__item"> Link 2 </a>
    </li>
    <li>
      <a href="https://www.ebay.com" class="fake-menu__item"> Link 3 </a>
    </li>
  </ul>
</div>

Filter menu - checkbox

To use a filter menu checkbox, use icon--checked and icon--unchecked elements inside each menuitemcheckbox

Menu Item 1
Menu Item 2
Menu Item 3
<span class="menu menu--filter">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitemcheckbox" aria-checked="true">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-checkbox-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-checkbox-checked-18" />
      </svg>
      <span> Menu Item 1 </span>
    </div>
    <div class="menu__item" role="menuitemcheckbox" aria-checked="true">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-checkbox-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-checkbox-checked-18" />
      </svg>
      <span> Menu Item 2 </span>
    </div>
    <div class="menu__item" role="menuitemcheckbox" aria-checked="false">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-checkbox-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-checkbox-checked-18" />
      </svg>
      <span> Menu Item 3 </span>
    </div>
  </div>
</span>

Filter menu button - radio

To use a filter menu button with radios, use filter-chip as the button and have icon--checked and icon--unchecked elements inside each menuitemradio

Menu Item 1
Menu Item 2
Menu Item 3
<span class="menu menu--filter">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitemradio" aria-checked="false">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-radio-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-radio-checked-18" />
      </svg>
      <span> Menu Item 1 </span>
    </div>
    <div class="menu__item" role="menuitemradio" aria-checked="true">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-radio-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-radio-checked-18" />
      </svg>
      <span> Menu Item 2 </span>
    </div>
    <div class="menu__item" role="menuitemradio" aria-checked="false">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-radio-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-radio-checked-18" />
      </svg>
      <span> Menu Item 3 </span>
    </div>
  </div>
</span>

Filter menu button - with footer

To add a filter menu button with a footer, include .menu__footer container

Menu Item 1
Menu Item 2
Menu Item 3
<span class="menu menu--filter">
  <div class="menu__items" role="menu">
    <div class="menu__item" role="menuitemcheckbox" aria-checked="true">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-checkbox-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-checkbox-checked-18" />
      </svg>
      <span> Menu Item 1 </span>
    </div>
    <div class="menu__item" role="menuitemcheckbox" aria-checked="true">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-checkbox-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-checkbox-checked-18" />
      </svg>
      <span> Menu Item 2 </span>
    </div>
    <div class="menu__item" role="menuitemcheckbox" aria-checked="false">
      <svg class="icon icon--18 icon--unchecked" height="18" width="18">
        <use href="#icon-checkbox-unchecked-18" />
      </svg>
      <svg class="icon icon--18 icon--checked" height="18" width="18">
        <use href="#icon-checkbox-checked-18" />
      </svg>
      <span> Menu Item 3 </span>
    </div>
  </div>
  <div class="menu__footer">
    <button class="btn btn--tertiary" type="submit">Apply</button>
  </div>
</span>
Menu Button ComponentNumber Input Component
Evo Web

Building accessible and performant components for the modern, responsive web. Empowering developers to create inclusive user experiences.

© 2025 Evo Web. All rights reserved.

Main

  • Components
  • Accessibility
  • Guides
  • Evo CSS Components
  • Evo Marko Components
  • Evo React Components
  • Sitemap

Web Guides and Best Practices

  • Page Grid Use Guide
  • Animation Guide
  • Skeleton Use Guide