Editor Menubar Example

About This Example

The following example demonstrates using the Menubar Pattern to provide access to editing actions for a text area. Each item in the menubar identifies a category of text formatting actions that can be executed from its submenu. The submenus demonstrate menuitemradio and menuitemcheckbox elements.

Similar examples include:

Example

More information on Gettysburg Address

Accessibility Features

Keyboard Support

Menubar

Key Function
Space
Enter
Opens submenu and moves focus to first item in the submenu.
Escape If a submenu is open, closes it. Otherwise, does nothing.
Right Arrow
  • Moves focus to the next item in the menubar.
  • If focus is on the last item, moves focus to the first item.
Left Arrow
  • Moves focus to the previous item in the menubar.
  • If focus is on the first item, moves focus to the last item.
Down Arrow Opens submenu and moves focus to first item in the submenu.
Up Arrow Opens submenu and moves focus to last item in the submenu.
Home Moves focus to first item in the menubar.
End Moves focus to last item in the menubar.
Character
  • Moves focus to next item in the menubar having a name that starts with the typed character.
  • If none of the items have a name starting with the typed character, focus does not move.

Submenu

Key Function
Space
Enter
Activates menu item, causing action to be executed, e.g., bold text, change font.
Escape
  • Closes submenu.
  • Moves focus to parent menubar item.
Right Arrow
  • Closes submenu.
  • Moves focus to next item in the menubar.
  • Opens submenu of newly focused menubar item, keeping focus on that parent menubar item.
Left Arrow
  • Closes submenu.
  • Moves focus to previous item in the menubar.
  • Opens submenu of newly focused menubar item, keeping focus on that parent menubar item.
Down Arrow
  • Moves focus to the next item in the submenu.
  • If focus is on the last item, moves focus to the first item.
Up Arrow
  • Moves focus to previous item in the submenu.
  • If focus is on the first item, moves focus to the last item.
Home Moves focus to the first item in the submenu.
End Moves focus to the last item in the submenu.
Character
  • Moves focus to the next item having a name that starts with the typed character.
  • If none of the items have a name starting with the typed character, focus does not move.

Role, Property, State, and Tabindex Attributes

Menubar

Role Attribute Element Usage
menubar ul
aria-label="string" ul
  • Defines an accessible name for the menubar.
  • Helps assistive technology users understand the purpose of the menubar and distinguish it from any other menubars or similar elements on the page.
menuitem span
  • Identifies the element as a menu item within the menubar.
  • Accessible name comes from the text content.
tabindex="-1" span Makes the menuitem element keyboard focusable but not part of the Tab sequence of the page.
tabindex="0" span
  • Makes the menuitem element keyboard focusable and part of the tab sequence of the page.
  • Only one menuitem in the menubar has tabindex="0".
  • When the page loads, the first item in the menubar has tabindex="0".
  • Focus is managed using the practice for Managing Focus Within Components Using a Roving tabindex.
aria-haspopup="true" span Indicates that the menuitem has a submenu.
aria-expanded="true" span
  • Indicates the submenu is open.
  • The visual appearance of the expanded state is synchronized with the aria-expanded value using CSS attribute selectors and hidden from screen readers with aria-hidden="true".
aria-expanded="false" span
  • Indicates the submenu is closed.
  • The visual appearance of the expanded state is synchronized with the aria-expanded value using CSS attribute selectors and hidden from screen readers with aria-hidden="true".
aria-hidden="true" span Removes the character entities used to represent the down arrow icons for parent menu items from the accessibility tree to prevent them from being included in the accessible name of the menu item.

Submenu

Role Attribute Element Usage
menu ul
aria-label="string" ul Defines an accessible name for the menu.
menuitem li
  • Identifies the element as an item in the submenu.
  • Accessible name comes from the text content.
tabindex="-1" li Makes the item focusable but not part of the page tab sequence.
aria-disabled="false" li Used on the font size "Smaller" and "Larger" options to indicate they are active.
aria-disabled="true" li Used on the font size "Smaller" and "Larger" options to indicate one of the options is not active because the largest or smallest font has been selected.
menuitemcheckbox li
  • Identifies the element as a menuitemcheckbox.
  • Accessible name comes from the text content.
tabindex="-1" li Makes the menuitemcheckbox focusable but not part of the page tab sequence.
aria-checked="true" li
  • Indicates that the menuitemcheckbox is checked.
  • The visual appearance of the selected state is synchronized with the aria-checked value using CSS attribute selectors and hidden from screen readers with aria-hidden="true".
aria-checked="false" li
  • Indicates that the menuitemcheckbox is NOT checked.
  • The visual appearance of the selected state is synchronized with the aria-checked value using CSS attribute selectors and hidden from screen readers with aria-hidden="true".
aria-hidden="true" span Removes the character entities that visually represent the checked state of menuitemcheckbox elements from the accessibility tree to prevent them from being included in the accessible name of the menu item.
separator li
  • Identifies the element as a visual separator between groups of items within a menu, such as groups of menuitemradio or menuitemcheckbox elements.
  • Is not focusable but may be perceivable by a screen reader user when using a reading cursor that does not depend on focus.
group ul
  • Identifies the element as a container for a set of menuitemradio elements.
  • Enables browsers to compute values of aria-setsize and aria-posinset.
aria-label="string" ul Provides an accessible name for the group of menu items.
menuitemradio li
  • Identifies the element as a menuitemradio element.
  • When all items in a submenu are members of the same radio group, the group is defined by the menu element; a group element is not necessary.
  • Accessible name is computed from the text content.
tabindex="-1" li Makes the menuitemradio focusable but not part of the page tab sequence.
aria-checked="true" li
  • Indicates the menuitemradio is checked.
  • The visual appearance of the selected state is synchronized with the aria-checked value using CSS attribute selectors and hidden from screen readers with aria-hidden="true".
aria-checked="false" li
  • Indicates that the menuitemradio is NOT checked.
  • The visual appearance of the selected state is synchronized with the aria-checked value using CSS attribute selectors and hidden from screen readers with aria-hidden="true".
aria-hidden="true" span Removes the character entities that visually represent the checked state of menuitemradio elements from the accessibility tree to prevent them from being included in the accessible name of the menu item.

Textarea

Role Attribute Element Usage
aria-label="string" textarea Defines an accessible name for the textarea.

JavaScript and CSS Source Code

HTML Source Code