Simple Vertical Menu

A basic vertical menu with Up/Down arrow navigation.

focusgroup="menu"
Try it: Tab to (or click) a menu item, then use and to navigate between items.
View source
<div focusgroup="menu" aria-label="File actions"
     class="menu-vertical">
    <button type="button" class="menu-item">New</button>
    <button type="button" class="menu-item">Open…</button>
    <button type="button" class="menu-item">Save</button>
    <button type="button" class="menu-item">Exit</button>
</div>

A horizontal menubar. menubar defaults to inline (Left/Right) navigation between top-level items. Each submenu uses a separate focusgroup="menu" which defaults to block (Up/Down) navigation. Submenus use the popover attribute for display.

focusgroup="menubar"
Try it: Tab to the menubar. Use to move between top-level items. Press Enter or Space to open a submenu, then use inside. Press Escape to close and return focus to the menu bar item.
View source
<ul role="menubar" focusgroup="menubar"
     aria-label="Application Menu" class="menubar">
    <li role="none">
        <button role="menuitem" type="button" class="menubar-item"
             aria-haspopup="menu" aria-expanded="false"
             popovertarget="filemenu">File</button>
        <ul role="menu" focusgroup="menu"
             id="filemenu" popover aria-label="File submenu" class="submenu">
            <li role="none"><button type="button" class="submenu-item"
                 autofocus>New</button></li>
            <li role="none"><button type="button" class="submenu-item">Open</button></li>
            <li role="none"><button type="button" class="submenu-item">Save</button></li>
        </ul>
    </li>
    <!-- More menu items... -->
</ul>

Key Point: Independent Nested Scopes

When a focusgroup is nested inside another, they are completely independent. Each has its own navigation axis, wrapping behavior, memory, and entry point. Arrow keys only affect the focusgroup that currently has focus within it.

In the menubar example above: