在我正在处理的网站中,我有一个section元素,其类型设置为“main
”。根据{{3}},section
元素可以将main
用作role
属性(role="main"
)。
但是,当我通过W3C验证器运行我的网站时,我得到一个“元素部分属性角色的主值错误”。错误。我之前在其他网站上使用了main
值,它确实通过了验证,但现在它不再有效,报告了相同的错误。
最近是否更改了HTML5规范并取出main
值?我应该相信WAI-ARIA还是W3C验证器? WAI-ARIA页面是否已过期?我应该保留section
元素而不使用任何角色属性(它将恢复为“区域”默认值)吗?
任何关于此的想法和提示都将受到赞赏:)
答案 0 :(得分:4)
main
角色有效与否,具体取决于您使用的doctype。如果您使用的是HTML5文档类型:<!DOCTYPE html>
,则应验证。如果您使用的是早期的文档类型,如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
,{{ 1}},log
,marquee
和search
。
最新版本的HTML; HTML5.1包括通过status
元素对main的本机支持。您可以使用此元素而不是main
。见http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-element
可与<section role="main">
一起使用的其他元素包括role="main"
,article
,div
,figure
,canvas
,{{1 }},p
,pre
,blockquote
,output
,span
,table
,td
,tr
,em
,strong
,small
,s
,cite
,q
,dfn
,abbr
,{ {1}},time
,code
,var
,samp
,kbd
,sub
,sup
,{{1 }},i
,b
,u
,mark
,ruby
,rt
和rp
,也许还有其他一些。显然,其中许多是具有隐含语义的专业元素,并且只能在某些上下文中用于自己有效。最有可能的是,bdi
,bdo
或br
将是最合适的元素。有关详细信息,请参阅https://dvcs.w3.org/hg/aria-unofficial/raw-file/tip/index.html#recommendations-table
答案 1 :(得分:1)
将Validator的HTML Doctype选项切换为HTML5,它应该可以使用,至少使用<div>
。我刚刚针对下面的标记运行了验证器并验证了它:
<!DOCTYPE html>
<head><title>Foo</title></head>
<body>
<div role='main'>
<p>foo</p>
</div>
</body>
HTML5验证被标记为实验性,这可以解释为什么它具有<section>
的意外行为。
另请注意,验证不是可访问性的先决条件。最好包含role
属性,并通过屏幕阅读器用户隐藏该功能的验证失败。
答案 2 :(得分:1)
现在尘埃已经尘埃落定,很明显代码<section role="main"></section>
很好并传入了validator。
状态right here in this table确实main
角色是section
元素的有效角色,而是。
如果你考虑一下,将这种语法无效是荒谬的,那些想要以特定方式创建文档大纲的人应该能够这样做,而不必被迫做<main role="main"><section></section></main>
之类的事情来获取围绕这个问题,这将是荒谬的。