Правильное обращение Арии с навигацией по хлебным крошкам
Что можно сделать, чтобы улучшить доступность меню хлебных крошек, подобного:
<ul class="breadcrumbs" aria-label="breadcrumb navigation" role="navigation">
<li><a href="~/">Home</a></li>
<li><a href="~/news">News</a></li>
<li class="unavailable"><a href="#">@Model.Title</a></li>
</ul>
В данном примере Home-это корень сайта, News-первый потомок, а недоступный класс-текущий элемент элемента / news / article.
Можно ли что-нибудь сделать, чтобы улучшить это, например, используя атрибуты rel или атрибуты aria-level?
4 ответа:
Я бы избегал использования
aria-levelи использовал вместо этого элемент<ol>. Лучше всего избегать использования атрибутов aria везде, где существует собственная альтернатива. Использование арии добавляет дополнительный уровень сложности. Простой HTML намного лучше и уже имеет семантику, которая проявляется в AT. Это Первое правило Ария.Заимствуя из документа WAI-ARIA-Practices , хлебные крошки выглядели бы примерно так:
<nav aria-label="Breadcrumb" class="breadcrumb"> <ol> <li> <a href="../../"> WAI-ARIA Authoring Practices 1.1 </a> </li> <li> <a href="../../#aria_ex"> Design Patterns </a> </li> <li> <a href="../../#breadcrumb"> Breadcrumb Pattern </a> </li> <li> <a href="./index.html" aria-current="page"> Breadcrumb Example </a> </li> </ol> </nav>Некоторые Примечания:
- упаковка хлебных крошек в элемент
<nav>позволяет пользователям программы чтения с экрана быстро находить и переходить к хлебным крошкам.- используя элемент
<ol>, можно выполнить заказ для пользователей программы чтения с экрана.<ol>должен быть дочерним от<nav>. Некоторые реализации применяютсяrole="nav"к самому<ol>. Это неверно и переопределит семантику по умолчанию<ol>.aria-currentсообщает пользователям программы чтения с экрана, что это текущая страница. Если последний хлебный мякиш для текущая страница не является ссылкой, атрибутaria-currentнеобязателен.
Переходя от использования программы чтения с экрана и чтения этого сообщения в блоге, атрибуты
relне будут иметь значения для A. T. Что касается использованияaria-level, это работает, если вы поместите его на якорные теги. Я бы также посоветовал обернуть список в элементnav, для семантических целей и для того, чтобы избежать необходимости добавлять в список роль навигации, когда вам это не нужно.Я закончил с этой разметкой для того, что я считаю не слишком плохой хлебной крошкой. Скрыть пули с помощью CSS (я не останавливался, чтобы сделать это я боится) и я бы сказал, что это хорошо.
<nav aria-label="breadcrumb" role="navigation"> <ul> <li><a href="#" aria-level="1">Home</a></li> <li><a href="#" aria-level="2">News</a></li> </ul> </nav>Надеюсь, это поможет!
Вы можете использовать как показано ниже
<nav role="navigation" aria-label="breadcrumbs"> <p id="breadcrumblabel">You are here:</p> <ol id="breadcrumb" aria-labelledby="breadcrumblabel"> <li><a href="index.html" title="Home">Home</a></li> <li><a href="products.html" title="Menu1">Menu1</a></li> <li><a href="shoes.html" title="Menu2">Menu2</a></li> </ol> </nav>
При поиске в Интернете полного решения на доступных хлебных крошках, решение @ Craig Brett казалось хорошим на первый взгляд. Но после прочтения нескольких источников,
aria-level, кажется, неправильно используется там (кроме проблемы проверки W3C, см. Мой комментарий выше).
Поэтому я хотел бы предложить такой подход:<nav aria-labelledby="bc-title" role="navigation"> <h6 id="bc-title" class="vis-off">You are here:</h6> <a href="~/" aria-labelledby="bc-level-1"> <span id="bc-level-1" class="vis-off">Homepage Website-Title </span>Home </a> <a href="~/news" aria-labelledby="bc-level-2"> <span id="bc-level-2" class="vis-off">Level 2: News </span>News </a> <a href="#" aria-disabled="true">@Model.Title</a> </nav>В этом решении у нас есть HTML5-секционирующий элемент (
nav), который должен иметь заголовок, и *tada* есть. Классvis-offобозначает элемент, который является просто доступны для чтения с экрана. С помощьюaria-labelledbyя говорю экранному читателю прочитать этот заголовок.В отличие от решения Криса, либо
PS: Я не используюнотацию BEM здесь, чтобы сократить идентификаторы и классы для удобства чтения.<ul>, либоaria-levelисчезает.
Я бы так или иначе пошел на<ol>, Если это необходимо, потому что элементы находятся в порядке . Лучше оставить его, иначе он становится очень многословным во многих читателях экрана на каждой странице ("пункт списка 1...").aria-levelкажется, неправильно используется в решении выше в моем понимании. Он должен быть дитя атрибута роли, такого как f. e.role="list"и эта роль просто означает не структурно размеченныенеинтерактивные списки.
Возможно, рольtreeitemбыла бы более подходящей. ИМХО, это перебор.