彻底搞懂word-break、word-wrap、white-space

本文系统整理了CSS里white-space、word-break、word-wrap(overflow-wrap)三个基本却易混淆的属性。介绍了它们的作用、取值及表现情况,如white-space控制空白字符显示和自动换行,word-break和word-wrap控制单词拆分换行等,最后进行总结并给出测试代码地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

white-space、word-break、word-wrap(overflow-wrap)估计是css里最基本又最让人迷惑的三个属性了,我也是用了n次都经常搞混,必须系统整理一下,今天我们就把这三个属性彻底搞清楚!

测试代码

(文末有本文中所有例子的代码)
下面是本文中用于测试三个样式属性展现情况的html代码:

<div id="box">
  Hi&nbsp;&nbsp;,
  This   is a incomprehensibilities long word.
  </br>
  你好&nbsp;&nbsp;,
  这   是一个不可思议的长单词
</div>复制代码

现在只给了它一个宽度和边框,没有其它任何样式,下面是它目前的展现情况:

可以看到, nbsp;</br>可以正常发挥作用,而连续的空格会被缩减成一个(比如This和is之间的三个空格变成了一个),换行符也全都无效。句子超过一行后会自动换行,而长度超过一行的单个单词会超出边界。
接下来我们看下, 给它上面三个css属性赋值后会出现什么变化。


white-space

正如它的名字,这个属性是用来控制空白字符的显示的,同时还能控制是否自动换行。它有五个值:normal | nowrap | pre | pre-wrap | pre-line。因为默认是normal,所以我们主要研究下其它四种值时的展现情况。

(为了方便比较,下文所有图,左侧为normal即初始情况,右侧为赋上相应值时的情况)

先看下white-space:nowrap时的情况:

不仅空格被合并,换行符无效,连原本的自动换行都没了!只有</br>才能导致换行!所以这个值的表现还是挺简单的,我们可以理解为永不换行

white-space:pre

空格和换行符全都被保留了下来!不过自动换行还是没了。保留,所以pre其实是preserve的缩写,这样就好记了。

white-space:pre-wrap

显然pre-wrap就是preserve+wrap,保留空格和换行符,且可以自动换行。

white-space:pre-line

空格被合并了,但是换行符可以发挥作用,line应该是new line的意思,自动换行还在,所以pre-line其实是preserve+new line+wrap

我整理了一个表予以总结:

是否能发挥作用换行符空格自动换行</br>、nbsp;
normal××(合并)
nowrap××(合并)×
pre×
pre-wrap
pre-line×(合并)


word-break

从这个名字可以知道,这个属性是控制单词如何被拆分换行的。它有三个值:normal | break-all | keep-all

word-break:keep-all

所有“单词”一律不拆分换行,注意,我这里的“单词”包括连续的中文字符(还有日文、韩文等),或者可以理解为只有空格可以触发自动换行

word-break:break-all

所有单词碰到边界一律拆分换行,不管你是incomprehensibilities这样一行都显示不下的单词,还是long这样很短的单词,只要碰到边界,都会被强制拆分换行。所以用word-break:break-all时要慎重呀。


这样的效果好像并不太好呀,能不能就把incomprehensibilities拆一下,其它的单词不拆呢?那就需要下面这个属性了:


word-wrap(overflow-wrap)

word-wrap又叫做overflow-wrap

word-wrap 属性原本属于微软的一个私有属性,在 CSS3 现在的文本规范草案中已经被重名为 overflow-wrap 。 word-wrap 现在被当作 overflow-wrap 的 “别名”。 稳定的谷歌 Chrome 和 Opera 浏览器版本支持这种新语法。

这个属性也是控制单词如何被拆分换行的,实际上是作为word-break的互补,它只有两个值:normal | break-word,那我们看下break-word

终于达到了上文我们希望的效果,只有当一个单词一整行都显示不下时,才会拆分换行该单词
所以我觉得overflow-wrap更好理解好记一些,overflow,只有长到溢出的单词才会被强制拆分换行!

(其实前面的word-break属性除了列出的那三个值外,也有个break-word值,效果跟这里的word-wrap:break-word一样,然而只有Chrome、Safari等部分浏览器支持)


