Skip to content

文本内容标签:掌握 HTML 文本标记的语义与应用

为什么要使用文本标签?

在日常交流中,我们通过语气、手势、表情来传达额外的信息。比如重读某个词语表示强调,用手势做引号表示引用。在 HTML 中,文本标签就是这种"额外信息"的载体。

文本标签的三重价值:

  1. 语义表达: 告诉浏览器和搜索引擎内容的含义
  2. 样式基础: 为 CSS 样式提供钩子
  3. 可访问性: 帮助屏幕阅读器正确理解和朗读内容

让我们深入了解各种文本标签及其背后的原理。

强调与重要性标签

strong vs b:重要性标记

html
<p>这是<strong>非常重要</strong>的信息。</p>
<p>这段文字需要<b>视觉上突出</b>显示。</p>

<strong> 标签:

  • 语义: 表示内容具有重要性、严重性或紧迫性
  • 用途: 警告信息、关键术语、重要声明
  • 默认样式: 加粗显示
  • 朗读: 屏幕阅读器会用更强的语气朗读

<b> 标签:

  • 语义: 纯粹的视觉效果,没有特殊重要性
  • 用途: 关键词、产品名称、不需要强调的粗体文字
  • 默认样式: 加粗显示
  • 朗读: 屏幕阅读器正常朗读

如何选择?

html
<!-- 正确使用 strong:传达重要性 -->
<p><strong>警告:</strong>此操作不可撤销!</p>

<!-- 正确使用 b:仅仅是样式需求 -->
<p>昨天的会议由 <b>David Miller</b> 主持。</p>

<!-- 错误:仅为了加粗而用 strong -->
<p><strong>产品特性:</strong>这是一个描述...</p>
<!-- 应该用 -->
<p><b>产品特性:</b>这是一个描述...</p>

原理解释:

<strong> 不仅仅改变外观,更重要的是改变语义。想象有人在朗读这段文字:

  • 遇到 <strong> 会提高音调、放慢语速
  • 遇到 <b> 则保持正常语气

这种语义上的区别对视障用户非常重要。

em vs i:强调标记

html
<p>我<em>真的</em>很喜欢这个设计。</p>
<p><i>Inception</i>是一部精彩的电影。</p>

<em> 标签:

  • 语义: 表示强调,改变句子的意思
  • 用途: 需要重读的词语
  • 默认样式: 斜体显示
  • 朗读: 带有强调语气

<i> 标签:

  • 语义: 区别于普通文字的内容,如术语、外文等
  • 用途: 书名、电影名、专业术语、心理活动等
  • 默认样式: 斜体显示
  • 朗读: 正常语气

实际应用:

html
<!-- em 改变句子重点 -->
<p><em>我</em>没有吃你的蛋糕。</p>
<!-- 强调"是我" -->
<p>我<em>没有</em>吃你的蛋糕。</p>
<!-- 强调"没吃" -->
<p>我没有吃<em>你的</em>蛋糕。</p>
<!-- 强调"是你的" -->

<!-- i 用于特殊文字 -->
<p>电影<i>The Matrix</i>讲述了...</p>
<p><i lang="fr">Bonjour</i>是法语的"你好"。</p>
<p>她心想:<i>这真是个好主意。</i></p>

记忆技巧

  • strong = 重要(important)
  • em = 强调(emphasis)
  • b = 粗体(bold style)
  • i = 斜体(italic style)

如果去掉样式,内容的含义是否改变?改变了用 <strong><em>,不改变用 <b><i>

标记与删除

mark:高亮标记

html
<p>搜索结果:包含<mark>JavaScript</mark>的文章</p>

用途:

  • 搜索结果中的关键词高亮
  • 文档中需要引起注意的部分
  • 代码片段中的重点

默认样式: 黄色背景(类似荧光笔效果)

语义: 表示与当前上下文相关的标记或高亮

html
<!-- 搜索页面 -->
<article>
  <h2>如何学习<mark>HTML</mark></h2>
  <p><mark>HTML</mark>是网页开发的基础...</p>
</article>

<!-- 文档比较 -->
<p>原文:网站开发包括前端和后端。</p>
<p>修订:网站开发包括<mark>前端、后端和运维</mark>。</p>

del 和 ins:修订标记

html
<p>价格:<del>$99</del> <ins>$79</ins></p>

<del> 标签:

  • 语义: 已被删除的内容
  • 默认样式: 删除线
  • 用途: 显示文档修订、价格变更等

<ins> 标签:

  • 语义: 新插入的内容
  • 默认样式: 下划线
  • 用途: 显示新增内容

扩展属性:

html
<p>
  <del datetime="2025-11-20" cite="https://example.com/changes">
    旧的产品描述
  </del>
  <ins datetime="2025-11-25" cite="https://example.com/changes">
    新的产品描述
  </ins>
</p>
  • datetime: 修改时间
  • cite: 说明修改原因的文档链接

上标与下标

html
<!-- 数学公式 -->
<p>勾股定理:a<sup>2</sup> + b<sup>2</sup> = c<sup>2</sup></p>

<!-- 化学式 -->
<p>水的化学式是H<sub>2</sub>O</p>

<!-- 脚注 -->
<p>万维网由 Tim Berners-Lee 发明<sup>[1]</sup></p>

<sup> (上标):

  • 数学指数
  • 序数词 (1st, 2nd)
  • 脚注引用

<sub> (下标):

  • 化学式
  • 数学下标

为什么不用 CSS 实现?

虽然可以用 CSS 创建视觉效果,但 <sup><sub> 提供了语义:

css
/* CSS 模拟上标 - 不推荐 */
.superscript {
  vertical-align: super;
  font-size: smaller;
}

使用语义化标签的好处:

  1. 屏幕阅读器能正确处理
  2. 在禁用 CSS 时仍然有效
  3. 代码意图更清晰

引用标签

blockquote:块级引用

html
<blockquote cite="https://www.w3.org/standards/">
  <p>让任何人在任何时间、任何地点都能访问 Web。</p>
  <footer>—— <cite>W3C 使命宣言</cite></footer>
</blockquote>

特点:

  • 用于较长的引用(通常是段落级别)
  • 独立成块,通常有缩进
  • cite 属性指向引用来源的 URL

样式建议:

css
blockquote {
  margin: 1em 0;
  padding-left: 1.5em;
  border-left: 4px solid #ccc;
  font-style: italic;
}

q:行内引用

html
<p>孔子说:<q>学而不思则罔,思而不学则殆。</q></p>

特点:

  • 用于短引用(句子或词组)
  • 行内显示
  • 浏览器自动添加引号(根据语言不同使用不同的引号样式)

浏览器自动处理引号:

html
<html lang="en">
  <p>He said: <q>Hello</q></p>
  <!-- 显示为:He said: "Hello" -->
</html>

<html lang="fr">
  <p>Il a dit : <q>Bonjour</q></p>
  <!-- 显示为:Il a dit : « Bonjour » -->
</html>

cite:作品标题

html
<p>我最近在读<cite>JavaScript高级程序设计</cite>。</p>
<p><cite>The New York Times</cite>报道了这一事件。</p>

用途:

  • 书名
  • 文章标题
  • 电影名称
  • 歌曲名称
  • 报纸名称

注意: cite 是一个标签,也是 <blockquote> 的一个属性,不要混淆。

代码相关标签

code:内联代码

html
<p>使用<code>console.log()</code>可以在控制台输出信息。</p>

特点:

  • 表示计算机代码片段
  • 默认使用等宽字体
  • 行内显示

pre:预格式化文本

html
<pre>
function greet() {
  console.log("Hello!");
}
</pre>

特点:

  • 保留空格和换行
  • 使用等宽字体
  • 适合显示代码块、ASCII 艺术等

原理: 普通 HTML 会折叠空白符,但 <pre> 内的文本完全保留原格式,就像用 typewriter 打出来的一样。

code + pre:代码块

html
<pre><code class="language-javascript">
function calculateSum(a, b) {
  return a + b;
}

const result = calculateSum(5, 3);
console.log(result); // 输出: 8
</code></pre>

最佳实践:

  • <pre> 保留格式
  • <code> 提供语义
  • class 属性指定语言(方便语法高亮库使用)

var、kbd、samp:专用代码标签

html
<!-- var: 变量名 -->
<p>函数接受参数<var>x</var>和<var>y</var>。</p>

<!-- kbd: 键盘输入 -->
<p>按<kbd>Ctrl</kbd> + <kbd>C</kbd>复制文本。</p>

<!-- samp: 程序输出 -->
<p>程序输出:<samp>Error: File not found</samp></p>

区别:

  • <var>: 数学或编程中的变量(斜体)
  • <kbd>: 用户应该输入的内容(通常样式化为键盘按键)
  • <samp>: 程序或系统的输出示例

缩写与定义

abbr:缩写

html
<p>
  <abbr title="HyperText Markup Language">HTML</abbr>
  是网页的标记语言。
</p>

作用:

  • 标记缩写词
  • title 属性提供完整形式
  • 鼠标悬停时显示提示
  • 屏幕阅读器会读出完整形式

实际应用:

html
<p>
  <abbr title="World Wide Web Consortium">W3C</abbr>
  是万维网的主要国际标准组织。
</p>

<p>
  项目预计在
  <abbr title="第二季度">Q2</abbr>
  完成。
</p>

dfn:术语定义

