在HTML5中,主导航应该位于<header>元素之内还是之外?


167

在HTML5中,我知道<nav>可以在页面的标头<header>元素的内部或外部使用它 。对于同时具有辅助导航和主导航的网站,通常将辅助导航作为<nav>标头<header>元素内的元素包括在内,而将主导航作为标头<nav>标头<header>元素外的元素。但是,如果网站缺少辅助导航,则通常<nav>在标头<header>元素内的元素中包含主导航。

如果我遵循这些示例,则我的内容结构将基于二级导航的包含或排除。这就在内容和样式之间引入了一种不必要和不自然的结合。

有没有更好的方法,这样我就不会将主要导航从标头广告的内部移动到外部 <header>基于包含或排除辅助导航,元素的?

主导航和辅助导航示例

<header>
    <nav>
        <!-- Secondary Navigation inside <header> -->
        <ul>
            <li></li>
        </ul>
    </nav>
    <h1>Website Title</h1>
</header>
<nav>
    <!-- Main Navigation outside <header> -->
    <ul>
        <li></li>
    </ul>
</nav>

OnlineDegrees.org是遵循上述模式的示例网站。

在此处输入图片说明

仅主要导航示例

<header>
    <h1>Website Title</h1>
    <nav>
        <!-- Main Navigation inside <header> -->
        <ul>
            <li></li>
        </ul>
    </nav>
</header>

Keyzo.co.uk是遵循上述模式的示例网站。

在此处输入图片说明

HTML5简介摘录-11年2月2日上午7:38添加

布鲁斯·劳森(Bruce Lawson)和雷米·夏普(Remy Sharp)在介绍HTML5时对这个话题有这样的说法:

标头也可以包含导航。这对于站点范围的导航非常有用,尤其是在模板驱动的站点上,其中整个<header>元素可能都来自模板文件。

当然,它不要求<nav>是在<header>

是否在很大程度上取决于您是否相信站点范围的导航是否属于站点范围的标题以及有关样式易用性的实用考虑。

在最后一句话的基础上,布鲁斯·劳森(Bruce Lawson)(该节摘录的本章的作者)似乎承认,“关于样式易用性的务实考虑”在内容和样式之间产生了耦合。


1
完全取决于您网站的设计。以twitter为例,其主页(登录前看到的页面)没有顶部导航。他们所有的“主菜单”内容都在页面底部。现在,我不认识您-但我不会再称呼此标题...
uSeRnAmEhAhAhAhAhAhA 2014年

Answers:


84

这完全取决于您。您可以将它们放在标题中,也可以不将它们放在标题中,只要其中的元素仅是内部导航元素(即,不要链接到Twitter或Facebook帐户之类的外部网站)就可以了。

它们往往被放置在标题中只是因为导航经常在其中进行,但并非一成不变。

您可以在HTML5 Doctor中阅读有关它的更多信息。


5
为什么要声明“只要其中的元素仅是内部导航元素(即,不要链接到Twitter或Facebook帐户之类的外部网站),那就可以了”。
马修·兰金,

7
@Matthew,因为nav元素仅用于该站点的导航。我只是很清楚而已。
伊恩·德夫林

@MatthewRankin单击<nav>元素内的锚点,然后发送到具有完全不同导航的新页面,将是多么令人震惊。对于锚定到与您自己没有真正关系的外部站点,还请记住rel="nofollow"链接的属性。
安东尼·鲁特里奇

我知道这已经很旧了...到子域的链接呢?例如,具有不同站点(演示站点,服务站点,身份验证站点等)的网站,它们都具有不同的结构。我正在做的是将该链接放置在<nav>元素内而不是<ul>元素内,并以不属于主导航列表的方式对其进行样式设置。除了移动版本外,链接必须显示在同一列表中...无论如何,该按钮的描述性足以让您知道要去其他地方...
Chazy Chaz

5

例如,您是否要征求意见还不清楚。“通常执行xxx”或实际规则,因此我将倾向于规则的方向。

