我可以在多页文档中使用多个主要元素吗?

jgh*_*ify 3 html html5 w3c-validation jquery-mobile wai-aria

我正在使用jQuery Mobile“多页”文档的网站上工作,其中该网站的多个“页面”可能被编码为单个html文档的div。基本结构如下:

<body>
    <div data-role="page" id="page1">
        <header>Page 1</header>
        <main>Content...</main>
        <footer>...</footer>
    </div>
    <div data-role="page" id="page2">
        <header>Page 2</header>
        <main>Content...</main>
        <footer>...</footer>
    </div>
</body> 
Run Code Online (Sandbox Code Playgroud)

我想使用<main>所示的html5 元素,但是w3c验证程序给我一个错误,说“一个文档不能包含多个主要元素”。

我了解w3c标准<main>每个文档只允许一个。然而,对于咏叹调标准role="main"(向其<main>映射)并允许“多个主元素作为DOM后代,假设每个这些都与不同的文档节点相关联的”(https://www.w3.org/TR/wai-aria/角色#main)。

这些jQuery Mobile [data-role='page']div是否算作“不同的文档节点”?<main>如果一次只暴露给最终用户,我可以有多个元素吗?

(请注意,无效的jQuery Mobile页面在文档中<body>,但是用隐藏display:"none"。)

sid*_*ker 5

2018-10-10更新

HTML标准现在规定了以下要求:

https://html.spec.whatwg.org/multipage/grouping-content.html#the-main-element

一个文档中不能包含一个以上main没有hidden指定属性的元素。

因此,现在的答案是,main文档中不能有多个元素-除非其中最多只有一个缺少hidden属性。

https://validator.w3.org/nu/https://checker.html5.org/现在都将报告错误。


W3C HTML检查器(验证器)的维护者。我对jQuery Mobile多页文档不熟悉,但是似乎main每个逻辑文档只向用户公开一个元素,那么您就符合要求的精神。

W3C检查器对此更为严格,因为通常main每个文档中包含多个文档通常是一个坏主意。但这就是说,当您向检查器提供一个URL进行检查时,它仅查看那里的静态HTML源,并且不执行任何JavaScript,因此在某些情况下可能无法真正看到实际用户会看到的非常准确的表示。

我的意思是,例如,在此处的问题中所述的情况下,似乎用户看到的不是URL上的单个文档,而是一系列逻辑文档。

因此,在这种情况下,您可以尝试使用https://checker.html5.org/代替W3C HTML Checker 来检查文档。因为main它检查了上游WHATWG规范中的要求,要求在这方面没有W3C版本中的相应要求严格

换句话说,使用https://checker.html5.org/不会导致多个main元素出错。

  • 至于为什么对于多个`role =“ main”`没有错误或警告,这是因为没有规范说明HTML文档一定不能或不应使用多个`role =“ main”`,而有一个规范( W3C HTML5建议书)明确指出* [作者在文档中不得包含多个`main`元素](https://www.w3.org/TR/html5/grouping-content.html#the-main-element )*。 (2认同)
  • 至于W3C检查器为此发出的消息是错误而不是警告的原因,这是因为[W3C规范说*不得*](https://www.w3.org/TR/html5/grouping-content .html#the-main-element)。如果改为*不应*,则该消息将是警告。 (2认同)