高级文本格式化

HTML 中还有许多其他用于格式化文本的元素,我们在HTML 文本基础文章中没有提到。本文中描述的元素不太为人所知,但仍然有用(而且这绝不是完整列表)。在这里,您将学习如何标记引用、描述列表、计算机代码和其他相关文本、下标和上标、联系信息等等。

先决条件 熟悉 HTML 基础,如HTML 入门中所述。HTML 文本格式,如HTML 文本基础中所述。
目标 学习如何使用鲜为人知的 HTML 元素来标记高级语义特征。

描述列表

在 HTML 文本基础中,我们介绍了如何在 HTML 中标记基本列表,并且我们提到了您偶尔会遇到的第三种列表类型——**描述列表**。这些列表的目的是标记一组项目及其关联的描述,例如术语和定义,或问题和答案。让我们看一个术语和定义的示例

soliloquy
In drama, where a character speaks to themselves, representing their inner thoughts or feelings and in the process relaying them to the audience (but not to other characters.)
monologue
In drama, where a character speaks their thoughts out loud to share them with the audience and any other characters present.
aside
In drama, where a character shares a comment only with the audience for humorous or dramatic effect. This is usually a feeling, thought or piece of additional background information

描述列表使用与其他列表类型不同的包装器——<dl>;此外,每个术语都包装在<dt>(描述术语)元素中,每个描述都包装在<dd>(描述定义)元素中。

描述列表示例

让我们完成我们示例的标记

html
<dl>
  <dt>soliloquy</dt>
  <dd>
    In drama, where a character speaks to themselves, representing their inner
    thoughts or feelings and in the process relaying them to the audience (but
    not to other characters.)
  </dd>
  <dt>monologue</dt>
  <dd>
    In drama, where a character speaks their thoughts out loud to share them
    with the audience and any other characters present.
  </dd>
  <dt>aside</dt>
  <dd>
    In drama, where a character shares a comment only with the audience for
    humorous or dramatic effect. This is usually a feeling, thought, or piece of
    additional background information.
  </dd>
</dl>

浏览器默认样式会将描述列表的描述相对于术语略微缩进。

一个术语的多个描述

请注意,允许一个术语具有多个描述,例如

html
<dl>
  <dt>aside</dt>
  <dd>
    In drama, where a character shares a comment only with the audience for
    humorous or dramatic effect. This is usually a feeling, thought, or piece of
    additional background information.
  </dd>
  <dd>
    In writing, a section of content that is related to the current topic, but
    doesn't fit directly into the main flow of content so is presented nearby
    (often in a box off to the side.)
  </dd>
</dl>

主动学习:标记一组定义

现在轮到您尝试描述列表了;在输入字段中的原始文本中添加元素,使其在输出字段中显示为描述列表。如果您愿意,可以使用您自己的术语和描述。

如果您犯了错误,可以使用重置按钮随时重置。如果您真的卡住了,请按显示解决方案按钮查看答案。

引用

HTML 还提供了用于标记引用的功能;您使用哪个元素取决于您是在标记块引用还是内联引用。

块引用

如果一段块级内容(无论是段落、多个段落、列表等)是从其他地方引用过来的,则应将其包装在<blockquote>元素中以表示这一点,并在cite属性中包含指向引用来源的 URL。例如,以下标记取自 MDN 的<blockquote>元素页面

html
<p>
  The <strong>HTML <code>&lt;blockquote&gt;</code> Element</strong> (or
  <em>HTML Block Quotation Element</em>) indicates that the enclosed text is an
  extended quotation.
</p>

要将其转换为块引用,我们只需执行以下操作

html
<p>Here is a blockquote:</p>
<blockquote
  cite="https://mdn.org.cn/en-US/docs/Web/HTML/Element/blockquote">
  <p>
    The <strong>HTML <code>&lt;blockquote&gt;</code> Element</strong> (or
    <em>HTML Block Quotation Element</em>) indicates that the enclosed text is
    an extended quotation.
  </p>
</blockquote>

浏览器默认样式会将其呈现为缩进的段落,以指示它是一个引用;引用上方的段落是为了演示这一点。

内联引用

内联引用的工作方式完全相同,只是它们使用<q>元素。例如,以下标记包含来自 MDN 的<q>页面的引用

html
<p>
  The quote element — <code>&lt;q&gt;</code> — is
  <q cite="https://mdn.org.cn/en-US/docs/Web/HTML/Element/q">
    intended for short quotations that don't require paragraph breaks.
  </q>
</p>

