Яка мета атрибута "роль" у HTML?


1165

Я продовжую бачити атрибути ролі у творчості деяких людей. Я також його вживаю, але не впевнений у його ефекті.

Наприклад:

<header id="header" role="banner">
    Header stuff in here
</header>

Або:

<section id="facebook" role="contentinfo">
    Facebook stuff in here
</section>

Або:

<section id="main" role="main">
     Main content stuff in here
</section>

Чи необхідний цей атрибут ролі?

Чи кращий цей атрибут для семантики?

Чи покращує це SEO?

Список ролей можна знайти тут , але я бачу, як деякі люди складають свої власні. Чи дозволено це чи правильне використання атрибута ролі?

Будь-які думки з цього приводу?

Відповіді:


1005

Більшість ролей, які ви бачите, були визначені як частина 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, щоб уникнути class-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є дійсні ролі, і тому роль посилання буде застосована тому, що вона стає першою. Якщо ви використовуєте власні ролі, переконайтеся, що вони не суперечать жодній визначеній ролі в ARIA або мові хоста, яку ви використовуєте (HTML, SVG, MathML тощо)


19
Це посилання також може бути корисним. Використання ARIA в HTML. rawgithub.com/w3c/aria-in-html/master/index.html
Джеймс Крейг

6
Чому ви поставили універсальний селектор перед [role = "button"]?
Євгеній

5
@EugeneXa я гадаю, щоб точно визначити будь-який елемент із [role="button"]заощадженнямa[role="button"], span[role="button"]
ngplayground

4
"Через кілька років ця методика, ймовірно, стане непотрібною". Що-небудь про доступність, але, наприклад, такі як кутові та веб-компоненти, що створюють власні теги, я можу уявити, що це стає більш необхідним.
xdhmoore

8
@xdhmoore Я думаю, що він конкретно мав на увазі надмірну техніку встановлення ролі на те саме значення, що і тег, а не використання roleв цілому.
willlma

159

Як я розумію, ролі спочатку були визначені XHTML, але були застарілими. Однак тепер вони визначені HTML 5, дивіться тут: https://www.w3.org/WAI/PF/aria/roles#ab абстракт_roles_header

Мета атрибуту ролі - визначити для розбору програмного забезпечення точну функцію елемента (та його дітей) як частини веб-програми. Це здебільшого як доступність для читачів екранів, але я також можу вважати це корисним для вбудованих браузерів та скребків екрана. Для того, щоб бути корисним для незвичного клієнта HTML, атрибут потрібно встановити на одну з ролей із специфікації, яку я пов’язав. Якщо ви складете свій власний, цей "майбутній" функціонал не може працювати - коментар буде кращим.

Практики тут: http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/


20

Чи необхідний цей атрибут ролі?

Відповідь: Так .

  • Атрибут ролі необхідний для підтримки Доступних додатків багатого Інтернету ( WAI-ARIA ) для визначення ролей в мовах на основі XML, коли мови не визначають власний атрибут ролі.
  • Хоча це атрибут ролі публікується Робочою групою протоколів та форматів , атрибут також має більш загальні випадки використання.

Він надає вам:

  • Доступність
  • Пристосування пристрою
  • Обробка на стороні сервера
  • Опис складних даних, ... тощо.

3
Чи можете ви, будь ласка, пояснити значення Доступності, Адаптації пристрою та Комплексного опису даних. Я новинка у веб-програмуванні, тому ці терміни для мене трохи нові. Дякую!
Manish Jain

11

Я усвідомлюю, що це старе питання, але інший можливий розгляд залежно від ваших точних вимог полягає в тому, що перевірка на https://validator.w3.org/ генерує попередження таким чином:

Попередження: роль форми не потрібна для форми елемента.


1
Можливо, downvoter бажає прокоментувати? Я відповів на питання ОП "Чи необхідний цей атрибут ролі?"
dotnetnutty

0

Рольовий атрибут в основному покращує доступність для людей, які використовують зчитувачі екрана. У кількох випадках ми використовуємо його, такі як доступність, адаптація пристрою, обробка на стороні сервера та складний опис даних. Знайте більше, натисніть: https://www.w3.org/WAI/PF/HTML/wiki/RoleAttribute .


2
Будь ласка, розкривайте будь-які приналежності та не використовуйте сайт як спосіб просування вашого сайту шляхом публікації. Див. Як написати гарну відповідь? .
Іветт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.