Skip to content
This page has been auto-translated and may contain errors.View in English

文本元素

docs.scrimba.com

访问者在页面上阅读的大多数内容都是普通的书面内容:标题、段落、加粗的警告、引用的文字、代码片段。HTML 为这些内容各自提供了特定的元素,选择正确的元素不仅仅改变文本的外观。它告诉浏览器、搜索引擎和辅助工具每段文本实际上是什么。

标题和层级

HTML 为你提供了六种大小的**标题**,从 <h1><h6>。标题是页面或其某个部分的标题。<h1> 是主标题,是顶部最大的那个。<h2> 标记主要部分,<h3> 标记其中的小节,以此类推到 <h6>

想象一本印刷的书。封面上的标题是 <h1>。每个章标题是 <h2>。章内的标题是 <h3>。你使用这些级别来显示什么属于什么之下。

从一开始就要记住的一点是:不要因为标题让文本变成你想要的大小而选择它。<h1> 看起来很大,但它的作用是说"这是主标题",而不是"让这个变大"。如果你想要某个地方的大文本,那是CSS稍后要做的工作。

六个标题元素 <h1><h6> 描述了文档的**层级**:哪些部分是章节,哪些是小节。数字是等级,不是大小。<h1> 在大纲的顶部,<h2> 在其下方,<h3> 在其下方。

从一开始就要建立的规则是按顺序嵌套它们,不跳过级别。标题为 <h2> 的部分应该包含 <h3> 小节,而不是直接跳到 <h4>。跳过级别以达到更小的默认大小是经典错误,这是错误的工具:如果你想让标题看起来某种方式,用 CSS 样式化它,并将数字保留用于其在结构中的等级。

标题元素定义了文档的**大纲**:其章节的有序分级结构,就像目录一样将主题嵌套在主题之下。由此产生三条生产规则,这三条都是关于可访问性和搜索,而不是外观。

首先,每页使用一个 <h1>,这是该页面内容的真正标题。它是大纲的顶部,拥有恰好一个为每个工具提供了关于页面内容的单一、明确的锚点。

其次,向下时不要跳过级别。屏幕阅读器(为无法看到页面的人大声读页面的软件)让其用户能够查看每个标题的列表并在它们之间跳转,就像视力正常的读者为寻找所需部分而浏览一样。从 <h2> 跳到 <h4> 在该列表中显示为缺失的级别,导航停止有意义。

第三,等级是语义的,永远不是大小。搜索引擎读取标题结构以了解页面如何组织,所以选择 <h3> 是因为其默认大小看起来正确,而不是因为它实际上是第三级部分,会默默地误导爬虫和屏幕阅读器。在 CSS 中设置大小;让数字承载含义。

html
<h1>初学者烤酸面包</h1>

<h2>建立发酵种</h2>
<p>发酵种是面粉和水的活培养物。</p>

<h3>第一天到第三天</h3>
<p>混合等量的面粉和水,然后等待。</p>

<h2>烤你的第一条面包</h2>
<p>一旦发酵种活跃,你就准备好烤了。</p>

一个 <h1> 命名整个页面。两个 <h2> 标题标记主要部分,<h3> 整齐地位于第一个部分内。单独读标题数字,你可以在不读一个字正文的情况下看到文章的形状。

Juno标题和层级 六个标题,<h1><h6><h1> 是一个主标题在顶部。其余的标记你的章节和小节。我早期陷入的陷阱:不要仅仅因为标题看起来很大就抓取它,那是 CSS 的工作。数字是关于事物是什么,而不是它的大小。
Juno标题和层级 标题对你的内容进行排名,它们不改变大小。按顺序嵌套它们,不要跳过一个级别来到达更小的默认值,那是让人们绊脚的。需要标题看起来某种方式?在 CSS 中样式化它,让数字描述结构。
Juno标题和层级 每页一个 <h1>,向下时无跳过的级别,永远不要为了大小而选择等级。屏幕阅读器用户像目录一样在标题之间跳转,搜索引擎读取相同的大纲,所以为了外观选择的标题会误导两者。保持数字语义化并将外观推入 CSS。

段落和换行

