h1是否需要是头标记中的第一个语义元素



我正在使用Chrome大纲视图扩展来检查页面的语义。在文档主标题标记的h1之前有任何结构元素似乎都是个问题。我原以为订单无关紧要,但显然重要:

+Document Body
  +Header
    +nav
      +h1 Main Navigation
    +h1 MyPage
  -Section
  -Footer

轮廓是这样的吗:

Untitled Body
  Main Navigation
  MyPage
  etc...

但是当h1是我头中的第一个元素时:

+Document Body
  +Header
    +h1 MyPage
    +nav
      +h1 Main Navigation
  -Section
  -Footer

它的轮廓是这样的:

MyPage
  Main Navigation
  etc...

为什么?大纲视图是否有问题,或者我是否理解HTML5语义中的错误?W3C规范似乎没有提到这一点:http://dev.w3.org/html5/spec/Overview.html#the-标题元素

在重新查看规范后,我同意h1不必是第一个元素。我怀疑问题出在你使用的镀铬扩展上。

我通过这个HTML概述工具运行了以下两个场景,并收到了相同的结果(My Navigation显示在My Header下):

标头下有h1个第二元素:

<body>
<header>
<h1>My Header</h1>
<nav><h1>My Navigation</h1></nav>
</header>
<section><h1>My Section</h1></section>
<footer></footer>
</body>

标题下的H1第一个元素:

<body>
<header>
<nav><h1>My Navigation</h1></nav>
<h1>My Header</h1>
</header>
<section><h1>My Section</h1></section>
<footer></footer>
</body>

为什么要在页面标题之外定义另一个<h1>标记?大纲视图为您的页面选择了两个相互竞争的标题,这可能就是被丢弃的原因。从语义上讲,页面的主标题可以存在于页面的<header>部分中的任何位置,只要它是唯一的并定义了您的主标题,尽管这不是CCD_ 3部分或CCD_。此处定义了适当的轮廓http://www.w3.org/TR/html5/sections.html#outline.

你可以使用任何你想要的组合来写你的主标题部分,只要它被正确理解。所以

<header>
<nav>
<h1>Title of Page</h1>
<h2>Subtitle</h2>
</header>

这很好,因为它正确地理解了你的页眉和页面标题的部分。

这里有一个在线大纲,你可以用来测试你的设计。您的标题部分应该是第一个,高于其他部分。

根据规范,<header>不需要以<h1>开头。

header元素通常用于包含节的标题(h1-h6元素或hgroup元素),但这不是必需的。这个header元素也可以用于包装节的内容表,搜索表单或任何相关徽标。

最新更新