header必须作为直接子元素置于body或article、section、nav等语义容器内,不可孤立于div或放入footer、aside中;其语义范围由父容器决定,用于标识本级内容的介绍性区域。

header 必须作为直接子元素放在 <body> 内,或嵌套在 <article>、<section>、<nav> 等可容纳标题性内容的语义容器中——不能孤立放在 <div> 里“模拟”,也不能丢进 <footer> 或 <aside> 里。
header 不是“页面顶部装饰”,而是有明确语义边界
浏览器和读屏软件会把 <header> 当作一个“介绍性区域”,它通常包含本级内容的标题(<h1>–<h6>)、logo、主导航(<nav>)或搜索框。关键点在于:它的作用范围由父容器决定。
- 放在
<body>下 → 代表整个页面的页眉(如网站 logo + 全局导航) - 放在
<article>内 → 仅代表这篇文章自己的标题、作者、发布时间等 - 放在
<section>内 → 代表该章节的引导信息(比如小节标题 + 副标题) - 不能放在
<header>或<footer>内部(嵌套 header 是允许的,但需有意义,比如文章 header 里再包一个<header>放作者信息)
常见错误:把 header 当 div 用
很多人写成这样:
<div class="header"> <h1>我的网站</h1> <nav>...</nav> </div>
或者更糟:
立即学习“前端免费学习笔记(深入)”;
<header>
<div class="wrapper">
<h1>标题</h1>
</div>
</header>问题在于:<header> 本身已具备流式块级行为和默认 margin/padding,外层 <div> 多余;而用 class="header" 的 <div> 完全丢失语义,对 SEO 和辅助技术无效。正确做法是直接用 <header>,样式通过 CSS 选择器 header 或 header.site-header 控制。
与 nav、main、footer 的位置关系
典型 HTML5 页面骨架应遵循逻辑流顺序,不是视觉顺序:
<body>
<header> <!-- 全局页眉 -->
<h1>网站名</h1>
<nav>...</nav>
</header>
<p><main>
<article>
<header> <!-- 文章专属 header -->
<h2>文章标题</h2>
<p>作者:张三</p>
</header>
<p>正文内容...</p>
</article>
</main></p><p><footer> <!-- 全局页脚 -->
<p>© 2024</p>
</footer>
</body>注意:<nav> 可以独立存在,也可放在 <header> 内;<main> 必须是 <body> 直接子元素且只能出现一次;<footer> 虽常在底部,但语义上是“本级内容的结尾信息”,所以也能出现在 <article> 或 <section> 内部。
最容易被忽略的是:header 的语义范围必须和它包裹的内容匹配。一个 <header> 里塞了整站导航、搜索、登录状态、多级标题,反而模糊了焦点。拆分层级(全局 header + 局部 header)比堆砌更有效。











