text-align: justify对中文无效,因浏览器仅在空格、标点等unicode单词分隔符处插入弹性间距,汉字间无天然断点;需配合text-justify: inter-character(chrome 120+/firefox 110+/safari 17.4+)及lang="zh"才能实现字符级两端对齐。

text-align: justify 为什么对中文空格没反应
浏览器默认只在 Unicode「单词分隔符」位置(比如空格、连字符、标点)插入弹性间距,而中文字符之间没有天然断点。所以即使你写了 text-align: justify,它也不会在汉字之间拉伸空格——不是你漏了什么,是浏览器根本没打算这么做。
常见错误现象:<p style="text-align: justify;">这是一段中文</p> 渲染后和 text-align: left 几乎一样;中英文混排时,英文部分被拉开了,中文还挤在左边。
- 单行文本永远不触发 justify 的拉伸逻辑,哪怕加了空格也无效
- 连续中文(如“数据结构算法题解”)中间没空格,浏览器无处下手
- 末尾带换行符或多余空格,可能被识别为“最后一行为空”,直接跳过对齐计算
- 用了
white-space: nowrap或容器高度固定,会阻止换行,justify 彻底失效
text-justify: inter-character 是目前最干净的解法
Chrome 120+、Firefox 110+、Safari 17.4+ 支持 text-justify: inter-character,它强制按字断行并均匀分配字间距,不再依赖空格或标点作为锚点。
但它不是独立生效的:必须和 text-align: justify 配合使用,且父容器需声明 lang="zh",否则 Safari 可能静默忽略。
- 写法必须是:
text-align: justify; text-justify: inter-character;,缺一不可 <p lang="zh" style="text-align: justify; text-justify: inter-character;">这是一段中文</p>- 短段落(少于 4 行)可能因换行点不足,末行仍左对齐,建议配合
text-align-last: justify - 等宽字体(如
monospace)下该属性可能被忽略,测试时优先用系统默认字体
text-align-last: justify 必须配对使用才有效
text-align-last: justify 不是“让最后一行对齐”的开关,而是 text-align: justify 的补丁——它只在 justify 已启用的前提下,告诉浏览器:“最后一行也按同样规则拉伸”。单独写它,等于没写。
它只作用于块级元素(<p></p>、<div>、<code><td>),且要求文本至少自然换行一次。单行文本要让它生效,得“骗”浏览器:<ul>
<li>给容器设明确宽度(如 <code>width: 300px)+ min-height: calc(1.5em * 2),强制预留两行空间
::after 伪元素补一行:content: ""; display: inline-block; width: 100%;,这样原文本就变成倒数第二行 或全角空格,复制粘贴时可能带出异常字符\u200B
表格单元格里怎么安全地两端对齐
表格单元格(<td>、<code><th>)默认是块级上下文,但常因 <code>white-space: nowrap 或内容过短导致 justify 失效。推荐批量设置 CSS,而不是每个单元格写内联样式。
最稳妥写法:
table td, table th {
text-align: justify;
text-align-last: justify;
word-break: keep-all;
}
-
word-break: keep-all防止中英文混排时英文被断开,影响对齐位置 - 不要依赖单元格内手动加空格——HTML 会合并连续空格,且响应式下极易错位
- 如果单元格高度固定(如
height: 2em),justify 会被禁用,改用min-height更可靠 - 移动端 Safari 对
text-align-last支持从 iOS 14.5+ 开始,低版本会回退为左对齐,这点容易被忽略
真正难的不是写哪条 CSS,而是判断当前环境是否满足所有前提:有明确宽度、多行换行机会、语言标记、现代浏览器版本。漏掉任何一个,都会看起来“没生效”。











