Недопустимое значение атрибута роли для элемента раздела?
На веб-сайте, над которым я сейчас работаю, у меня есть элемент раздела, для которого задано значение "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>
, чтобы обойти проблема, это было бы просто абсурдом.