【问题标题】:HTML 5 outlines: why do these two examples generate a different outline?HTML 5 大纲:为什么这两个示例会生成不同的大纲?
【发布时间】:2015-03-18 22:17:44
【问题描述】:

我想知道为什么以下两个(非常相似的)示例会生成完全不同的 HTML5 大纲。

示例 #1

这会生成以下大纲:

我觉得这个大纲没问题。

示例 #2

这会生成以下大纲:

我觉得这个大纲不太合适:主要内容现在是标题的一部分!

不同之处在于“这是主要内容”h1标签周围有一个section容器。

谁能解释一下这背后的逻辑?

更新:示例 #3

正如answer below 中指出的那样,重要的是要知道headerfootermain 不要开始一个新部分,同时具有一个 h 元素与前面的 h 元素大小相同确实开始一个新部分。

所以要记住的简单经验法则如下:**当页面顶部有一个header,中间有一个main,底部有一个header,然后每个必须以h1 开头(它开始隐式部分)。在这些 h1 元素下,您可以添加尽可能多的其他部分(通过对元素 [navasidesectionarticle] 或通过较低的 h-元素 [@ 987654346@ 到 h6])。

我创建了另一个示例,它(在我看来)类似于一个完美的 HTML5 大纲 - 对于 HTML5 之前的设备来说也是 100% 可以理解的。

这会生成以下轮廓:

【问题讨论】:

    标签: html outline


    【解决方案1】:

    这就是<article><section><nav><aside> 标签的全部意义(在spec 方面的“分段内容”):它们定义了较大文档的子部分。

    您说“主要内容现在是标题的一部分”,但这不是大纲显示的内容 - 它表明 <section> 是主文档 (<body>) 的一个子部分,标题为 <h1>Header</h1>

    在你的第一个例子中:

    <body>
      <header><h1>Header</h1></header>
      <main><h1>This is the main content</h1></main>
      <footer><h1>Footer</h1></footer>
    </body>
    

    ..&lt;header&gt;&lt;main&gt;&lt;footer&gt; 元素不会影响轮廓。 (甚至还有 a note to that effect in the spec - 寻找“标题元素没有对内容进行分段;它没有引入新的部分。”),因此对于大纲算法而言,它相当于:

    <body>
      <h1>Header</h1>
      <h1>This is the main content</h1>
      <h1>Footer</h1>
    </body>
    

    在你的第二个例子中,

    <body>
      <header><h1>Header</h1></header>
      <main>
        <section>
          <h1>This is the main content</h1>
        </section>
      </main>
      <footer><h1>Footer</h1></footer>
    </body>
    

    ..&lt;section&gt; 元素引入了&lt;body&gt; 元素第一部分的一个子部分,所以它相当于:

    <body>
      <div>
        <h1>Header</h1>
        <section>
          <h2>This is main content</h2>
        </section>
      </div>
      <div>
        <h1>Footer</h1>
      </div>
    </body>
    

    (我添加了&lt;div&gt;s 来标记大纲算法隐含的文档的逻辑部分。)

    所以这个大纲是:

    1. Header
      1.1. This is the main content
    2. Footer
    

    通过规范中的示例,这可能更有意义:

    <!DOCTYPE HTML>
    <title>The Tax Book (all in one page)</title>
    <h1>The Tax Book</h1>
    <section>
     <h1>Earning money</h1>
     ...
    </section>
    <section>
     <h1>Spending money</h1>
     ...
    

    产生以下大纲:

    1. The Tax Book
      1.1 Earning money
      1.2 Spending money
    

    请注意,“税簿”是文档的标题,“收入”和“支出”是子标题。

    另请参阅the article on HTML5 outlines on MDN,它提供了该功能的一些背景知识,希望这将使这一切更加清晰。

    【讨论】:

    • 非常感谢!我必须深入阅读提供的资源,我想,我现在明白了。我已更新我的问题以反映具体要点,并将您的回复标记为答案。
    • @JoshuaMuheim 太好了,感谢您分享您的发现!
    • @JoshuaMuheim 对我来说看起来不错,但我对大纲的了解来自我提到的两页,所以你和我一样是这个主题的专家:)
    猜你喜欢
    • 2017-03-28
    • 2014-07-08
    • 2014-10-12
    • 2012-11-05
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多