2.23.0
Menus offer a contextual set of options in a Popover.
Use for a single-level menu of options.
<div class="mds-menu">
<div class="mds-popover__wrapper mds-popover--overlay-closable mds-popover--overlay-dismissible">
<button class="mds-button mds-popover__trigger mds-button--secondary" type="button" data-mds-popover="mds-popover--58427" aria-haspopup="true" aria-expanded="true" aria-controls="mds-popover--58427">
<span class="mds-button__text">
Open Menu
</span>
<svg class="mds-icon mds-button__icon mds-button__icon--right" aria-hidden="true">
<use xlink:href="#caret-down--s">
</use>
</svg>
</button>
<div class="mds-popover__overlay"></div>
<section id="mds-popover--58427" class="mds-popover mds-popover mds-popover--bottom-right mds-popover--width-200px" role="tooltip">
<header class="mds-popover__header">
<h2 class="mds-popover__title">
Workbook
</h2>
</header>
<div class="mds-popover__content">
<ul class="mds-list-group" role="menu">
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Create New
</span>
</a>
</li>
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Open
</span>
</a>
</li>
<li class="mds-list-group__item mds-list-group__item--disabled" role="none">
<a href="#" class="mds-list-group__link " aria-disabled="true" role="menuitem">
<span class="mds-list-group__item-text">
Save
</span>
</a>
</li>
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Save As
</span>
</a>
</li>
</ul>
</div>
</section>
</div>
</div>
<mds-button variation="secondary" id="default-trigger" icon-right="caret-down--s">Open Menu</mds-button>
<!-- Popover must be appended at the end of the <body> -->
<mds-popover triggered-by="default-trigger" id="test1" title="Workbook" width="200px" menu>
<mds-list-group content='[
{
"text": "Create New",
"href": "#"
},
{
"text": "Open",
"href": "#"
},
{
"text": "Save",
"href": "#",
"disabled": true
},
{
"text": "Save As",
"href": "#"
}
]'></mds-list-group>
</mds-popover>
<div class="mds-menu">
<div class="mds-popover__wrapper mds-popover--overlay-closable mds-popover--overlay-dismissible">
<button class="mds-button mds-popover__trigger mds-button--secondary" type="button" data-mds-popover="mds-popover--29948" aria-haspopup="true" aria-expanded="true" aria-controls="mds-popover--29948">
<span class="mds-button__text">
Open Menu
</span>
<svg class="mds-icon mds-button__icon mds-button__icon--right" aria-hidden="true">
<use xlink:href="#caret-down--s">
</use>
</svg>
</button>
<div class="mds-popover__overlay"></div>
<section id="mds-popover--29948" class="mds-popover mds-popover mds-popover--bottom-right mds-popover--width-200px" role="tooltip">
<div class="mds-popover__content">
<ul class="mds-list-group" role="menu">
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Create New
</span>
</a>
</li>
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Open
</span>
</a>
</li>
<li class="mds-list-group__item mds-list-group__item--disabled" role="none">
<a href="#" class="mds-list-group__link " aria-disabled="true" role="menuitem">
<span class="mds-list-group__item-text">
Save
</span>
</a>
</li>
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Save As
</span>
</a>
</li>
</ul>
</div>
</section>
</div>
</div>
<mds-button variation="secondary" id="noheader-trigger" icon-right="caret-down--s">Open Menu</mds-button>
<!-- Popover must be appended at the end of the <body> -->
<mds-popover triggered-by="noheader-trigger" id="test1" title-hidden width="200px" menu>
<mds-list-group content='[
{
"text": "Create New",
"href": "#"
},
{
"text": "Open",
"href": "#"
},
{
"text": "Save",
"href": "#",
"disabled": true
},
{
"text": "Save As",
"href": "#"
}
]'></mds-list-group>
</mds-popover>
Includes an icon to indicate a default or previously chosen item from a list of options.
<div class="mds-menu">
<div class="mds-popover__wrapper mds-popover--overlay-closable mds-popover--overlay-dismissible">
<button class="mds-button mds-popover__trigger mds-button--secondary" type="button" data-mds-popover="mds-popover--61135" aria-haspopup="true" aria-expanded="true" aria-controls="mds-popover--61135">
<span class="mds-button__text">
Open Menu
</span>
<svg class="mds-icon mds-button__icon mds-button__icon--right" aria-hidden="true">
<use xlink:href="#caret-down--s">
</use>
</svg>
</button>
<div class="mds-popover__overlay"></div>
<section id="mds-popover--61135" class="mds-popover mds-popover mds-popover--bottom-right mds-popover--width-200px" role="tooltip">
<div class="mds-popover__content">
<ul class="mds-list-group" role="menu">
<li class="mds-list-group__item mds-list-group__item--active" role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Option 1
</span>
<svg class="mds-icon mds-list-group__active-icon" aria-hidden="true">
<use xlink:href="#check--s">
</use>
</svg>
</a>
</li>
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Option 2
</span>
</a>
</li>
<li class="mds-list-group__item mds-list-group__item--disabled" role="none">
<a href="#" class="mds-list-group__link " aria-disabled="true" role="menuitem">
<span class="mds-list-group__item-text">
Option 3
</span>
</a>
</li>
<li class="mds-list-group__item " role="none">
<a href="#" class="mds-list-group__link " role="menuitem">
<span class="mds-list-group__item-text">
Option 4
</span>
</a>
</li>
</ul>
</div>
</section>
</div>
</div>
<mds-button variation="secondary" id="selection-trigger" icon-right="caret-down--s">Open Menu</mds-button>
<!-- Popover must be appended at the end of the <body> -->
<mds-popover triggered-by="selection-trigger" id="test1" title-hidden width="200px" menu>
<mds-list-group variation="selection" content='[
{
"text": "Option 1",
"href": "#",
"active": true
},
{
"text": "Option 2",
"href": "#"
},
{
"text": "Option 3",
"href": "#",
"disabled": true
},
{
"text": "Option 4",
"href": "#"
}
]'></mds-list-group>
</mds-popover>
check--s
, to indicate selected item.Menus are built using List Groups and Popovers. The size of a menu is defined by the nested List Group and the width is defined by the nested Popover. Refer to the Sizing sections of the List Group and Popover component pages for the corresponding documentation.
caret-down--s
.caret-down--s
, is included to the right of the label.escape
.Refer to the class reference sections for List Groups and Popovers.
Create a menu by placing a List Group within the default slot of a Popover and setting the Popover’s menu
prop to true
.
mds-popover__title
of a Popover, teams should use the header tag (<h#>
) which properly places the content within their product's information hierarchy.As menu is simply a wrapper, the accessibility guidelines covered in Popovers and List Groups should be followed, with the following caveats:
role=”tooltip”
to role=”menu”
to present a list of actions, mds-list-group
.role=”menuitem”
to link items, mds-list-group__link
.aria-labelledby=”[Trigger Button ID]”
attribute.tabindex=”-1”
to both Popover, mds-popover
, and List Group links item, mds-list-group__item
.Additionally, update the Button component that triggers the menu to change its behavior:
aria-haspopup=”true”
to the trigger button.aria-expanded=”false”
to the trigger button and dynamically update the value to true
when menu is open.aria-controls=”[Popover ID]”
to the trigger button.