CSS 的 word-break
和 word-wrap
(也称为 overflow-wrap
)是控制文本换行行为的属性。它们的作用略有不同,可以用于处理文本在容器内溢出时的情况。
word-break
word-break
属性主要用于指定如何在单词内部进行换行。
normal
:使用默认的换行规则。break-all
:允许在单词内部任意位置进行换行。适用于多字节字符(如中文、日文、韩文等),也会对非多字节字符(如英文)起作用,甚至在单词中间也可能换行。keep-all
:CJK(中文、日文、韩文)脚本中,不允许词内换行,但非CJK脚本表现得像normal
。
举例:
css.word-break-example { word-break: break-all; }
在这个例子中,如果有一个很长的英文单词或者字符串没有空格,并且它超过了容器的宽度,它会在容器边界内的任何位置换行,不考虑单词边界。
word-wrap / overflow-wrap
word-wrap
(在 CSS3 中被重命名为 overflow-wrap
)属性指定了当单词太长而无法放在其容器内时,是否应该被中断到下一行。
normal
:单词不会被分割,只会在允许的断字点换行。break-word
:在长单词或 URL 地址内部进行换行,以避免文本溢出其包含元素。
举例:
css.word-wrap-example { word-wrap: break-word; }
或者使用 overflow-wrap
:
css.overflow-wrap-example { overflow-wrap: break-word; }
在这两个例子中,如果文本包含一个长单词,这个单词会在容器边缘处被断开,并继续在下一行显示,从而避免溢出容器。
总结
两者的区别在于对于单词内部断行的处理:
- 使用
word-break: break-all;
时,长单词和连续的非空白字符序列将在任何字符之间断开,以确保不会溢出容器。 - 使用
word-wrap: break-word;
(或overflow-wrap: break-word;
)时,文本只有在必要时才会在单词内部断行,更倾向于在保持单词完整性的同时防止溢出。
在实际使用时,word-wrap: break-word;
通常被认为更优雅,因为它会尽可能保持单词的完整性。而 word-break: break-all;
可能会在不理想的位置断开单词,从而影响阅读体验。不过,对于某些语言(如中文),这两个属性的效果可能相似,因为中文不依赖空格分隔单词。