是 unicode u+00a0 的 html 实体,用于表示不换行空格,防止浏览器合并空格或断行,适用于数字与单位、人名等语义不可分割场景,需严格带分号书写。

直接用 就行,但必须带分号、不能手敲下划线,否则无效。
为什么普通空格打多个没用
浏览器默认会把连续空格(包括换行、制表符)合并成一个显示,这是 HTML 的解析规则,不是 bug。比如你写 hello<p> world</p>,实际渲染出来只有“hello world”中间一个空格。
-
是 Unicode U+00A0,ASCII 160,和普通空格(ASCII 32)根本不是同一个字符 - 它不会被合并,也不会在该位置断行——这才是“不换行空格”的真实含义
- 常见误写:
 (缺分号)、_nbsp(下划线是纯文本,浏览器照原样显示)、&nbps;(拼错)
什么时候该用 而不是 CSS
它适合解决「语义上不能断开」的场景,不是为了撑间距或对齐而硬塞。
- 数字与单位之间:如
100 px、5 GB,防止“100”在行尾、“px”被挤到下一行 - 人名/专有名词内部:如
李 四、John Doe,避免姓和名被拆开 - 表格空单元格占位:避免
<td></td>因无内容导致边框塌陷 - 临时替代
<pre class="brush:php;toolbar:false;"></pre>或white-space: pre的轻量方案(但仅限简单场景)
比 更宽的空格怎么选
不同宽度空格对应不同排版需求, 只是基础款;宽度固定、不受字体影响的更可靠。
-
:半角空格,宽度 ≈ 0.5 个中文字符,适合微调对齐 -
:全角空格,宽度 ≈ 1 个中文字符,中文段首缩进可用(但推荐用text-indent) -
:窄空格,宽度 ≈ 1/6 em,适合数学公式或紧凑排版 - 全角空格(中文输入法下按空格键)也能用,但它本质是 U+3000,属于汉字区字符,语义上不推荐用于结构控制
动态生成时注意编码问题
PHP、JS 等后端或脚本中拼接 ,别用字符串拼接漏掉分号,也别用 String.fromCharCode(160) 后再 HTML 编码——容易双重转义。
- PHP 中安全写法:
echo "Price: $price USD"; - JS 中建议用实体字符串:
element.innerHTML = "Name: " + name;,而非"Name:\u00a0" + name(后者需确保页面编码为 UTF-8 且未被二次 encode) - 模板引擎(如 Twig、Blade)通常自带 escape 机制,直接写
即可,不用额外转义
真正难的不是怎么输 ,而是判断该不该用——多数布局问题,用 margin、padding 或 white-space 更可控; 只在「语义绑定 + 不可断行」这个窄缝里才不可替代。











