Кратко
СкопированоСамостоятельная роль виджета из WAI-ARIA для подменю в «настоящем» меню, как в программе.
В подменю находится список кнопок, чекбоксов, радиокнопок и других интерактивных элементов, которые что-то изменяют в интерфейсе. Обычно открывается по желанию пользователя, а пункты в нём расположены вертикально — друг под другом.
В HTML нет тега с ролью menu.
Пример
Скопировано
<div role="menubar"> <!-- Другие элементы строки меню --> <ul role="menu" id="fonts" tabindex="-1" > <!-- Содержимое подменю --> </ul></div>
<div role="menubar">
<!-- Другие элементы строки меню -->
<ul
role="menu"
id="fonts"
tabindex="-1"
>
<!-- Содержимое подменю -->
</ul>
</div>
Как пишется
СкопированоЗадайте любому HTML-тегу атрибут role, лучше всего <div> или <ul>.
Меню, как и любая другая навигация, должно содержать как минимум один элемент. Это может быть обычный пункт menuitem, дополнительно раскрывающий ещё одно подменю (попап) menu, пункт в виде чекбокса menuitemcheckbox или пункт в виде радиокнопки menuitemradio.
Пункты меню могут располагаться отдельно или объединяться в группы с ролью group. Когда в меню несколько групп, их можно отделить друг от друга обычными (неинтерактивными) разделителями с ролью separator.
<ul role="menu"> <span role="group"> <li role="presentation"> <span role="menuitemcheckbox" aria-selected="true" tabindex="0" > Внешний вид </span> </li> <li role="presentation"> <span role="menuitemcheckbox" aria-selected="false" tabindex="-1" > Ориентация страницы </span> </li> </span> <span role="separator" aria-orientation="horizontal" > </span> <li role="presentation"> <span role="menuitem" tabindex="-1" > Статистика </span> </li></ul>
<ul role="menu">
<span role="group">
<li role="presentation">
<span
role="menuitemcheckbox"
aria-selected="true"
tabindex="0"
>
Внешний вид
</span>
</li>
<li role="presentation">
<span
role="menuitemcheckbox"
aria-selected="false"
tabindex="-1"
>
Ориентация страницы
</span>
</li>
</span>
<span
role="separator"
aria-orientation="horizontal"
>
</span>
<li role="presentation">
<span
role="menuitem"
tabindex="-1"
>
Статистика
</span>
</li>
</ul>
У menu есть свойство aria со значением vertical по умолчанию. Благодаря значению пользователи скринридеров и других вспомогательных технологий знают, что могут перемещаться по пунктам клавишами со стрелками вниз ↓ и вверх ↑.
Также можете задавать menu все глобальные ARIA-атрибуты и несколько специальных атрибутов виджетов:
aria, когда все элементы меню неактивны, но на них можно сделать фокус;- disabled aria, когда нужно рассказать о выбранном пункте в подменю.- activedescendant
У подменю может быть имя — её краткое название. Если оно видно всем, используйте aria. Когда оно доступно только скринридерам, задайте aria.
<ul role="menu" aria-labelledby="label"> <span id="label">Настройки редактора</span> <!-- Элементы подменю --></ul><ul role="menu" aria-label="Настройки редактора<"> <!-- Элементы подменю --></ul>
<ul
role="menu"
aria-labelledby="label"
>
<span id="label">Настройки редактора</span>
<!-- Элементы подменю -->
</ul>
<ul
role="menu"
aria-label="Настройки редактора<"
>
<!-- Элементы подменю -->
</ul>
У меню особая навигация с клавиатуры.
В меню попадают из строки меню, когда сделали фокус на пункте, который его раскрывает. В этом случае меню должно раскрывать при нажатии на Enter, пробел или стрелку вниз ↓.
Когда находитесь на пункте меню и нажали на Esc, оно должно закрыться, а фокус оказаться на раскрывающем его элементе в строке меню. Если одно меню раскрывает второе, а вы сделали фокус на элементе из второго элемента, оно также должно в этом случае закрыться, а фокус оказаться на открывшем его элементе в первом меню.
Между пунктами меню перемещаются клавишами со стрелками вниз ↓ и вверх ↑. Также клавиша Home должна переносить на первый пункт меню, End — на последний.
Поработайте и над навигацией стрелками влево и вправо, когда раскрыто одно подменю из нескольких. При переходе к другим элементам, связанные с ними подменю автоматически разворачиваются, а предыдущее закрывается. В фокусе может оказаться пункт строки или первый элемент в раскрывшемся подменю.
Если в фокусе радиокнопки menuitemradio или чекбоксы menuitemcheckbox, Enter выбирает их или отменяет предыдущий выбор.
Не обязательно, но при фокусе на пункте меню можно отслеживать нажатие на клавиши с буквами и символами. Пользователи смогут быстро переместиться к нужным пунктам, которые начинаются со знака с нажатой клавиши. Например, попасть на пункт «Настройки» при нажатии на клавишу H.
Управление фокусом
СкопированоДля правильной навигации по меню не обойтись без HTML-атрибута tabindex.
У меню в закрытом состоянии должен быть установлен tabindex, чтобы пользователи клавиатуры не могли случайно попасть внутрь элемента без его открытия.
<ul role="menubar"> <!-- Другие элементы строки меню --> <ul role="menu" id="color" tabindex="-1" > <!-- Содержимое подменю --> </ul></ul>
<ul role="menubar">
<!-- Другие элементы строки меню -->
<ul
role="menu"
id="color"
tabindex="-1"
>
<!-- Содержимое подменю -->
</ul>
</ul>
Как понять
СкопированоОбычное меню на сайтах состоит из ссылок, поэтому достаточно использовать <ul> внутри <nav>.
В классическом, «настоящем» подменю друг под другом размещают кнопки, чекбоксы, радиокнопки и другие интерактивные элементы, которые изменяют внешний вид и содержимое других элементов на странице. В этом случае и пригодится роль menu. Анатомия элемента в виде схемы:
