推荐使用 插入真正空格,它不可折叠、不可换行,适合数字分隔;动态场景则用CSS的gap或margin更灵活可控。
浏览器默认会把连续的空白符(空格、换行、制表符)合并成一个空格,所以直接敲空格键或写多个 并不总是可靠。真正可控的空格是 (不换行空格),它不会被折叠,也不会在行尾被丢弃。
→ 强制显示一个不可折叠、不可换行的空格,适合数字间分隔 / → 分别对应半个/一个汉字宽度,语义更强但兼容性略低(IE9+)margin 或 padding 更灵活,但属于布局控制,不是“字符级空格”分页器如 1 2 3 ... 10,数字之间需要视觉间隔,但又不能靠纯 CSS(比如 margin-left)破坏可访问性或响应式行为。最稳妥的是在 HTML 中用 显式分隔:

1 2 3 ... 10
注意:不要用普通空格或 (即 ASCII 空格字符),否则压缩 HTML 或服务端模板渲染时容易被抹掉。
如果分页器是动态生成(比如 Vue/React 渲染列表),硬插 不现实,此时应改用 CSS:
margin-right: 8px,最后一项用 :last-child { margin-right: 0 }
gap(Flex/Grid)最干净:display: flex; gap: 8px,无需处理首尾letter-spacing —— 它作用于文字内部,对 标签无效white-space: pre —— 会强制保留所有换行和空格,破坏布局弹性不是代码写错了,而是这些地方卡住了:
,但页面没空隙 → 检查是否有 CSS 设置了 font-size: 0 或 line-height: 0,它们会让 “隐形”innerHTML += '... ...',改用 textContent + 元素追加,或统一用 gap
不增加点击热区,必须配合 padding 或 min-width
真正难的不是“怎么加空格”,而是判断该用字符级分隔( )还是布局级分隔(gap / margin)——前者语义明确、静态可靠;后者动态友好、响应式可控。选错会导致维护成本陡增。