HTML 标签速查表

HTML 标签(Tag)速查:结构、文本、表单、媒体与语义化标签的名称与中文说明,写页面时快速查阅。

原理解析

HTML 用标签(tag)把文本组织成带语义的文档:标题、段落、列表、链接、表格等。语义化标签(header/main/section/article)让结构与含义一致,利于无障碍与 SEO。

标签分为块级(独占一行,如 div/p)与行内(嵌于文字,如 span/a);属性(href、src、alt)承载额外信息,其中 alt 对图片无障碍至关重要。现代 HTML 强调「结构用标签、样式交给 CSS、行为交给 JS」。

什么时候该查这张表

这张表在你要确认某个 HTML 标签的语义、属性与默认行为时有用。它按结构、文本、链接、表格、表单、嵌入等分类列出常用标签,并标注内容模型(phrasing / flow、是否可含交互内容)与可访问性要点。写模板、code review 与 SEO 审查时查它。

不该查的情况:你在做完整的可访问性审计或 ARIA 属性设计。标签语义只是可访问性的一部分,焦点顺序、名称角色值、动态内容播报都需要系统评估。

判断标准:优先用语义标签而不是 div 加 class。语义标签自带可访问性与 SEO 价值(搜索引擎能理解 h1-h6 的层级与 article 的边界),而 div 什么都不提供。同样,button 与 a 的区别不是样式而是行为 —— a 用于跳转与新页面,button 用于在当前页面执行动作。

特别注意「看起来能用但语义错误」的组合:a 标签包 button(嵌套交互元素,键盘与读屏行为都错)、用多个 h1 冒充标题层级、用 table 做布局(屏幕阅读器会误读为数据表)、用 p 包裹块级元素。

边界与常见陷阱

  • 交互元素不能嵌套:a 包 button 是明确的错误

    用 a 标签包 button 的写法在 HTML 规范里无效,且行为混乱:键盘 Tab 会停两次,Enter 与 Space 触发不同元素,读屏器播报也不一致。正确做法是二选一:要跳转就用 a 套文字或图标,要执行动作就用 button 套文字或图标,并用 CSS 让它长得像链接。

  • 标题层级用样式伪造会同时伤害 SEO 与可访问性

    为了控制字号大小而全站使用 h1,或用 div 配 font-size 冒充标题,都会破坏文档大纲。搜索引擎依赖 h1–h6 理解页面结构,层级混乱会削弱相关性判断;读屏用户依赖标题跳转到内容,层级混乱则难以导航。规则:一个页面一个 h1,层级逐级递进不跳级(h2 后接 h4 是错的),字号需求用 CSS 而非换标签解决。

  • table 做布局会让读屏器把内容当数据表播报

    用 table 排版页面时,读屏器会逐单元格播报「第 1 行 3 列」,用户听到的是完全无意义的信息。CSS Grid 与 Flexbox 已能完成绝大多数布局需求,应优先使用。若确实必须用 table 做布局,加上 role="presentation"(或 role="none")明确告诉辅助技术它不是数据表;同时真正的数据表要有 th 与 scope。

与相邻内容的分工

要查字符层面的转义与实体写法,用站内「HTML 实体」页;本页关注元素层面的语义。

要查具体属性的完整取值范围与浏览器兼容性,属 MDN 文档范畴,本表只给常用属性。

要做完整的无障碍审查(对比度、焦点顺序、ARIA、键盘导航),需要专业工具与人工测试,本页不覆盖。

若目的是排查 SEO 问题,标签语义只是其中一环,结构化数据、内链与元信息同样关键。

实战片段

要点:① 交互元素不能嵌套,a 与 button 二选一(a 用于跳转、button 用于当前页动作),嵌套会让键盘与读屏行为都错乱;② 一个页面一个 h1、层级逐级递进不跳级,字号需求用 CSS 解决而非换标签,标题层级直接影响 SEO 与读屏导航;③ 真数据表要有 th 与 scope,用 table 做布局时加 role="presentation"(或 none),但优先用 Grid/Flexbox;④ 图片必须有 alt,装饰性图片用空 alt 而不是省略;⑤ 优先用 article/section/header/footer 等语义容器,div 套类名不提供任何语义价值。

<!-- ① 跳转用 a,动作用的 button —— 二选一,不要嵌套 -->
<a href="/orders/42">查看订单</a>
<button type="button" @click="submit">提交</button>
<!-- ❌ <a href="/x"><button>去</button></a> -->

<!-- ② 一个页面一个 h1,层级不跳级 -->
<h1>订单详情</h1>
  <h2>基本信息</h2>
  <h3>收货地址</h3>      <!-- ✅ h3 跟在 h2 后 -->
  <!-- <h4>...</h4> 直接跟在 h2 后是错的 -->
<!-- 字号需求用 CSS,不要靠换标签 -->
<style>
  h1 { font-size: 1.5rem; }
  .minor-heading { font-size: .875rem; font-weight: 600; }
