DigitalOcean 提供适合您旅程各个阶段的云产品。 立即开始使用 200 美元的免费积分!
CSS 中的 overflow-wrap
属性允许您指定浏览器可以在目标元素内部的文本行中,在一个原本无法断开的地方断开一行文本,并将其分成多行。 这有助于避免过长的文本字符串由于溢出而导致布局问题。
.example {
overflow-wrap: break-word;
}
语法
overflow-wrap =
normal |
break-word |
anywhere
- 初始值:
normal
- 应用于: 非替换内联元素
- 继承: 是
- 计算值: 如指定
- 动画类型: 离散
值
normal
: 默认值。 浏览器将根据正常的换行规则断行。 单词或不间断字符串不会断开,即使它们溢出容器。break-word
: 太大而无法容纳在容器内的单词或字符串将在任意位置断开,以强制换行。 即使使用hyphens
属性,也不会插入连字符。inherit
: 目标元素必须继承其直接父元素上定义的overflow-wrap
属性的值。
下面的演示有一个切换按钮,允许您在 normal
和 break-word
之间切换。
为了演示 overflow-wrap
试图解决的问题,演示使用了一个 异常长的单词,它位于一个相对较小的容器中。 当您将 break-word
切换为打开时,该单词会被打断以适应可用的小空间,就好像该单词是多个单词一样。
一串非换行空格字符 (
) 将以相同的方式处理,并且也会在适当的位置断开。
overflow-wrap
在应用于包含未审核的用户生成内容(如评论部分)的元素时非常有用。 这可以防止长 URL 和其他不间断文本字符串(例如,破坏行为)破坏网页的布局。
word-break
属性的相似之处
与 overflow-wrap
和 word-break
的行为非常相似,可以用来解决类似的问题。 CSS 规范中解释了它们之间差异的基本总结
overflow-wrap
通常用于避免由于长字符串导致的布局问题,这些字符串会导致文本流出容器之外。word-break
指定了在通常与汉语、日语和韩语 (CJK) 等语言相关的字母之间进行软换行的机会。
在描述了如何将 word-break
用于 CJK 内容的示例之后,规范中说:“仅在溢出情况下启用其他断开机会,请参阅 overflow-wrap
“。
由此,我们可以推断,word-break
最适合与非英语内容一起使用,这些内容需要特定的断词规则,并且可能与英语内容交织在一起,而 overflow-wrap
应该用于避免由于长字符串导致的布局问题,无论使用哪种语言。
word-wrap
属性
历史上的 overflow-wrap
是其前身 word-wrap
属性的标准名称。 word-wrap
最初是 Internet Explorer 专有的功能,后来在所有浏览器中都得到了支持,尽管它不是标准。
word-wrap
接受与 overflow-wrap
相同的值,并且行为相同。 规范中说,浏览器“必须将 word-wrap
视为 overflow-wrap
属性的替代名称,就好像它是 overflow-wrap
的简写一样”。 此外,所有用户代理都必须出于遗留原因无限期地支持 word-wrap
。
只要验证器设置为针对 CSS3 或更高版本进行测试(目前为默认设置),overflow-wrap
和 word-wrap
都将通过 CSS 验证。
浏览器支持
这些浏览器支持数据来自 Caniuse,它提供了更多详细信息。 数字表示浏览器从该版本开始支持该功能。
桌面
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
23 | 49 | 11 | 18 | 6.1 |
移动/平板
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 4.4 | 7.0-7.1 |
更多信息
- CSS 文本模块级别 3 规范 (W3C)
- 处理长单词和 URL (CSS-Tricks)
- Word-Wrap:适用于所有浏览器的 CSS3 属性 (Louis Lazaris)
word-break
与overflow-wrap
(Stack Overflow)- 如何使用 CSS 阻止换行 (DigitalOcean)
这个示例展示了更多
hyphens
而不是overflow-wrap
,因为可以删除wrap
属性,结果将保持不变。我在 Safari 和 Firefox 上测试过,它们都支持hyphens
,这与文章中所述内容相反。连字符是一个完全不同的问题。当没有连字符时,这里讨论的属性会以某种方式运行。
连字符可能在这里进行了讨论,但这会涵盖太多内容。这是“年鉴”的一部分,它一次讨论一个功能。您可以在其自己的文章中查找连字符(在“相关”部分有链接)。
非常有用的文章。帮了我的忙。
文字说不会插入连字符;但是,当切换换行时,可以看到一个表面的连字符;是否可以添加一些解释性文字来解释这一点?
我不确定你的意思…?以什么方式可以看到连字符?
确实,你和 Yongwei Wu 说的是真的。这个示例展示了
hyphes: auto
的作用!你可以通过连字符本身来判断。Louis 忽略了一个事实。这是因为,Pneumonoultramicroscopicsilicovolcanoconiosis 这个词可以通过连字符算法进行连字符处理。但其他词不应该——例如,长串数字、一些特殊或重复字符或它们的混合,对于它们来说,连字符将不起作用(除非你是 Safari,那么可以期待意外的行为……)。
overflow-wrap: break-word
也将在本示例中拆分单词,因为它将拆分所有内容,但并不一定会以相同或正确的方式拆分。并且不会有连字符。当它们一起使用时,你可以期待更奇怪的混合(虽然有时是正确的)行为。
澄清一下之前的讨论内容
最初的演示使用了
hyphens: auto
,我忘记了。Chrome 仍然不支持hyphens: auto
。因此 Firefox 添加了连字符,Chrome 没有添加。我认为这就是最初的评论者说可以看到连字符的原因。我在 Chrome 中测试了这一点,没有意识到 Firefox 添加了该功能。所以,是的,你可以在某些浏览器中看到连字符出现。https://drive.google.com/open?id=1xy6gQGagGon77vfjL79GYCkzkM_v4Rba
所以不确定是我的机器有问题还是其他原因……即使尝试了 >>all: unset;<< 它也拒绝换行……我发现了很多默认情况下会换行的例子……不知道该怎么办……有什么建议吗?
嗨,Jacob!你可能需要使用浏览器的 DevTools 进一步研究。你的示例的快速复制似乎可以立即正常工作,所以可能是 CSS 中的其他部分出了问题。
在 Chrome 版本 79.0.3945.88(官方构建)(64 位)中仍然无法使用
我测试过了,它可以正常工作。如果你能在这里提供一个无法正常工作的演示链接,我会看看。
谢谢!真是救了我的命!
不幸的是,我遇到了一个网格用例,其中一些单元格只有一个溢出的单词。“overflow-wrap: break-word;” 没有按预期工作,也没有在这个单个“单词”内断开(至少在最新的 Chrome 上)。
快速搜索发现“overflow-wrap: anywhere;” 然后给了我期望的结果,即拆分了这个单个超大的单词。我本来以为“overflow-wrap: break-word;” 已经可以做到这一点……那么我忽略了什么,“anywhere” 与之不同呢?