字节笔记本

2026年2月22日

HTML 引用完全指南:正确使用 blockquote、q 和 cite 标签

在 HTML 中标记引用内容时,经常会看到错误的标签用法。本文将深入探讨不同场景下应该使用哪些 HTML 标签来正确处理引用。

HTML 提供了三个主要的引用相关元素:

  • <blockquote> - 块级引用
  • <q> - 行内引用
  • <cite> - 引用来源

Blockquotes

<blockquote> 标签用于将引用的文本与周围内容区分开来。虽然传统写作中常将四行以上的引用设为独立段落,但 HTML 规范并没有这样的硬性规定。只要文本是引用内容,并且你希望将其与周围内容分开显示,<blockquote> 就是语义化的正确选择。

浏览器默认会为 <blockquote> 添加左右边距以实现缩进效果。

作为流式元素(块级元素),<blockquote> 内部可以包含其他元素,例如段落:

html
<blockquote>
  <p>第一段引用内容...</p>
  <p>第二段引用内容...</p>
</blockquote>

也可以包含标题或列表等其他元素:

html
<blockquote>
  <h2>引用标题</h2>
  <ul>
    <li>列表项一</li>
    <li>列表项二</li>
  </ul>
</blockquote>

需要注意的是,<blockquote> 应该仅用于实际的引用内容,而不是作为设计中的装饰元素。这也有助于提升可访问性,因为屏幕阅读器用户可以在引用之间跳转。如果只是为了视觉效果,应该使用带有 class 的 <div>

行内引用 Q 标签

<q> 标签用于行内引用,即较短的引用内容。现代浏览器通常会自动添加引号作为伪元素,但对于旧浏览器可能需要备用方案。

传统的引号标记对于行内引用同样有效。使用 <q> 标签的好处包括支持 cite 属性、自动处理引号以及支持嵌套引用层级。

<q> 标签不应该用于讽刺语气(例如:你真的会使用 <q> 标签来讽刺,不是吗?)或表示所谓的"手势引号"。

Citation 属性

<q><blockquote> 都可以使用 cite 属性来提供引用内容的来源 URL。规范特别指出 URL 周围可以包含空格。

html
<p>警官留下了一张纸条说 <q cite="https://example.com/summons">你已被传唤于 1 月 4 日出庭...</q></p>

这个 cite 属性默认对用户不可见,但可以通过 CSS 来显示。

Citation 元素

<cite> 标签应该用于引用创作作品(如书籍、文章、音乐等),而不是引用说话的人。例如:

html
<p>我最喜欢的书是 <cite>The Reality Dysfunction</cite>,作者是 Peter F. Hamilton。</p>

浏览器默认会将 <cite> 标签内容显示为斜体。

重要的一点是,<cite> 不应该放在 <blockquote><q> 标签内部,因为这会使其成为引用内容的一部分,而规范禁止这样做。

使用 Figure 元素

一种语义正确的引用标记方式是将 <blockquote> 放在 <figure> 元素内,然后将 <cite> 元素和其他作者信息放在 <figcaption> 中:

html
<figure class="quote">
  <blockquote>
    但 Web 浏览器不像 Web 服务器...
  </blockquote>
  <figcaption>
    — Jeremy Keith, <cite>Mental models</cite>
  </figcaption>
</figure>

这种方式的好处包括:

  • 所有四个元素的语义都是正确的
  • 可以包含和封装除作品名称之外的作者信息
  • 便于样式设计,无需使用额外的 div 或 span

不适用于对话

<blockquote><q><cite> 都不应该用于标记对话或类似的说话者之间的交流。对于对话,规范建议使用 <p> 标签配合标点符号,以及 <span><b> 标签来标记说话者,<i> 标签来标记舞台指导。

引用的可访问性

根据研究,屏幕阅读器应该能够正确理解语义化的 <q><blockquote><cite> 标签,不会出现问题。

更多引用技巧

使用 CSS 添加引号

可以使用 CSS 伪元素为 <blockquote> 添加引号:

css
blockquote {
  quotes: "\"" "\"" "'" "'";
}

为了确保显示智能引号(弯引号),最好使用 quotes CSS 属性。

多级引用

<q> 标签会自动调整引用层级。如果你在使用英式惯例(单引号),可以通过 CSS 设置:

css
q {
  quotes: "'" "'" "\"" "\"";
}

嵌套引用没有层级限制,甚至可以嵌套在 <blockquote> 内的 <blockquote> 中。

悬挂标点

排版专家通常建议将引号悬挂在文本外侧,使文字垂直对齐。可以使用负的 text-indenthanging-punctuation CSS 属性来实现:

css
/* 回退方案 */
blockquote {
  text-indent: -0.45em;
}

/* 如果浏览器支持,使用 hanging-punctuation */
@supports (hanging-punctuation: first) {
  blockquote {
    text-indent: 0;
    hanging-punctuation: first;
  }
}

动画引号

当然,我们也可以为引号添加动画效果,因为 <q> 标签中的引号是作为伪元素添加的,可以被选择和样式化。


原文链接: Quoting in HTML: Quotations, Citations, and Blockquotes

作者: John Rhea

发布日期: December 10, 2019

分享: