空白与换行:white-space、overflow-wrap、word-break

最后更新 2026-11-02

EN中文
本页目录

文本换行是三个属性合起来决定的:white-space 管「空白和换行符怎么处理」,overflow-wrap 与 word-break 管「一行排不下时从哪里断」。它们经常被混为一谈,因为它们的效果在简单例子里看起来一样。

white-space 的六个值

值 连续空格 换行符 自动换行
normal 合并成一个 当空格 允许
nowrap 合并 当空格 禁止
pre 保留 保留 禁止
pre-wrap 保留 保留 允许
pre-line 合并 保留 允许
break-spaces 保留(含末尾空格) 保留 允许,且空格之后也能换

记忆方式:pre 系列保留空白(像 <pre> 标签),带 wrap 的允许换行,pre-line 只保留换行不留空格。

pre-wrap 与 break-spaces 的差别只在行尾空格:前者把行尾空格「悬挂」到行外,后者把它们当成可断字符。做聊天记录、代码对比时这个差别看得见。

overflow-wrap:长单词怎么办

默认情况下,一个太长的单词(URL、哈希)会溢出容器,而不是断行——因为西文只在空格与连字符处断。

值 行为
normal 只在正常断点断,长单词溢出
break-word 实在放不下时才在任意位置断(不影响最小内容宽度计算)
anywhere 任意位置可断,并且参与 min-content 计算(容器可以被撑到最窄)

word-wrap 是 overflow-wrap 的旧名,两者等价;新代码写 overflow-wrap。

word-break:更激进的断法

值 行为
normal 按语言规则断(中日韩可以在字间断,西文按词)
break-all 任意两个字符之间都能断,包括西文单词内部
keep-all 中日韩文本不在字间断(西文行为不变)

break-all 的典型用途是「一列固定宽度的数字/编码」,代价是英文单词会被拦腰砍断。break-word 作为 word-break 的值已经废弃,别再用。

中文本身不需要 break-all:CJK 字符默认就可以在任意字之间换行,这是语言规则的一部分。

hyphens:连字符断词

  • none:不断;
  • manual:只在源码里写了软连字符 &shy; 的地方断;
  • auto:由浏览器按词典断,需要元素上有正确的 lang 属性。

hyphens: auto 对中文没有意义(中文不用连字符),对英文排版有用,但要确认目标浏览器与语言包。

text-wrap:让短行更好看

值 用途
wrap 默认
nowrap 与 white-space: nowrap 类似,但只管换行不管空白
balance 让一段短文本的每行长度尽量接近,适合标题
pretty 尽量避免最后一行只剩一个词(孤字)

balance 只适合几行的短文本(标题、卡片标题);用在长段落上浏览器会直接忽略,因为它有行数上限。

三个能直接抄的组合

单行省略:

.ellipsis {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

长的 URL 或哈希不撑破容器:

.break-anywhere {
  overflow-wrap: anywhere;
}

保留用户输入的换行与空格(评论、备注):

.user-text {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

延伸阅读

  • MDN:white-space / overflow-wrap / word-break / hyphens / text-wrap
  • CSS Text 规范:white space processing 与 line breaking