普通文本块放在**段落**中,即 <p> 元素。将每个段落包装在自己的 <p>...</p> 中,浏览器会在其上下方给予一些空间,因此段落彼此分开,就像在书中一样。

html
<p>面包需要四样东西:面粉、水、盐和时间。</p>
<p>把这些做好,其余的就是耐心。</p>

注意在你的 HTML 文件中按 Enter 不会对页面做任何事情。浏览器忽略你键入的换行符和额外空格;它只关心标签。这就是为什么你需要 <p> 来分隔段落,而不仅仅是在不同的行上键入它们。

如果你真的需要一条线在段落内断开,比如地址的行或短诗的行,有一个 <br> 元素可以用。它强制单行换行,仅此而已。

<p> 元素持有一个流动文本的段落,它是正文内容的默认主页。浏览器将源中的任何空格、制表符和换行符序列压缩成单个空格,所以页面上文本的布局来自标签,而不是你如何格式化文件。

<br> 元素在文本块内强制换行。它是一个空元素,没有关闭标签,当换行是内容本身的一部分时它才是对的:邮政地址、诗的行、签名块。

html
<p>
  张三<br>
  北京市朝阳区建国路 14 号<br>
  100000
</p>

<br> 错误的地方是作为间距工具。堆叠 <br><br> 来推开两个段落看起来不错,但这是错误的直觉:这两个是段落,所以它们是两个 <p> 元素,它们之间的间隙是展示,属于 CSS。为了创建空间而使用 <br> 混合了结构和样式,正是早期值得打破的习惯。

<p> 是一个块级元素,意味着它开始新的一行并占用所有可用宽度,与其周围的段落垂直堆叠。它是运行散文的正确容器,浏览器对其内容应用空格折叠:源中空格、制表符和换行符的任何序列都变成渲染输出中的一个空格。这就是为什么源格式化对于对你可读的内容自由。

<br> 代表对内容有意义的换行,而不是布局间隙。这个区别有具体的可访问性成本。屏幕阅读器将 <p> 边界视为段落的末尾并相应地暂停,给其用户一种一个想法结束和下一个想法开始的地方的感觉。一堆 <br> 元素不产生这样的边界:软件直接读,视力正常的读者在间距中看到的结构对于听者是不可见的。作为间距的空段落有相同的问题,一些屏幕阅读器宣布它们为空白,其他跳过它们,无论哪种方式,你打算的间隙都没有被传达。

在与真实项目接触中存活的规则:<br> 仅当换行是数据的一部分时(地址、诗句、表单标签中的一行),垂直块之间的间距总是在 CSS 中用 margin。结构承载意义;样式承载外观,保持它们分开是使页面既可维护又可访问的原因。

Juno段落和换行 每块文本都进入自己的 <p>...</p>,那就是在段落之间放置空间的原因。浏览器忽略你键入的 Enters 和空格,所以标签做工作。仅当一条线真的需要在段落中断开时才使用 <br>,比如地址。
Juno段落和换行<p> 代表段落,浏览器折叠你的源空格,所以格式化文件对页面上的任何东西都没有改变。<br> 代表属于内容的断开,比如地址,永远不是为了推开东西。两个 <br> 来制造间隙是间距已泄漏出 CSS 的信号。
Juno段落和换行<p> 是一个块,给屏幕阅读器一个真实的段落边界来暂停;一堆 <br> 不给它任何东西,对于任何听的人来说结构消失了。所以 <br> 仅当断开是数据的一部分时,所有垂直间距都在 CSS 中用 margin。作为间距的空段落有相同的可访问性漏洞,也跳过它们。

强调:<strong><b><em><i>

两个元素使文本加粗,两个使其斜体。<strong><b> 都渲染为粗体;<em><i> 都渲染为斜体。所以四个标签,两种外观。

html
<p><strong>警告:</strong>烤箱非常热。</p>
<p>你需要彻底<em>揉搓</em>面团。</p>

现在,当一段文本很重要时,比如警告时,使用**<strong>**,当你想强调一个单词(就像你大声朗读时你的声音会做的那样)时,使用 <em>。这两个是你大多数时候想要的,浏览器为你使它们粗体和斜体。

