HTML页面分块核心是用语义化标签(如、、、、、、)替代无意义,确保结构清晰、可访问性好、SEO友好,并遵循嵌套规则与标题要求。

HTML 页面内容分块,核心是用语义化标签划分逻辑区域,而不是靠 <div> 无差别堆砌。语义正确才能让结构清晰、可访问性好、SEO 友好,也方便后续用 CSS 精准控制布局。
<h3>用语义化标签替代纯 <code><div> 分块
<p>浏览器和辅助技术(如读屏器)依赖语义标签理解页面结构。盲目套 <code><div class="header"> 不如直接用 <code><header></header> —— 后者自带隐含含义,无需额外说明。
-
<header></header>:页面或区块的头部,通常含标题、logo、主导航 -
<nav></nav>:仅用于导航链接集合(不是所有链接都该放这里) -
<main></main>:页面唯一主内容区,一个页面只出现一次 -
<article></article>:能独立分发/复用的内容单元(如博客文章、新闻条目) -
<section></section>:有主题的逻辑分组,必须带标题(<h2></h2>–<h6></h6>),否则语义失效 -
<aside></aside>:与主内容相关但可独立存在的补充信息(如侧边栏、广告、作者简介) -
<footer></footer>:页面或区块的尾部,不一定是页面最底部
错误示例:<div class="section">
<div class="title">关于我们</div>
<p>…</p>
</div> —— 缺少语义,CSS 类名无法被机器识别。
嵌套规则与常见误用
语义标签不是扁平列表,它们有明确的嵌套逻辑。错乱嵌套会破坏结构意义,甚至影响屏幕阅读器播报顺序。
立即学习“前端免费学习笔记(深入)”;
-
<main></main>内不应再嵌套<header></header>或<footer></footer>(除非是<article></article>或<section></section>的局部头尾) -
<article></article>可以独立存在,也可嵌套在<main></main>或<section></section>中;反过来,<section></section>不能作为<article></article>的子元素来“包装”内容 -
<nav></nav>必须包裹一组导航链接,如果里面混了搜索框、按钮或段落文字,就违背了它的语义 -
<aside></aside>必须与最近的祖先节(<article></article>或<section></section>)相关;若放在直接子级且无上下文,语义模糊
<article>
<header>
<h2>如何调试 fetch 请求</h2>
<p>发布于 2024-05-20</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill11628" title="Windows 图片打印"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20d3191a227.jpg" alt="Windows 图片打印" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill11628" title="Windows 图片打印">Windows 图片打印</a>
<p>通过 Python 使用 mspaint /pt 在 Windows 上打印图像——绕过 bash 中文路径编码问题。</p>
</div>
<a href="/xiazai/skill11628" title="Windows 图片打印" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div>
</header>
<p>当 fetch 返回空响应体时…</p>
<aside>
<h3>小贴士</h3>
<p>检查 network 面板的 Initiator 列</p>
</aside>
</article>
CSS 布局配合分块的实用注意点
分块本身不等于布局,但语义结构会影响 CSS 作用域和响应行为。现代布局(如 Flexbox / Grid)应基于语义容器设计,而非强行拉伸 <div>。
<ul>
<li>给 <code><header></header>、<nav></nav>、<main></main> 等设置 display: flex 是安全的;但对 <section></section> 直接设 display: grid 前,先确认它确实承担网格容器职责
float 或负 margin 打乱语义流 —— 这会让屏幕阅读器按源码顺序读,而视觉上却错位grid-area 命名区域时,名称应与语义标签一致(如 header、sidebar),增强可维护性<aside></aside> 在移动端常折叠进汉堡菜单,此时需用 aria-expanded 和 aria-controls 补充状态,不能只靠 display: none验证分块是否合理的方法
不要只看渲染效果,重点检查结构是否经得起“剥离样式”的考验 —— 即禁用 CSS 后,内容是否仍按逻辑顺序线性可读。
- 用浏览器开发者工具的「Accessibility」面板查看 Landmark Regions,确认
<main></main>、<nav></nav>等是否被正确识别 - 用 VoiceOver(macOS)或 NVDA(Windows)朗读页面,听是否跳过关键区块或重复播报
- 运行 W3C HTML Validator,关注 “Sectioning elements must have a heading” 类警告 ——
<section></section>和<article></article>没标题就是无效语义 - 检查
<main></main>是否被意外包裹在<article></article>或<section></section>中(规范要求它是顶层元素)
语义分块不是加几个新标签就完事,关键是每个标签是否真实表达了内容角色。写完 HTML 后,删掉所有 CSS,用纯文本方式扫一遍结构 —— 那才是用户(尤其是依赖辅助技术的用户)最先看到的真实页面。


















