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

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

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

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

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


person HCkev    schedule 29.04.2013    source источник
comment
Возможно, это как-то связано с новым элементом <main>, но, насколько я вижу, спецификации по-прежнему разрешают role="main" на <section>. Возможно, это просто ошибка валидатора.   -  person robertc    schedule 29.04.2013
comment
Да, вот что мне интересно, это ошибка валидатора или мне следует прекратить использовать role=main. Я не мог найти ничего об этом в Интернете.   -  person HCkev    schedule 29.04.2013
comment
Единственный путь вперед — спросить людей, которые поставляют валидатор.   -  person robertc    schedule 29.04.2013
comment
role=main по-прежнему действителен, как и другие атрибуты aria, которые сопоставляются с элементами html5.   -  person David Storey    schedule 01.05.2013
comment
Да, я думаю, это ошибка в валидаторе. Буду ждать, исправят ли.   -  person HCkev    schedule 01.05.2013


Ответы (3)


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

Если вам нужно использовать тип документа, где он недействителен и вы должны его проверить, вы можете добавить его через 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, dfn, dfn, s 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

person David Storey    schedule 29.04.2013
comment
Примечание. Элемент main не является секционирующим элементом, поэтому вам может понадобиться элемент section. - person unor; 30.04.2013
comment
На самом деле я использую тип документа HTML 5, но он больше не проверяется. Я предполагаю, что это ошибка валидатора, может быть, я подожду немного и посмотрю, что произойдет. Я не думаю, что элемент main будет работать в моем случае. На главной странице у меня есть элемент section с role="marquee" (слайд jQuery), за которым следует section, отображающий список услуг, и, наконец, элемент section с role="main", который не проверяется. - person HCkev; 01.05.2013
comment
Роль main предназначена для включения в документ только один раз и для переноса всего основного содержимого (не заголовка, навигации и т. д.). Вы используете ее таким образом? - person David Storey; 01.05.2013
comment
Если вы используете его правильно, он подтверждает. См. html5.validator.nu/ - person David Storey; 01.05.2013
comment
За исключением того, что атрибут role использовался для div, а не section. Если вы измените div на section, это даст ту же ошибку проверки. - person HCkev; 02.05.2013
comment
Таким образом, кажется, что main больше не действителен в разделе. Это имеет смысл, так как должен быть только один main, а раздел обычно является одним из многих в документе, иначе это не совсем раздел. - person David Storey; 02.05.2013
comment
Существуют определенные роли, которые рекомендуется использовать для каждого элемента. Я отредактирую свой ответ соответствующим образом. - person David Storey; 03.05.2013
comment
Большое спасибо. Определенно были внесены изменения. Я тоже столкнулся со странной ошибкой валидатора. Для меню у меня есть элемент <ul> с role="menubar", а у <li> есть role="menuitem". Это прошло проверку на прошлой неделе, но теперь я получаю сообщение об ошибке Bad value item for attribute role on element li; Если я удалю role="menuitem", появится другая ошибка: Только элементы с role=menuitem или role=menuitemradio или role=menuitemcheckbox или role=presentation могут быть дочерними элементами элемента с role=menubar. Довольно противоречиво... - person HCkev; 06.05.2013

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

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

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

person Matt Kieran    schedule 07.12.2013

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

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

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

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

person ckundo    schedule 29.04.2013