您引用的示例似乎基于nav元素规范中的示例。请记住,规范会不断调整,有时规则会变得混乱,所以我敢冒险,很多人可能会倾向于只做给出的事情而不是解释。您正在显示两个单独的行为不同的示例,因此您只能读到很多。这些站点中的任何一个也都存在相反的sub / nav情况吗?如果是的话,他们将如何处理?

不过,最重要的是,规范中没有任何内容说明这样做是可行的。HTML5的目标之一就是要非常清楚语义,要求等方面(比较),因此值得注意。据我所知,这些示例彼此独立,并且在各自的布局要求等上下文中同样有效。

将导航的源位置作为条件是一种愚蠢的行为(另一个危险信号)。只需选择一种方法并继续使用即可。


4

我不喜欢将导航栏放在标题中。我的理由是:

逻辑

包含关于文档的介绍信息。该导航是链接到其他文档的菜单。在我看来,这意味着导航的内容属于站点而不是文档。如果NAV保持前向链接,则为例外。

辅助功能

我喜欢将菜单放在源代码的末尾而不是开始。我使用CSS将其发送到计算机屏幕的顶部,或者将其留在文本语音浏览器和小屏幕的末尾。这避免了跳过链接的需要。


2
请记住,跳过链接使OPTION可以跳过菜单,而放在末尾则不提供不跳过(即导航)的选项-因此,您不得不等到最后才能正确导航, 对?
Julix

2
若要继续@julix的观点,请将导航放置在末尾,但将其显示在开头将使视力不佳的用户在文档中浏览时会感到尴尬。
詹森·费瑟辛汉姆

3

@IanDevlin是正确的。MDN的规则如下

“ HTML标头元素“”定义页面标头-通常包含网站的徽标和名称以及可能的水平菜单...”

“可能”这个词是关键。继续说,标题不一定是网站标题。例如,您可以在弹出模式或包含标题的文档的其他模块化部分上包含“标题”,这对于屏幕阅读器上的用户了解它是有帮助的。

它指的是NAV的隐式使用,您可以在有分组站点导航的任何地方使用它,尽管通常在小型导航/重要站点链接的“页脚”部分中省略了它。

确实,这取决于个人/团队的选择。确定您和您的团队所感觉的是更语义的和更重要的,并尝试保持一致。对我来说,如果导航与徽标和主站点的“ h1”内联,则将其放在“页眉”中是有意义的,但是如果您有不同的设计选择,则应根据具体情况决定。

最重要的是,请检查文档,并确保您选择忽略还是包括了解为什么要做出该特定决定。


2

为了扩展@Jos​​huaMaddox所说的内容,在MDN学习区的“ HTML简介”部分下,“ 文档和网站结构”子部分说(粗体/强调是我的意思):

标头

通常情况下,顶部会带有较大的标题和/或徽标的大条。这是有关网站的主要常用信息通常从一个网页停留到另一个网页的地方。

导航栏

链接到网站的主要部分;通常由菜单按钮,链接或标签表示。像标题一样,该内容通常在一个网页与另一个网页之间保持一致-网站上的导航不一致会导致用户感到困惑和沮丧。许多Web设计人员认为导航栏是标题的一部分,而不是单个组件,但这不是必须的;实际上,有些人还认为将二者分开可以更好地实现可访问性,因为屏幕阅读器如果分开将可以更好地阅读这两项功能


1
我想同意,一个<nav>页面中浅层的结构比<nav>深层嵌套的结构更易于访问。但是,该判断基于什么依据?屏幕阅读器无论如何都会使用<nav><a>标签。重要的因素是HTML的结构顺序。接下来,响应能力。将主要对象<nav>(或任何对象<nav>)作为直接子对象<body>是否易于操作?那是有效的HTML吗?A <nav>剖分内容,因此很自然地适合于剖分的根,如<body>。参见W3C HTML5
Anthony Rutledge,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.