浏览器默认样式会将其呈现为用引号括起来的普通文本,以指示引用,如下所示

引用

尽管`cite` 属性的内容看起来很有用,但不幸的是,浏览器、屏幕阅读器等并没有真正利用它。无法让浏览器显示 cite 的内容,除非使用 JavaScript 或 CSS 编写自己的解决方案。如果你想在页面上提供引文的来源,你需要通过链接或其他合适的方式在文本中提供。

有一个`<cite>` 元素,但它用于包含被引用资源的标题,例如书籍名称。但是,没有任何理由阻止你以某种方式将 <cite> 内部的文本链接到引文来源。

html
<p>
  According to the
  <a href="/en-US/docs/Web/HTML/Element/blockquote">
    <cite>MDN blockquote page</cite></a>:
</p>

<blockquote
  cite="https://mdn.org.cn/en-US/docs/Web/HTML/Element/blockquote">
  <p>
    The <strong>HTML <code>&lt;blockquote&gt;</code> Element</strong> (or
    <em>HTML Block Quotation Element</em>) indicates that the enclosed text is
    an extended quotation.
  </p>
</blockquote>

<p>
  The quote element — <code>&lt;q&gt;</code> — is
  <q cite="https://mdn.org.cn/en-US/docs/Web/HTML/Element/q">
    intended for short quotations that don't require paragraph breaks.
  </q><a href="/en-US/docs/Web/HTML/Element/q"><cite>MDN q page</cite></a>.
</p>

默认情况下,引用以斜体显示。

主动学习:谁说的?

是时候进行另一个主动学习示例了!在这个示例中,我们希望你

  1. 将中间段落转换为一个包含 cite 属性的块引用。
  2. 将第三段落中的“The Need To Eliminate Negative Self Talk”转换为内联引用,并包含 cite 属性。
  3. 将每个来源的标题用 <cite> 标签包裹起来,并将每个标题转换为指向该来源的链接。

你需要引用的来源是

  • 孔子语录的来源:http://www.brainyquote.com/quotes/authors/c/confucius.html
  • “The Need To Eliminate Negative Self Talk”的来源:http://example.com/affirmationsforpositivethinking

如果您犯了错误,可以使用重置按钮随时重置。如果您真的卡住了,请按显示解决方案按钮查看答案。

缩写

在浏览网页时,你会经常遇到另一个相当常见的元素`<abbr>`,它用于包裹缩写或首字母缩略词。当包含缩写或首字母缩略词时,请在首次使用时提供该术语的完整扩展,并使用 <abbr> 标记缩写。这为用户代理提供了一个提示,说明如何宣布/显示内容,同时告知所有用户缩写的含义。

如果除了缩写之外还提供扩展没有意义,并且缩写或首字母缩略词是一个相当简短的术语,请将该术语的完整扩展作为`title` 属性的值。

缩写示例

让我们看一个例子。

html
<p>
  We use <abbr>HTML</abbr>, Hypertext Markup Language, to structure our web
  documents.
</p>

<p>
  I think <abbr title="Reverend">Rev.</abbr> Green did it in the kitchen with
  the chainsaw.
</p>

这些将看起来像这样

注意:早期版本的 HTML 也支持`<acronym>` 元素,但它已从 HTML 规范中移除,转而使用 <abbr> 来表示缩写和首字母缩略词。不应使用 <acronym>

主动学习:标记缩写

对于这个简单的主动学习作业,我们希望你标记一个缩写。你可以使用下面的示例,或者用你自己的示例替换它。

标记联系信息

HTML 有一个用于标记联系信息的元素`<address>`。它用于包裹你的联系信息,例如

html
<address>Chris Mills, Manchester, The Grim North, UK</address>

它还可以包含更复杂的标记和其他形式的联系信息,例如

html
<address>
  <p>
    Chris Mills<br />
    Manchester<br />
    The Grim North<br />
    UK
  </p>

  <ul>
    <li>Tel: 01234 567 890</li>
    <li>Email: [email protected]</li>
  </ul>
</address>

请注意,如果链接的页面包含联系信息,以下内容也是可以的。

html
<address>
  Page written by <a href="../authors/chris-mills/">Chris Mills</a>.
</address>

注意:`<address>` 元素只能用于提供包含在最近的`<article>` 或`<body>` 元素中的文档的联系信息。在网站的页脚中使用它来包含整个网站的联系信息,或在文章中使用它来包含作者的联系信息是正确的,但不要用它来标记与该页面内容无关的地址列表。

上标和下标

