在 HTML 中添加空格
在 HTML 中两个单词之间输入五个空格,浏览器只会显示一个。任何连续的空格、制表符和换行都会合并成一个空格。要添加额外的空格,就使用不换行空格实体 ,每个空格写一次:
在一行文字中加几个空格时, 很好用。如果需要更大的间隙,或者元素之间的间距,请使用 CSS,下文会讲到。
的作用
是不换行空格(字符 U+00A0)。它有两个作用:
- 它永远不会被合并,所以写三个就是三个空格。
- 浏览器永远不会在它这里换行,所以它两边的词会保持在一起。
第二点才是它真正的用途。数字和单位、姓名缩写,以及被拆到两行会显得别扭的短语,都可以用 连在一起:
在灰色框中,“10”和“km”落在了不同的行上。在绿色框中,它们无法被分开。要让更长的一段文字保持在一起,给 span 设置 white-space: nowrap 比连续写多个实体更简单,参见换行页面。
不同宽度的空格实体
HTML 为更宽和更窄的空格提供了命名字符。它们同样不会被合并,因此很适合用来微调文字中的间距:
| 实体 | 名称 | 宽度 |
|---|---|---|
| 不换行空格 | 与普通空格相同 |
  | En 空格 | 半个 em |
  | Em 空格 | 一个 em(即字号) |
  | 窄空格 | em 的几分之一,取决于字体 |
  | 窄不换行空格 | 很窄,而且不换行 |
蓝色高亮显示了每种空格的宽度。只有 和   同时能阻止换行。
保留所有空格: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。
常见错误
- 用一串
做布局。字体或屏幕尺寸一变,布局就会乱掉。请使用margin、padding或gap。 - 输入多余的空格,并指望它们显示出来。它们会被合并。请使用
或white-space: pre-wrap。 - 把
 写成不带分号的形式。浏览器通常能接受,但它是无效的,在某些位置会失效。始终以;结尾。 - 到处用
来阻止换行。一长段不换行的文字在手机上会溢出。只把必须放在一起的部分连起来。 - 用空格缩进段落。请使用 CSS 的
text-indent。
常见问题
如何在 HTML 中添加空格?
单个空格照常输入就行,但多余的空格会被合并成一个。需要更多空格时,使用不换行空格实体 ,每个空格写一个:a b。如果是布局上的间隙,请改用 CSS 的 margin、padding 或 gap。
HTML 中的 是什么意思?
是不换行空格。它看起来和普通空格一样,但浏览器永远不会在它这里换行,也永远不会合并它,所以它能让 10 km 这样的词保持在一起,也能用来添加额外的空格。
为什么 HTML 会忽略我输入的空格?
HTML 会合并空白字符:任何连续的空格、制表符和换行都显示为一个空格,行首和行尾的空白则会被去掉。要保留它们,可以用 、<pre> 或 CSS 的 white-space 属性。
如何在 HTML 中添加制表符(Tab)?
在预格式化文本之外,HTML 中没有可见的制表符。在 <pre> 或设置了 white-space: pre 的元素中,制表符会被保留,CSS 的 tab-size 属性可以设置它的宽度。要缩进一个段落,请使用 CSS 的 text-indent 或 padding-inline-start。
和   有什么区别?
和普通空格一样宽。  宽半个 em,  宽一个 em(即字号的宽度)。  和   不会被合并,但和 不同的是,在它们这里仍然可能换行。