hyphens: auto 仅在元素带有合法BCP 47 lang值且浏览器内置对应语言断字规则时生效;lang非法(如zh_cn、Chinese)或系统未启用词典(如Safari未开德语拼写检查)均静默失效。

hyphens: auto 必须配合合法 lang 值才生效
浏览器不会凭空决定在哪加连字符,hyphens: auto 是个“条件触发器”,不是开关。它只在两个前提同时满足时才工作:一是元素(或其祖先)带有符合 BCP 47 标准的 lang 属性,二是该语言在当前浏览器中已内置断字规则。比如 lang="en" 在 Firefox 和 Chrome 80+ 中能触发英文连字符,但 lang="zh" 或 lang="en-US" 写错格式(如写成 en_us 或 EN-US)就完全无效。
lang 值不合法 → hyphens 被静默忽略
这问题最麻烦的地方在于——它不报错、不警告、也不 fallback。你写了 hyphens: auto,但文本就是不连字符,调试时容易误判为 CSS 优先级或渲染延迟。真实原因是:lang="zh_cn"(下划线)、lang="Chinese"、lang="zh"(无地区码且系统未预置简体规则)全被浏览器跳过。实测中,Chrome 对 zh-Hans 支持有限,zh-CN 更稳妥;Safari 则依赖用户系统是否启用了对应语言的拼写检查,即使写了 lang="de",若 macOS 未开启德语词典,hyphens 也等于没写。
局部外文内容必须显式设 lang,不能靠继承
根节点 <html lang="zh-CN"> 只管默认语言,不影响嵌入的英文段落。一段技术文档里夹着 <p>Use <code lang="en">fetch() instead of XMLHttpRequest
<code> 加 lang="en",那里面的英文就不会触发 hyphens: auto,哪怕父级 p 已设了。同理,<blockquote lang="fr"> 才能让法语引文正确连字符,只靠 html 的 lang 不行。
连字符不是万能的,中文和日文场景要换思路
hyphens: auto 对中文基本无效(简体中文无标准连字符规则),对日文也受限于浏览器支持程度。此时真正起作用的是 word-break: keep-all + overflow-wrap: break-word 组合:前者防止中文被切在字中间,后者在超宽 URL 或英文单词处兜底断行。而 hyphens 在东亚排版中更多是锦上添花,不是基础保障。别指望它解决“北京-上海高铁”被断成两行的问题——那种情况得用非断行连字符 ‑ 或 ‑ 手动控制。
立即学习“前端免费学习笔记(深入)”;



















