HTML 教程 / 使用语义元素组织页面
语义 HTML 元素描述页面每个部分的功能。使用 nav 作为主要导航,main 作为页面主要内容,以及 article 用于独立内容。即使视觉布局发生变化,这些角色仍然有意义。
每个区域元素意味着什么?
header引入一个页面或一个部分。它可以包含网站名称、标题或导航。nav将主要导航链接分组。一组内容并不会仅仅因为包含链接,就必须使用nav。main包含页面的唯一主要内容。一个文档最多允许一个可见的main区域。article适用于独立的文章或故事。section根据主题划分内容,并且通常应有一个标题来标识其主题。aside包含仅间接与主要内容相关的补充信息。footer包含页面或章节的结尾信息。
单独使用这些元素不能决定它们在屏幕上的排列。使用 aside 是因为内容具有补充性,而不是因为您想要一个侧边栏;使用 CSS 来设定其位置。同样,仅靠语义标记既不能保证无障碍访问,也不能保证搜索引擎排名提升。实际内容、标题和阅读顺序必须与元素的角色相符。
创建一个具有语义区域的完整页面
以下示例是一个完整的 HTML 文档。页面的导航链接指向同一文件内的区域,因此您可以保存并运行该示例,而无需创建其他页面。在使用 标题和段落 将区域划分后,选择标题级别。
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>春季植物 | 小花园</title>
</head>
<body>
<header>
<p>小花园</p>
<nav aria-label="在此页面">
<a href="#article">阅读文章</a>
<a href="#sunlight">光照需求</a>
</nav>
</header>
<main>
<article id="article">
<h1>春季植物</h1>
<section id="sunlight">
<h2>光照需求</h2>
<p>光照需求因植物而异。</p>
</section>
</article>
<aside>
<p>在种植前,请检查您所在地区的最后一次霜冻日期。</p>
</aside>
</main>
<footer>
<p>小花园指南</p>
</footer>
</body>
</html>
将代码保存为 index.html 并在浏览器中打开。网站的名称、导航、文章、补充说明和页脚大致会按从上到下的顺序出现。选择“光照需求”可以切换到该部分,因为 href="#sunlight" 对应 id="sunlight"。如果您希望说明在文章旁边显示,请添加 CSS 布局,而不是改变 HTML 的含义。代码中的 h1 是示例文档的标题,而不是本教程中的其他标题。
什么时候应该使用 section 或 article?
一篇博客文章可以独立存在,是article的一个好候选。在这篇文章中,像“您需要什么”和“步骤”这样的主题都可以各自形成一个section。仅用于边框或背景颜色的容器不需要语义角色;div可能更合适。如果标题和段落的层级已经明确,也不必将每一个标题和段落都包含在section中。对于仅用于样式目的将元素分组的容器,请使用什么时候使用 div 和 span?的标准。
header 和 footer 可以属于单个 article,也可以属于整个页面。在新闻列表中,每篇可以独立理解的文章都可以用一个 article 表示。请根据内容的角色而不是元素的名称或其默认外观来决定。请参阅 MDN 上的 HTML 元素参考 ,以获取元素定义。
为相同内容选择元素
| 内容 | 合适的元素 | 原因 |
|---|---|---|
| 一篇关于植物的文章,可以独立理解 | article |
具有自己标题和说明的独立内容 |
| 本文中的阳光和灌溉 | section |
主题为文章结构提供支持,并具有可识别的标题 |
| 一个容器,用于设计中的两张卡片 | div |
仅为样式而分组,没有引入新主题,也不构成独立文章 |
如果一个页面同时具有网站导航和文章内导航,请通过有意义的名称区分这两个导航区域。本片段识别它们的不同用途。
<nav aria-label="网站导航">
<a href="index.html">首页</a>
<a href="about.html">介绍</a>
</nav>
<nav aria-label="本文的章节">
<a href="#sunlight">光照</a>
<a href="#watering">灌溉</a>
</nav>
将文件名和片段标识符分配给实际目标。aria-label 为导航区域提供一个可访问的名称;它不会自动生成可见的菜单标题。
W3C 的 WAI 区域标注指南 解释了如何用名称区分具有相似角色的区域。
检查文档结构
按照文档的顺序阅读标题、菜单和主要内容,即使它们在屏幕上的位置看起来是正确的。避免多个可见的 main、section 容器没有标题且没有实际内容,以及仅用于强制侧向位置的 aside。在添加 CSS 之前,必须始终能够理解合理的结构。