这四个元素分为两对,分割是在含义和外观之间。<strong><em>语义的:它们对文本说了什么。<b><i> 是展示的:它们只改变它的外观。

当内容携带**重要性、严肃性或紧急性时使用 <strong>:警告、关键指令。对于强调重点**使用 <em>,如果你大声读句子,你会倾斜的单词,这可以改变其含义。两者都恰好分别渲染为粗体和斜体,但你选择它们是为了它们的含义。

<b><i> 是用于你想要粗体或斜体并且没有重要性或强调的情况。一个 <b> 为了吸引眼睛的关键字,一个 <i> 为了船的名称或外来短语。它们标记文本为风格上分开的,而不声称它更重要。

html
<p><strong>不要</strong>在系统加压时打开阀门。</p>
<p>她低声说那是<em>她</em>的主意,而不是他的。</p>
<p>键盘快捷键是 <b>Ctrl</b> 加 <b>S</b>。</p>
<p>我们乘坐<i>玛丽夫人</i>渡轮过了河。</p>

如果你只记得一件事:<strong><em> 表示它,<b><i> 仅展示它。当文本真的重要时,使用语义对。

所有四个都用浏览器默认会的两种方式渲染,粗体或斜体,所以在屏幕上它们是可互换的。区别是它们传达给任何不看像素的东西的东西,那就是选择实际存在的地方。

<strong> 标记重要性:严肃、紧急或必须不遗漏的内容。<em> 标记强调重点:其权重改变句子含义的单词(比较"call me tomorrow"和"call me tomorrow")。屏幕阅读器可以对这些行动。许多会在强调文本上转移音调或速度,<strong> 可以与普通散文不同地浮出,所以你编码的重要性实际上被传达给没有看到粗体的人。嵌套它们以求度数:<strong> 内部 <strong> 读作更大的重要性,<em> 内部 <em> 读作更重的强调。

<b><i> 是展示对,它们的正确选择比"避免它们"建议更常见。它们的真实定义很窄。<b> 为了实际原因吸引注意力到文本,没有添加重要性:摘要中的关键字、评论中的产品名称。<i> 标记替代声音或心情中的文本:技术术语首次使用、分类名称如 Homo sapiens、另一种语言的短语、角色的内心想法。当有更具体的元素时(<cite> 代表工作的标题、<dfn> 代表定义、<code> 代表代码),使用那个代替;<b><i> 是当文本分开但没有更强的含义适用时的备选。

要避免的失败模式是在你指 <strong> 时使用 <b>,或在你指 <em> 时使用 <i>。它们看起来一致,所以屏幕上没有告诉你它是错误的,但你已经丢弃了辅助技术依赖的重要性或强调。问文本的含义,而不是它应该如何看:如果它重要,<strong><em>;如果它只是分开,<b><i>

Juno强调:strong 和 b、em 和 i<strong><b> 都加粗,<em><i> 都斜体。起初,当某些东西很重要时使用 <strong>,比如警告,当你想强调一个单词时使用 <em>,就像你的声音会做的那样。这两个会涵盖你写的几乎所有东西。
Juno强调:strong 和 b、em 和 i<strong> 表示重要,<em> 表示强调,两者都承载含义。<b><i> 是相同的粗体和斜体,没有含义在它们后面,为了文本你只是想分开的。无论如何相同的外观,所以按文本的含义来选择对,而不是它应该如何出现。
Juno强调:strong 和 b、em 和 i 在屏幕上所有四个都只是粗体或斜体;区别是屏幕阅读器听到的。<strong><em> 编码重要性和强调并可以不同地公告,所以当你指那些时抓住 <b><i> 悄悄地丢弃含义。<b><i> 对于仅分开的文本是对的,一个关键字或一个术语,当没有更具体的元素适合时。

其他内联文本(引用、<code><abbr> 和更多)

除了粗体和斜体,HTML 有小元素用于常见的文本位。短引用位于 <q> 中,浏览器为你添加引号。代码片段,比如命令的名称,进入**<code>**,浏览器以等宽字体显示它,使其从普通文本中脱颖而出。

html
<p>我奶奶常说 <q>看着的壶永远不会沸腾</q>。</p>
<p>使用 <code>Ctrl S</code> 快捷键保存文件。</p>

