Недопустимое значение атрибута роли для элемента раздела?

На веб-сайте, над которым я сейчас работаю, у меня есть элемент раздела, для которого задано значение "main". Согласно WAI-ARIA, элемент section может использовать main как атрибут role (role="main").

Однако, когда я запускаю свой сайт через валидатор W3C, я получаю "Плохое значение для роли атрибута в разделе элемента". ошибка. Ранее я использовал значение main на другом веб-сайте, и он прошел проверку, но теперь он более недействителен, сообщая о той же ошибке.

Недавно изменилась спецификация HTML5 и вывела значение main? Должен ли я верить WAI-ARIA или валидатору W3C? Является ли страница WAI-ARIA устаревшей? Должен ли я просто сохранить элемент section без атрибута роли (который вернется к значению по умолчанию для региона)?

Любые мысли и советы по этому поводу будут оценены:)

Ответ 1

Роль main действительна или не зависит от используемого типа doctype. Если вы используете HTML-тип документа: <!DOCTYPE html>, он должен быть проверен. Если вы используете более ранний doctype, такой как XHMTL или html4, это не будет. Подробнее см. https://developer.mozilla.org/en-US/docs/Accessibility/ARIA/Web_applications_and_ARIA_FAQ#What_about_validation.3F.

Если вам нужно использовать doctype, где он недопустим, и вы должны подтвердить его, вы можете добавить их через JavaScript. Это позволит избежать проблем с проверкой.

Однако роль main будет проверяться только при использовании определенных элементов. Для элемента section допустимые роли: alert, alertdialog, application, contentinfo, dialog, document, log, marquee, search и status.

Последняя версия HTML; HTML5.1 включает встроенную поддержку main через элемент main. Вы можете использовать этот элемент вместо <section role="main">. См. http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-element

Другие элементы, которые могут использоваться с role="main", включают article, div, figure, canvas, p, pre, blockquote, output, span, table, td, tr, em, strong, small, s, cite, q, dfn, abbr, time, code, var, samp, kbd, sub, sup, i, b, u, mark, ruby, rt, rp, bdi, bdo, br и wbr, и, возможно, некоторые другие. Очевидно, что многие из них являются специализированными элементами с подразумеваемой семантикой и могут использоваться только в определенном контексте, чтобы быть действительными сами. Скорее всего, наиболее подходящим элементом будет использовать main, div или article. Для получения дополнительной информации см. https://dvcs.w3.org/hg/aria-unofficial/raw-file/tip/index.html#recommendations-table

Ответ 2

Переключите параметр HTML Validate HTML Validate в HTML5, и он должен работать, по крайней мере, с помощью <div>. Я просто запустил валидатор против разметки ниже и подтвердил:

<!DOCTYPE html>
<head><title>Foo</title></head>
<body>
<div role='main'>
<p>foo</p>
</div>
</body>

Проверка HTML5 отмечена как экспериментальная, что может объяснить, почему у нее неожиданное поведение с <section>.

Отметим также, что валидация не является обязательным условием доступности. Лучше включить атрибут role и проверить отказоустойчивость, которая удерживает эту функцию у пользователей программы чтения с экрана.

Ответ 3

Теперь, когда пыль осела, довольно очевидно, что код <section role="main"></section> хорош и проходит в validator.

Он указывает прямо здесь, в этой таблице, что роль main является допустимой для элемента section и поэтому он должен.

Если вы подумаете об этом, было бы смешно сделать этот синтаксис недействительным, люди, которые хотят создать свою схему документа определенным образом, должны быть в состоянии сделать это, не будучи вынуждены делать что-то вроде <main role="main"><section></section></main>, чтобы обойти проблема, это было бы просто абсурдом.