【发布时间】:2017-10-18 13:19:35
【问题描述】:
情况
在我的页面中,我有一个类似这样的标记:
<body>
<header>
<a>
<img src="./logo.svg" />
<span class="hide">Site name</span>
</a>
<nav>
<h2>Main site navigation</h2>
...
</nav>
<section>
<h2>Section title</h2>
...
</section>
</header>
<main>
<!-- This is the main page title. -->
<h1>Page title</h1>
<section>
<h2>Another section title</h2>
...
</section>
...
</main>
<footer>
...
</footer>
</body>
屏幕上应呈现为:
----------------------------
* Logo Navigation *
* * // Header
* Section title *
----------------------------
* Page title *
* *
* Another section title * // Main
* ... *
* *
----------------------------
* ... * // Footer
----------------------------
本文档的大纲如下所示,逻辑上不正确。
- 主站点导航
- 章节标题
- 页面标题
- 另一个章节标题
这种情况的问题是:
-
<h2>Main site navigation</h2>被视为整个页面的标题,而<h1>Page title</h1>应该是这个标题 -
<h2>Main site navigation</h2>打开新的分节根,带有<h2>Section title</h2>标题的节实际上被视为该根的子节(这在逻辑上不正确)。
问题
如何实现逻辑大纲?
- 页面标题
- 主站点导航
- 章节标题
- 另一个章节标题
限制
我无法将<h1> 移到<main> 元素之外,因为它是<main> 容器布局的一部分,也是它的内容。
我能想到的唯一解决方案是将<main> 元素放在<header> 之前的代码中,并通过Flexbox CSS 属性order 将视觉定位标题放在顶部。这仍然不能令人满意,因为这会破坏 HTML 标记的逻辑顺序,这会导致奇怪的 tab 顺序行为(<main> 元素将首先被 tab 标记,尽管它们会在视觉上位于来自<header> 的元素下方)并且因为出于同样的原因,使使用屏幕阅读器的人更难访问网站。
我认为必须有一些更好、更直接的解决方案;尤其是我的场景似乎很常见。
【问题讨论】:
标签: html