Правильное обращение Арии с навигацией по хлебным крошкам
Что можно сделать, чтобы улучшить доступность меню хлебных крошек, подобного:
<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
была бы более подходящей. ИМХО, это перебор.