Большинство ролей, которые вы видите, были определены как часть ARIA 1.0, а затем включены в HTML5. Некоторые из новых элементов HTML5 (диалог, основной и т. Д.) Даже основаны на оригинальных ролях ARIA.
http://www.w3.org/TR/wai-aria/
Есть две основных причины для использования ролей в дополнении к вашему родному смысловому элементу.
Причина № 1. Переопределение роли, в которой ни один элемент основного языка не подходит, или по разным причинам использовался менее семантически подходящий элемент.
В этом примере использовалась ссылка, хотя результирующая функциональность более напоминающая кнопку, чем навигационная ссылка.
<a href="#" role="button" aria-label="Delete item 1">Delete</a>
чтения с экрана будет слышать это как кнопка (в отличие от ссылки), и вы можете использовать селектор атрибутов CSS, чтобы избежать класс-Itis и Div-Itis.
*[role="button"] {
/* style these a buttons w/o relying on a .button class */
}
Причина № 2. Резервное копирование роли собственного элемента для поддержки браузеров, которые реализовали роль ARIA, но еще не реализовали роль собственного элемента.
Например, «основная» роль поддерживалась в браузерах в течение многих лет, но это относительно недавнее дополнение к HTML5, поэтому многие браузеры еще не поддерживают семантику для <main>
.
<main role="main">…</main>
Это технически избыточно, но помогает некоторым пользователям и никому не вредит. Через несколько лет эта техника, скорее всего, станет ненужной.
Вы также писали:
Я вижу, что некоторые люди делают свои собственные. Это разрешено или правильно используется атрибут роли?
Это допустимое использование атрибута, если только действительная роль не включена. Браузеры будут применять первую признанную роль в списке токенов.
<span role="foo link note bar">...</a>
Из списка, только link
и note
являются действительными роли, и поэтому роль ссылка будет применяться, поскольку речь идет о первом. Если вы используете пользовательские роли, убедитесь, что они не вступают в противоречие с какой-либо определенной роли в ВСС или на языке хоста, который вы используете (HTML, SVG, MathML и т.д.)
Возможно, эта ссылка может быть полезна. Использование ARIA в HTML. http://rawgithub.com/w3c/aria-in-html/master/index.html –
Почему вы поставили универсальный селектор перед [role = "button"]? – Evgeny
@EugeneXa моя догадка заключается в том, чтобы указать какой-либо элемент с помощью кнопки '[role =" button]], будет сохраняться необходимость выполнить 'a [role =" button "], span [role =" button "]' – ngplayground