我正在使用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元素也可以用于包装节的内容表,搜索表单或任何相关徽标。