11

In a website I'm working on right now, I have a section element which type is set to "main". According to WAI-ARIA, the section element can use main as role attribute (role="main").

However, when I run my site through the W3C validator, I get a "Bad value main for attribute role on element section." error. I used the main value in another website previously, and it did pass the validation, but now it's no longer valid, reporting the same error.

Has the HTML5 specification changed recently and took out the main value? Should I believe the WAI-ARIA or the W3C validator? Is the WAI-ARIA page out of date? Should I just keep the section element without any role attribute (which will revert to the "region" default value)?

Any thoughts and tips on this would be appreciated :)

4

3 回答 3

4

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;mainHTML5.1 包括通过元素对 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, brand wbr, 也许其他一些。显然,其中许多是具有隐含语义的专业元素,并且只能在某些上下文中使用以使其自身有效。最有可能的是maindiv,或者article将是最适合使用的元素。有关更多信息,请参阅https://dvcs.w3.org/hg/aria-unofficial/raw-file/tip/index.html#recommendations-table

于 2013-04-29T23:56:40.127 回答
2

现在尘埃落定,很明显代码<section role="main"></section>没问题并通过了验证器

它确实在此表中声明该main角色对于section元素是有效的,因此应该如此

如果您考虑一下,使这种语法无效是荒谬的,想要以特定方式创建文档大纲的人应该能够这样做,而不必被迫做类似<main role="main"><section></section></main>解决问题的事情,那就是荒诞。

于 2013-12-07T22:17:05.440 回答
1

将验证器的 HTML Doctype 选项切换为 HTML5,它应该可以工作,至少使用<div>. 我刚刚针对下面的标记运行了验证器,它验证了:

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

HTML5 验证被标记为实验性的,这可以解释为什么它在<section>.

另请注意,验证不是可访问性的先决条件。最好包含role属性并失败验证,从而阻止屏幕阅读器用户使用该功能。

于 2013-04-29T20:35:02.023 回答