Короткий ответ: ты не можешь.Когда вы указываете role
, это подсказывает программе чтения с экрана (SR), что объект будет вести себя определенным образом.Когда SR увидит menu
, он объявит, что вы можете использовать клавиши со стрелками вверх / вниз для навигации, подобно тому, как он скажет «нажмите пробел, чтобы активировать», когда он увидит role="button"
.
Однако обычный пользователь СР поймет, что когда он слышит «меню», он знает, что будет использовать вверх / вниз или влево / вправо для навигации по меню и, в общем, будет игнорироватькак SR сказал им взаимодействовать.Фактически, опытные пользователи SR, вероятно, изменят свое многословие на «низкий», чтобы фраза взаимодействия («использовать стрелки вверх / вниз» или «нажимать пробел») вообще не была объявлена.
ПокаВы следуете шаблону « взаимодействие с клавиатурой » для меню, все должно быть в порядке.
Теперь, сказав, что вы могли бы иметь возможность использовать (в некоторой степени) новый атрибут aria-roledescription
, но я не уверен, насколько хорошо он поддерживается во всех комбинациях браузеров и программ чтения с экрана.Установка его значения может просто повлиять на объявление о «меню», а не изменить сообщение «использовать клавиши со стрелками».Вам придется провести некоторое тестирование.
Обратите внимание, что ваш оригинальный пример немного странный.У вас есть две вкладки для каждого пункта меню.Один для
(потому что он имеет tabindex = "0") и один для ссылки.В действительности нет необходимости во внутренних
элементах.Просто есть что-то вроде:
<div class="ul" role="menu">
<a role="menuitem" href="#home">Home</a>
<a role="menuitem" href="#news">News</a>
<a role="menuitem" href="#contact">Contact</a>
<a role="menuitem" href="#about">About</a>
</div>