html
<p><dfn>HTML</dfn>是一种用于创建网页的标准标记语言。</p>

用途:

  • 标记术语的定义实例
  • 通常在术语首次出现时使用
  • 可以与 <abbr> 结合使用
html
<p>
  <dfn><abbr title="Cascading Style Sheets">CSS</abbr></dfn>
  是一种用于描述 HTML 文档呈现的样式表语言。
</p>

时间与日期

html
<time datetime="2025-11-29">2025年11月29日</time>

<time datetime="2025-11-29T14:30:00+08:00"> 今天下午2点30分 </time>

<time datetime="2025-11">2025年11月</time>

<time> 标签:

  • 标记时间或日期
  • datetime 属性提供机器可读的格式
  • 对于事件、发布日期等特别有用

为什么需要机器可读格式?

搜索引擎和其他应用可以理解时间数据:

  • 在搜索结果中显示发布日期
  • 添加到日历应用
  • 时间线排序
html
<!-- 人类友好显示 + 机器可读格式 -->
<article>
  <h2>新产品发布</h2>
  <time datetime="2025-12-15">下个月中旬</time>
</article>

换行与分隔

br:强制换行

html
<p>
  Emily Johnson<br />
  123 Main Street<br />
  New York, NY 10001<br />
  USA
</p>

使用场景:

  • 地址
  • 诗歌
  • 歌词

注意

不要用 <br> 来增加段落间距,应该使用 CSS 的 margin 属性。<br> 只用于内容本身需要换行的情况。

错误用法:

html
<!-- 错误:用 br 创建间距 -->
<p>段落一</p>
<br /><br />
<p>段落二</p>

<!-- 正确:用 CSS 控制间距 -->
<p>段落一</p>
<p>段落二</p>
<style>
  p {
    margin-bottom: 1em;
  }
</style>

hr:主题分隔

html
<section>
  <h2>第一部分</h2>
  <p>内容...</p>
</section>

<hr />

<section>
  <h2>第二部分</h2>
  <p>内容...</p>
</section>

语义:

  • 表示主题转换或段落级别的内容分隔
  • 不仅仅是视觉上的横线

默认样式: 水平线

何时使用: 内容确实需要主题分隔,而不仅仅是视觉装饰。

实践建议

1. 语义优先原则

html
<!-- 不好:只考虑样式 -->
<div class="bold">重要通知</div>
<div class="italic">电影名称</div>

<!-- 好:语义明确 -->
<strong>重要通知</strong>
<cite>电影名称</cite>

2. 可访问性考虑

html
<!-- 为缩写提供说明 -->
<abbr title="Accessibility">A11y</abbr>

<!-- 为引用提供来源 -->
<blockquote cite="https://source.com">
  <p>引用内容</p>
  <footer>—— 来源</footer>
</blockquote>

<!-- 为时间提供机器可读格式 -->
<time datetime="2025-11-29">今天</time>

3. 避免纯样式标签

html
<!-- 不推荐:纯样式 -->
<font color="red">错误</font>
<u>链接</u>

<!-- 推荐:语义化 + CSS -->
<strong class="error">错误</strong>
<a href="#">链接</a>
<style>
  .error {
    color: red;
  }
</style>

常见问题

问题 1: 什么时候用 strong,什么时候用 CSS 加粗?

使用 <strong>:

  • 内容本身就很重要
  • 希望屏幕阅读器强调朗读
  • 语义上需要表达重要性

使用 CSS:

  • 纯粹的视觉设计需求
  • 导航菜单、按钮等
  • 品牌风格一致性

问题 2: 可以嵌套标签吗?

可以,但要注意语义合理性:

html
<!-- 合理嵌套 -->
<p>
  这是<strong><em>非常重要</em></strong
  >的内容。
</p>

<!-- 避免过度嵌套 -->
<strong>
  <em>
    <mark><code>...</code></mark>
  </em>
</strong>

问题 3: 如何选择合适的标签?

决策流程:

  1. 内容有特殊含义吗?→ 使用语义化标签
  2. 需要特殊样式吗?→ 用 CSS,必要时加 <span>
  3. 不确定吗?→ 用 <span><div>,不要滥用语义化标签

小结

本课学习了 HTML 的文本内容标签:

  1. 强调标签: <strong>, <em>, <b>, <i>
  2. 标记标签: <mark>, <del>, <ins>
  3. 格式标签: <sup>, <sub>, <br>, <hr>
  4. 引用标签: <blockquote>, <q>, <cite>
  5. 代码标签: <code>, <pre>, <var>, <kbd>, <samp>
  6. 定义标签: <abbr>, <dfn>, <time>

核心原则:

  • 选择语义正确的标签
  • 不要仅为样式而选择标签
  • 考虑可访问性和 SEO
  • 必要时用 CSS 控制样式