还有少数几个这样的,但 <q> 代表短引用,<code> 代表代码是你会最常遇到的两个。每个都包装一点文本并告诉浏览器它是什么。

这些是内联元素:它们在段落内包装文本运行,而不像 <p> 那样的块一样断开到自己的行上。每个命名一个文本片段是什么,所以采用特定的元素而不是样式化普通 <span> 来看部分。

值得知道的是:

html
<p>报告引用 <cite>实用程序员</cite>两次。</p>
<p>运行 <code>npm install</code>,然后按 <kbd>Enter</kbd>。</p>
<p>房间是 <strong>24m<sup>2</sup></strong> 的楼面空间。</p>
<p>旧的总数是 <del>£40</del> <ins>£32</ins>。</p>
<p>作为 <abbr title="HyperText Markup Language">HTML</abbr> 成熟,标签确定。</p>

<cite> 命名工作的标题。<code> 标记代码,<kbd> 标记键盘输入,<samp> 标记程序输出。<sup><sub> 是上标和下标,用于指数和化学公式之类的东西。度符号是它自己的字符 °,而不是上标。<del><ins> 标记删除和插入的文本,对于显示编辑或价格变更很有用。<abbr> 标记缩写,其 title 属性持有完整展开。

<q> 用于短内联引用,并自动添加引号。对于更长的、独立的引用,你需要 <blockquote>,这是一个块元素。

这些是内联元素,在文本行内流动而不是形成自己的块。它们存在使文本片段可以在标记中携带其含义,这使该含义对辅助技术、搜索引擎和你自己的样式和脚本可用。实际指导是使用适合的最具体的元素,并仅当没有一个适合时回退到中立 <span>

你实际上会使用的集合:

html
<p>见 <cite>设计数据密集型应用</cite>,第三章。</p>
<p>键入 <kbd>git status</kbd> 来看 <samp>nothing to commit</samp>。</p>
<p>样本全始终使用了 <abbr title="Cascading Style Sheets">CSS</abbr> 变量。</p>
<p>修订的数字:<del>1,200</del> <ins>1,450</ins> 条目。</p>

<cite> 标记引用工作的标题(书、电影或论文),不是人的名字,这是人们不断出错的一点。<code> 是计算机代码的片段,<kbd> 是用户键盘输入,两个经常都渲染等宽但互动方向相反的东西。<samp> 是程序的样本输出。<abbr> 标记缩写并采用持有完整展开的 title 属性;屏幕阅读器可以公告或提供该展开,并且它在悬停时显示为工具提示,所以读者永远不会被留下猜测字母代表什么。<del><ins> 代表编辑、删除的文本和添加的文本,并被如此公告,这在变更是要点时重要,比如价格更正或红线。

对于引用,<q> 是内联的并通过 CSS 插入语言环境感知的引号(这就是为什么你不自己键入标记),而 <blockquote> 是扩展引用的块级元素,两个都采用持有源的 URL 的可选 cite 属性。贯穿所有这些:元素是含义,外观是一个单独的层你在 CSS 中设置。为了文本是什么而选择标签,而不是为了等宽或斜体外观,是什么保持页面对那些看不到它的工具可读。

Juno其他内联文本(引用、代码、缩写和更多)<q> 包装短引用并为你添加引号,<code> 以等宽字体显示代码使其脱颖而出。还有少数几个这样的小标签,但这两个来了最多。每个都只是包装一点文本并说它是什么。
Juno其他内联文本(引用、代码、缩写和更多) 这些内联标签每个命名一个片段是什么:<code> 代表代码,<kbd> 代表按下的键,<cite> 代表工作的标题,<abbr>title 代表完整形式。采用具体的而不是样式化普通 <span>。而 <q> 代表短引用,<blockquote> 代表独立的。
Juno其他内联文本(引用、代码、缩写和更多) 使用最具体的内联元素,仅当没有适合时回退到 <span>。观看人们滥用的那些:<cite> 是工作的标题,不是人,<code><kbd> 看起来相似但表示互动的相反端。<abbr>title 由辅助技术读出,<q> 提供自己的引号,所以不要键入它们。