HTML5主要元素与ARIA地标角色"main"的区别

28

我对了解HTML5中的<main>元素和ARIA landmark角色属性role="main"之间的关系和可能的区别很感兴趣。

我认为<main>元素的目的是将ARIA roll属性role="main"映射到特定的HTML元素上。但这是否总结了它的作用呢?

使用<main>有什么好处,相比使用<div role="main">呢?或者说现在和可预见的未来,它们会产生相同的结果吗?

非常感谢任何比较以下示例的见解:

<body>
  <main>
    <p>Paragraph</p>
  <main>
</body>

<body>
  <main role="main">
    <p>Paragraph</p>
  <main>
</body>

<body>
  <div role="main">
    <p>Paragraph</p>
  <div>
</body>

有特别的原因设置赏金吗?据我所知,情况并没有改变;他们执行相同的操作,最终将不再需要 role="main" - Daniel Imms
1个回答

27

根据HTML5 Doctor的说法,它们是等效的。<main>只是使实现role="main"更容易和更整洁。

<main>元素的主要目的是将ARIA的地标角色main映射到HTML中的一个元素。

这里是<main>元素的一般描述。

main元素表示文档或应用程序的的主要内容。主要内容区域包括与文档的中心主题或应用程序的中心功能直接相关或扩展的内容。

建议

建议在同一个元素中同时使用<main>role="main",直到浏览器正确实现<main>为止。

<!-- Recommended -->
<main role="main">
    ...
</main>

如果您感兴趣,请务必阅读<main>规范

关于分组

正如Szabolcs在评论中指出的,<main>不是分组元素,因此应该与<section>元素一起使用。

参考文献


谢谢Daniel,我仍然很好奇在当前规范下<div role="main">和<main>之间是否有任何区别。我发现一个有趣的区别是<main>元素不是块级元素 - 当从包装div转换时,这很容易被忽视。再次感谢您指向那些资源。 - Stuart Kershaw
2
@StuartKershaw 你确定它不是块级元素吗?Chrome(v30)用户代理样式表有这个规则:article,aside,footer,header,hgroup,main,nav,section {display:block;}。在不支持的浏览器中,它可能不会生效,因为我认为block不是默认的display - Daniel Imms
1
不错,看起来Chrome已经将<main>添加到了HTML5的display:block;堆栈中,很好!但是Firefox似乎还没有支持。 - Stuart Kershaw
@Patanjali 我想你需要类似IE 7或8这样的浏览器才能做到这一点。而这些浏览器从几天前起就不再得到微软支持了。 - Daniel Imms
1
w3验证器实际上会说“元素main的主要角色是不必要的”。 - Impulse The Fox
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接