</style>

<!-- ③ 真数据表:th + scope + caption -->
<table>
  <caption>近 7 日订单量</caption>
  <thead>
    <tr><th scope="col">日期</th><th scope="col">订单数</th></tr>
  </thead>
  <tbody>
    <tr><th scope="row">10-01</th><td>128</td></tr>
  </tbody>
</table>

<!-- ④ table 做布局时声明 presentation(现代浏览器用 none) -->
<table role="presentation">
  <tr><td>侧栏</td><td>主内容</td></tr>
</table>
<!-- ✅ 更推荐:Grid / Flexbox -->
<div class="layout"><aside>侧栏</aside><main>主内容</main></div>
<style>.layout { display: grid; grid-template-columns: 240px 1fr; gap: 16px; }</style>

<!-- ⑤ 图片必须有 alt;装饰图用空 alt -->
<img src="chart.png" alt="近 7 日订单量折线图" width="640" height="320">
<img src="divider.svg" alt="" width="8" height="8">   <!-- 装饰性:空 alt -->

<!-- ⑥ 语义化容器优于 div 套类名 -->
<article>
  <header><h2>标题</h2><time datetime="2024-06-01">6 月 1 日</time></header>
  <section><h3>小节</h3><p>正文</p></section>
  <footer>…</footer>
</article>
<!-- <div class="card"><div class="hd">… —— 全无语义价值 -->

实践注解

  • section 缺可访问名称时,屏幕阅读器不播报多个 <section> 的页面里,没有 aria-label 或标题的那个会被当作「泛泛的区块」跳过。做分节的落地页时给每节一个 aria-labelledby 指向其 h2,导航体验会明显改善。
  • <div onclick> 不能替代 <button>div 不可聚焦、不响应回车与空格、也不会被读屏识别为可操作控件。需要交互一律用 button/a 原生元素,样式再改,否则键盘用户完全用不了。
  • 表格布局与数据表格必须区分用 <table> 排版会污染读屏的表格语义;数据表格则必须补 <caption> 与 th 的 scope,否则读屏播报单元格时不知道对应哪一列。宽表还要外层容器承担横向滚动,否则会顶宽整页。

数据来源

  • WHATWG HTML Standard
  • W3C WAI-ARIA 1.2
  • MDN Web Docs (browser behaviour)

上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。

标签含义
<a>锚点 / 超链接,跳转或锚定
<img>嵌入图片,src 指定地址,alt 提供替代文本
<div>块级通用容器,无语义
<span>行内通用容器,无语义
<p>段落
<h1>-<h6>标题,h1 最重要,逐级递减
<ul>无序列表,配合 <li>
<ol>有序列表,配合 <li>
<li>列表项
<table>表格,配合 thead/tbody/tr/th/td
<thead>表格头部
<tbody>表格主体
<tr>表格行
<th>表头单元格
<td>表格数据单元格
<form>表单容器,action 指定提交地址
<input>输入控件,type 决定类型
<button>按钮
<label>表单控件的文本标签
<select>下拉选择框
<textarea>多行文本输入
<link>引入外部资源(如样式表),常在 head 中
<meta>文档元信息(字符集、视口、SEO)
<script>嵌入或引用 JavaScript
<style>内联 CSS 样式
<header>页头语义区块
<footer>页脚语义区块
<nav>导航语义区块
<section>文档中的独立章节
<article>独立可分发的内容块(如文章)
<main>页面主体内容(每页一个)
<br>换行(空元素)
<hr>主题分隔线(空元素)
<strong>强调,语义上加粗
<em>强调,语义上斜体
<code>行内代码片段
<pre>预格式化文本,保留空白
<blockquote>块级引用
<iframe>内嵌另一个文档/页面
<video>嵌入视频
<audio>嵌入音频
<canvas>通过脚本绘制图形
<svg>可缩放矢量图形

常见问题

块级元素和行内元素有什么区别?

<div>、<p>、<h1>、<section> 等块级元素独占一行、可设宽高;<span>、<a>、<strong>、<code> 等行内元素只占据内容宽度、不强制换行。现代布局更多用 CSS 控制,但理解语义仍有帮助。

<div> 和 <section> 怎么选?

没有语义内容时用 <div>;当内容是一个有主题的独立章节(通常带标题)时用 <section>。盲目用 <div> 会损失可访问性与 SEO 结构,但也不要为每个容器都套 <section>。

语义化标签对 SEO 有什么用?

<header>、<nav>、<main>、<article>、<footer> 等语义标签帮助搜索引擎和辅助技术理解页面结构,利于内容抓取与可访问性评分,比纯 <div> 更有信息量。

空元素(void element)有哪些?

没有闭合标签的元素,如 <img>、<br>、<hr>、<input>、<link>、<meta>。它们不能包含子节点,书写时也不写结束标签(HTML5 中可省略 /)。