letter-spacing是唯一能直接精准控制字符间距的CSS属性,但必须用normal重置而非0,推荐0.03em单位避渲染陷阱,禁用word-spacing调中文,真等宽需inline-block或等宽字体。

直接用 letter-spacing 控制字符间距最有效,但必须避开继承污染、字体度量干扰和移动端渲染陷阱——它不是“加空格”,而是拉伸/压缩字符间的逻辑间隙。
letter-spacing 设 0 不等于没间距,normal 才是真实默认值
很多开发者设 letter-spacing: 0 后发现中文还是有缝,是因为浏览器对不同字体的 normal 渲染结果不一致(比如 Noto Sans CJK 和 PingFang SC 的默认字距差可达 0.1em)。normal 是相对值,依赖字体内置的 spacing metric,不能当“归零键”用。
- 要彻底重置,写
letter-spacing: normal,不是0 - 想微调中文标题,推荐用
letter-spacing: 0.03em(相对单位更稳定) - 避免在
body或全局容器上设置,否则<input>、<button>、图标字体(如<i class="icon-home">)全被带偏
word-spacing 对中文基本无效,别拿它调“字间距”
word-spacing 只作用于由空格或 Unicode 分词符(如 U+200B 零宽空格)分隔的“词”。中文段落里没有空格分词,浏览器无法识别“每个汉字”为独立单词,所以 word-spacing: 5px 加在 <p>你好世界</p> 上几乎没反应。
- 唯一可能生效的场景:中文里夹了英文或数字,且中间有空格,例如
联系 info@demo.com——这时只有邮箱部分被撑开 - 和
letter-spacing混用会叠加效果,容易失控,调试时建议禁用其中一个再观察 - 在 Flex/Grid 容器中,
word-spacing可能被对齐方式覆盖,优先级低于letter-spacing
inline-block + 固定宽度才是真·等宽文字布局
如果目标是让每个汉字严格占据相同像素宽度(比如做密码输入框、进度指示器、对齐表格头),letter-spacing 不够用——它只调间隙,不控单字占地。得把每个字变成独立盒子。
立即学习“前端免费学习笔记(深入)”;
- 把文字拆成单字符,包裹进
<span>,设display: inline-block; width: 24px; text-align: center; - 或者直接用等宽字体:
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;,所有 ASCII 和常见汉字宽度一致 - 注意:用
inline-block会触发 HTML 空白节点问题(换行=4px 间隙),需配合font-size: 0父容器 + 子元素重置字号,或改用display: flex
移动端 Safari 对负 letter-spacing 渲染极不稳定
在 iOS 17+ Safari 上,小字号(≤14px)加 letter-spacing: -0.5px 容易触发亚像素渲染失败:文字边缘发虚、间距忽大忽小、甚至整行错位。Chrome Android 可能直接忽略负值。
- 真要收紧字距,优先用
font-stretch: condensed(支持现代字体)或换更紧凑的字体变体 - 按钮类交互元素,用
padding控制整体紧凑感,比硬调字距更可靠 - 必须测试真机,模拟器看不出 subpixel 问题;上线前用 WebKit 浏览器跑一遍小字号场景
最常被忽略的一点:letter-spacing 会影响所有后代内联内容,包括 SVG 图标字体、<strong> 里的文字、甚至 MathML 符号。真要精细控制,必须用包裹元素隔离作用域,而不是靠选择器“猜”哪些文本会被波及。



