总结

最后总结一下三个属性

  • white-space,控制空白字符的显示,同时还能控制是否自动换行。它有五个值:normal | nowrap | pre | pre-wrap | pre-line
  • word-break,控制单词如何被拆分换行。它有三个值:normal | break-all | keep-all
  • word-wrap(overflow-wrap)控制长度超过一行的单词是否被拆分换行,是word-break的补充,它有两个值:normal | break-word

相信读完了本文,你应该对white-space、word-break、word-wrap有比较系统的认识了吧,如果短时间还是记不住,收藏一下常看看就能记住的XD~如果你喜欢这篇文章的话,希望能点个赞~


以后会定期整理总结一些疑难知识点~欢迎关注~


下面是本文里所有例子的代码的地址,每个属性做成了选项,方便操作学习~

https://codepen.io/YGYOOO/pen/jvyrWK


“彻底搞懂”系列:

彻底搞懂HTTPS的加密机制


### CSS 属性 `word-break` 与 `white-space` 的区别及用法比较 #### 定义与功能 - **`word-break`** 是一种控制单词内部换行方式的属性,主要用于解决长单词或不可分割字符串在有限空间中的显示问题。它的作用在于决定是否可以在单词内部进行换行[^1]。 - **`white-space`** 则是用来管理元素内空白字符(如空格、制表符和换行符)的行为以及文本的整体换行逻辑。它决定了如何处理连续的空白字符以及是否允许自动换行[^2]。 --- #### 主要取值对比 | 属性名 | 取值 | 描述 | |--------------|---------------------|----------------------------------------------------------------------------------------| | **word-break** | `normal` | 使用默认的断字规则,即仅在自然断点处换行[^3]。 | | | `break-all` | 允许在任意字符间换行,适合英文等非CJK语言环境下的长字符串处理[^1]。 | | | `keep-all` | 仅在半角空格或连字符处换行,特别适用于中文和其他不需要空格分隔单词的语言场景[^3]。 | | **white-space** | `normal` | 连续空白被折叠成单个空格;文本会在必要时自动换行[^2]。 | | | `nowrap` | 所有空白都被折叠为单个空格,但文本不会换行,可能会溢出容器边界。 | | | `pre` | 白空按原样保留,类似于HTML `<pre>`标签的表现形式,不过仍然遵循普通流布局规则[^2]。 | | | `pre-wrap` | 类似于`pre`, 不过会根据需要插入软回车以适应容器宽度。 | | | `pre-line` | 将多个连续空白压缩成单一空格, 并且像`pre-wrap`一样支持换行[^2]。 | | | `inherit` | 子元素继承父级设定好的`white-space`值[^2]。 | --- #### 实际应用案例分析 ##### 场景一:防止长单词溢出容器 当遇到超长单词或者URL链接等情况时,可以通过调整 `word-break` 来避免内容溢出: ```css .long-word-container { word-break: break-all; /* 强制在任何位置换行 */ } ``` 而此时如果单纯依赖 `white-space` 设置,则可能无法达到理想效果,因为 `white-space` 更关注整体空白处理而非具体单词级别的断裂策略。 ##### 场景二:保留原始格式的同时允许合理换行 假设有一段代码片段或者其他预格式化数据希望既能够维持原有缩进又能在适当时候发生折行,则应联合运用两者配置如下所示: ```css .code-block { white-space: pre-wrap; /* 保护原有的空格排列同时也让太宽的部分正常转行 */ word-break: keep-all; /* 防止破坏特殊符号组合比如-->之类的结构 */ } ``` --- #### 综合总结表格 | 特性 | Word-Break | White-Space | |-----------------------|------------------------------------|-----------------------------------| | 控制对象 | 单词级别 | 整体文本区域内的空白表现 | | 默认行为 | 自然断句 | 折叠多余空白并启用常规换行机制 | | 是否影响实际字符呈现 | 改变特定条件下文字分行的位置 | 影响整个区块里所有类型的间隔单位 | | 应用场合举例 | 处理外文长串/地址栏输入框等内容防溢 | 显示诗歌、程序源码之类需精确排版的数据| ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值