Menu

HTML 空格: 、多个空格与 white-space

浏览器会把 HTML 中连续的空格合并成一个。学习如何用 &nbsp; 添加额外的空格、不换行空格有什么作用、如何用 <pre> 和 white-space 保留空格和制表符,以及什么时候用 CSS 设置间距更合适。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

在 HTML 中添加空格

在 HTML 中两个单词之间输入五个空格,浏览器只会显示一个。任何连续的空格、制表符和换行都会合并成一个空格。要添加额外的空格,就使用不换行空格实体 &nbsp;,每个空格写一次:

在一行文字中加几个空格时,&nbsp; 很好用。如果需要更大的间隙,或者元素之间的间距,请使用 CSS,下文会讲到。

  的作用

&nbsp; 是不换行空格(字符 U+00A0)。它有两个作用:

  1. 它永远不会被合并,所以写三个就是三个空格。
  2. 浏览器永远不会在它这里换行,所以它两边的词会保持在一起。

第二点才是它真正的用途。数字和单位、姓名缩写,以及被拆到两行会显得别扭的短语,都可以用 &nbsp; 连在一起:

在灰色框中,“10”和“km”落在了不同的行上。在绿色框中,它们无法被分开。要让更长的一段文字保持在一起,给 span 设置 white-space: nowrap 比连续写多个实体更简单,参见换行页面。

不同宽度的空格实体

HTML 为更宽和更窄的空格提供了命名字符。它们同样不会被合并,因此很适合用来微调文字中的间距:

实体名称宽度
&nbsp;不换行空格与普通空格相同
&ensp;En 空格半个 em
&emsp;Em 空格一个 em(即字号)
&thinsp;窄空格em 的几分之一,取决于字体
&#8239;窄不换行空格很窄,而且不换行

蓝色高亮显示了每种空格的宽度。只有 &nbsp; 和 &#8239; 同时能阻止换行。

保留所有空格:pre 与 white-space

当间距本身就是内容的一部分时(代码、ASCII 艺术字、对齐的列、诗歌),应该保留所有空白,而不是添加实体。<pre> 元素默认就会这样做,CSS 的 white-space 属性则可以让任何元素这样做:

white-space 的值空格换行符长行自动换行
normal(默认)合并变成空格是
nowrap合并变成空格否
pre保留保留否
pre-wrap保留保留是
pre-line合并保留是

对于用户输入的文字,你想要的通常是 pre-wrap:它保留间距,在窄屏上也仍然会自动换行。pre 则让每一行保持原样,超出时滚动或溢出。

在 pre 中,制表符也会被保留。它的宽度默认是 8 个空格,可以用 tab-size 属性修改(tab-size: 4)。

用 CSS 设置间距

大多数“我需要在这里加个空格”的情况,其实都是布局问题,而 CSS 比实体做得更好,因为间隙能保持一致,而且只需在一个地方修改:

margin 和 padding 设置元素之间的间距,gap 设置 flex 或 grid 容器中各项之间的间距,letter-spacing 和 word-spacing 设置文字本身的间距。要缩进段落的首行,请使用 text-indent,文本居中页面中有介绍。

行内元素之间的间隙

空白合并也有另一面:两个行内元素或行内块元素之间的空白仍然算作一个空格。源代码中两个按钮之间的换行,会在它们之间留下一个小间隙:

第一对按钮之间有间隙,来自源代码中的换行。在 flex 容器中,各项之间的空白会被忽略,所以第二对按钮紧挨在一起。想要精确控制间距时,请使用 flex 和 gap。

常见错误

  • 用一串 &nbsp; 做布局。字体或屏幕尺寸一变,布局就会乱掉。请使用 margin、padding 或 gap。
  • 输入多余的空格,并指望它们显示出来。它们会被合并。请使用 &nbsp; 或 white-space: pre-wrap。
  • 把 &nbsp 写成不带分号的形式。浏览器通常能接受,但它是无效的,在某些位置会失效。始终以 ; 结尾。
  • 到处用 &nbsp; 来阻止换行。一长段不换行的文字在手机上会溢出。只把必须放在一起的部分连起来。
  • 用空格缩进段落。请使用 CSS 的 text-indent。

常见问题

如何在 HTML 中添加空格?

单个空格照常输入就行,但多余的空格会被合并成一个。需要更多空格时,使用不换行空格实体 &nbsp;,每个空格写一个:a&nbsp;&nbsp;&nbsp;b。如果是布局上的间隙,请改用 CSS 的 margin、padding 或 gap。

HTML 中的 &nbsp; 是什么意思?

&nbsp; 是不换行空格。它看起来和普通空格一样,但浏览器永远不会在它这里换行,也永远不会合并它,所以它能让 10&nbsp;km 这样的词保持在一起,也能用来添加额外的空格。

为什么 HTML 会忽略我输入的空格?

HTML 会合并空白字符:任何连续的空格、制表符和换行都显示为一个空格,行首和行尾的空白则会被去掉。要保留它们,可以用 &nbsp;、<pre> 或 CSS 的 white-space 属性。

如何在 HTML 中添加制表符(Tab)?

在预格式化文本之外,HTML 中没有可见的制表符。在 <pre> 或设置了 white-space: pre 的元素中,制表符会被保留,CSS 的 tab-size 属性可以设置它的宽度。要缩进一个段落,请使用 CSS 的 text-indent 或 padding-inline-start。

&nbsp; 和 &emsp; 有什么区别?

&nbsp; 和普通空格一样宽。&ensp; 宽半个 em,&emsp; 宽一个 em(即字号的宽度)。&ensp; 和 &emsp; 不会被合并,但和 &nbsp; 不同的是,在它们这里仍然可能换行。

Coddy 编程语言插图

和 Coddy 一起学编程

开始