text-justify对中文无效,因浏览器支持差、需lang属性触发且仅作用于换行后的行;中文字体两端对齐需text-align: justify + text-justify: inter-character + 微调letter-spacing,并注意混排与标点悬挂问题。

text-justify对中文/全角字符无效?先确认浏览器支持和触发条件
text-justify 在 CSS 中长期处于“半废弃”状态:Chrome 从 109 版本起默认禁用,Firefox 仅在 text-align: justify + lang 属性匹配特定语言(如 lang="ja")时才启用,Safari 基本不响应。更关键的是,它只作用于断行后的行内块级内容,对单行、white-space: nowrap 或无换行机会的段落完全没反应。
- 必须同时设置
text-align: justify和text-justify: inter-character(或inter-word) - 元素需有明确宽度(如
width或容器限制),否则无“两端”可对齐 - 中文/日文/韩文等 CJK 文本需声明
lang="zh"等属性,否则多数浏览器按拉丁逻辑处理空格与字距 -
text-justify不控制字母间距(letter-spacing),它调整的是字符间“弹性间隙”的分配策略
全角字符两端对齐发散、挤成一团?用 text-combine-upright + letter-spacing 组合兜底
纯靠 text-justify 搞不定中文字体的均匀拉伸——汉字本身是等宽方块,浏览器不会像处理英文那样拆分词间空隙。实际排版中,真正起效的是:
-
letter-spacing对全角字符也生效,但值为正值时会在每个字右侧加空隙,容易导致末尾溢出;负值又易让字粘连 -
text-combine-upright: all可强制多字符垂直堆叠(适合数字/英文缩写),但不解决水平对齐 - 更稳妥的做法是:用
text-align: justify+text-justify: inter-character作为首选,再用letter-spacing: -0.05em微调字距(仅在 justify 生效的行上生效)
p.justify-cjk {
text-align: justify;
text-justify: inter-character;
letter-spacing: -0.05em; /* 仅在 justify 行内起作用,避免单行被拉宽 */
lang: "zh";
}
letter-spacing 在中英文混排时崩坏?用 font-feature-settings 控制字距上下文
混排场景下,letter-spacing: 0.1em 会让“Hello世界”变成“H e l l o世 界”,因为浏览器对 ASCII 和 Unicode 字符一视同仁地插空。这不是 bug,是规范行为。
- 中英文混排建议放弃全局
letter-spacing,改用字体自带的 OpenType 特性 -
font-feature-settings: "kern", "liga"启用字体内的字距调整(kerning)和连字(ligature),对中英交界处更自然 - 部分中文字体(如 Noto Sans CJK、HarmonyOS Sans)支持
"palt"(proportional alternate),可让全角字符参与比例间距计算 - 若必须手动干预,可用
span包裹英文段落单独设letter-spacing,中文段落保持默认
justify 后首行缩进失效、标点悬挂错乱?用 text-indent + hanging-punctuation 修复
text-align: justify 会覆盖 text-indent 的原始行为,尤其在首行缩进 + 全角标点(如,。!?)出现在行首时,标点常被“顶到左边”,破坏视觉节奏。
立即学习“前端免费学习笔记(深入)”;
-
text-indent: 2em仍有效,但需确保父容器未设padding-left干扰计算 -
hanging-punctuation: first可让首行标点悬挂在左边界外,但兼容性差(仅 Safari 和 Chrome 117+ 支持) - 更通用的解法:用
::first-line伪元素单独控制首行,配合padding-left模拟缩进,避开 justify 对text-indent的干扰
全角字符的两端对齐从来不是单个 CSS 属性能搞定的事——text-justify 是个幻觉,letter-spacing 是把双刃剑,而浏览器对 CJK 的“自然间距”理解,至今还卡在字体厂商和排版引擎的博弈里。


