在标记日期、化学式和数学方程式等项目时,你偶尔需要使用上标和下标,以便它们具有正确的含义。`<sup>` 和`<sub>` 元素负责处理此工作。例如

html
<p>My birthday is on the 25<sup>th</sup> of May 2001.</p>
<p>
  Caffeine's chemical formula is
  C<sub>8</sub>H<sub>10</sub>N<sub>4</sub>O<sub>2</sub>.
</p>
<p>If x<sup>2</sup> is 9, x must equal 3 or -3.</p>

此代码的输出如下所示

表示计算机代码

有许多元素可用于使用 HTML 标记计算机代码

  • <code>:用于标记通用的计算机代码片段。
  • <pre>:用于保留空白字符(通常是代码块)——如果你在文本中使用缩进或多余的空白字符,浏览器将忽略它们,你将不会在渲染的页面上看到它们。但是,如果你将文本用 <pre></pre> 标签包裹起来,你的空白字符将与你在文本编辑器中看到的一样进行渲染。
  • <var>:专门用于标记变量名称。
  • <kbd>:用于标记输入到计算机中的键盘(和其他类型)输入。
  • <samp>:用于标记计算机程序的输出。

让我们看看这些元素的示例以及它们如何用于表示计算机代码。如果你想查看完整的文件,请查看`other-semantics.html` 示例文件。你可以下载该文件并在浏览器中打开它以自行查看,但这里有一段代码片段

html
<pre><code>const para = document.querySelector('p');

para.onclick = function() {
  alert('Owww, stop poking me!');
}</code></pre>

<p>
  You shouldn't use presentational elements like <code>&lt;font&gt;</code> and
  <code>&lt;center&gt;</code>.
</p>

<p>
  In the above JavaScript example, <var>para</var> represents a paragraph
  element.
</p>

<p>Select all the text with <kbd>Ctrl</kbd>/<kbd>Cmd</kbd> + <kbd>A</kbd>.</p>

<pre>$ <kbd>ping mozilla.org</kbd>
<samp>PING mozilla.org (63.245.215.20): 56 data bytes
64 bytes from 63.245.215.20: icmp_seq=0 ttl=40 time=158.233 ms</samp></pre>

以上代码将如下所示

标记时间和日期

HTML 还提供`<time>` 元素,用于以机器可读的格式标记时间和日期。例如

html
<time datetime="2016-01-20">20 January 2016</time>

这有什么用?嗯,人类记录日期的方式有很多种。上述日期可以写成

  • 20 January 2016
  • 20th January 2016
  • Jan 20 2016
  • 20/01/16
  • 01/20/16
  • The 20th of next month
  • 20e Janvier 2016
  • 2016 年 1 月 20 日
  • 等等

但这些不同的形式不容易被计算机识别——如果你想自动获取页面上所有事件的日期并将其插入日历中怎么办?`<time>` 元素允许你为此目的附加一个明确的、机器可读的时间/日期。

上面的基本示例只提供了一个简单的机器可读日期,但还有许多其他选项是可能的,例如

html
<!-- Standard simple date -->
<time datetime="2016-01-20">20 January 2016</time>
<!-- Just year and month -->
<time datetime="2016-01">January 2016</time>
<!-- Just month and day -->
<time datetime="01-20">20 January</time>
<!-- Just time, hours and minutes -->
<time datetime="19:30">19:30</time>
<!-- You can do seconds and milliseconds too! -->
<time datetime="19:30:01.856">19:30:01.856</time>
<!-- Date and time -->
<time datetime="2016-01-20T19:30">7.30pm, 20 January 2016</time>
<!-- Date and time with timezone offset -->
<time datetime="2016-01-20T19:30+01:00">
  7.30pm, 20 January 2016 is 8.30pm in France
</time>
<!-- Calling out a specific week number -->
<time datetime="2016-W04">The fourth week of 2016</time>

测试你的技能!

你已经到达了本文的结尾,但你能记住最重要的信息吗?在继续之前,你可以找到一些进一步的测试来验证你是否保留了这些信息——请参阅`测试你的技能:高级 HTML 文本`。

总结

这标志着我们对 HTML 文本语义的研究结束。请记住,你在本课程中学到的内容并非 HTML 文本元素的详尽列表——我们希望尝试涵盖基本内容,以及你在实际应用中会看到的一些更常见的元素,或者至少你可能会觉得有趣的元素。要查找更多 HTML 元素,你可以查看我们的`HTML 元素参考`(`内联文本语义` 部分将是一个很好的起点)。在下一篇文章中,我们将了解用于`构建 HTML 文档的不同部分`的 HTML 元素。