Answers:
讨论这些的W3规范似乎暗示word-break: break-all
要求CJK(中文,日文和韩文)文本具有特定的行为,而这word-wrap: break-word
是更普遍的,不支持CJK的行为。
word-break
指定字母之间的换行机会……” W3C规范以CLK文本为例,但这并不是其唯一的用途。word-break
当您希望长字符串在容器宽度处中断时,通常与长字符串(例如URL或代码行)结合使用-尤其是当容器是pre
元素或表单元格,而该word-wrap
属性可能无法按预期工作时。
word-wrap: break-word
最近更改为 overflow-wrap: break-word
word-break: break-all
因此,如果您有许多固定大小的跨度可以动态获取内容,那么您可能更喜欢使用word-wrap: break-word
,因为那样的话,中间只有连续的单词被打断,并且如果句子中包含很多单词,则可以调整空格以获得完整的单词(一言以蔽之)。
如果没关系,那就选择其中之一。
使用word-break
,很长的单词从它应该开始的点开始,并且只要需要就被打断
[X] I am a text that 0123
4567890123456789012345678
90123456789 want to live
inside this narrow paragr
aph.
但是,使用时word-wrap
,很长的单词将不会从它应该开始的位置开始。它包装到下一行,然后根据需要断开
[X] I am a text that
012345678901234567890123
4567890123456789 want to
live inside this narrow
paragraph.
break-word
。我很讨厌地发现word-break
URL中断了,但没有word-wrap
。无论使用break-word
从得到它css-tricks.com/snippets/css/...
word-wrap
已被重命名以overflow-wrap
避免这种混乱。
现在,这就是我们所拥有的:
所述溢流缠绕属性用来指定浏览器是否可能破裂字线内,以防止溢出当否则牢不可破字符串太长,以适应其容纳箱。
可能的值:
normal:指示行只能在正常的断点处断开。
break-word:指示如果行中没有其他可接受的断点,则通常在任何点都不会破坏坚不可摧的单词。
来源。
该字断 CSS属性用于指定是否断词内行。
来源。
现在回到您的问题,溢出包装和断字之间的主要区别在于,前者确定溢出情况下的行为,而后者确定正常情况下的行为(无溢出)。一个溢出的情况发生时,容器没有足够的空间来容纳文本。在这种情况下断行并没有帮助,因为没有空间(想象一个具有固定宽度和高度的盒子)。
所以:
overflow-wrap: break-word
:在溢出情况下,请断言。word-break: break-all
:在正常情况下,只需将行末的单词打断即可。不需要溢出。overflow-wrap
/ word-wrap
没有使它们包起来。大概是因为没有固定宽度的表单元会扩展而不是溢出。相反,桌子越来越宽,与其他元素发生碰撞。word-break
另一方面固定它。
table-layout: fixed;
(可能与width
/ 一起使用max-width
)可以使其工作,overflow-wrap/word-wrap
但要取决于特定的用例;就像word-break
可能不是您想要的。
至少在Firefox(从v24开始)和Chrome(从v30开始)中,当应用于table
元素中的内容时:
word-wrap:break-word
实际上不会导致长字换行,这可能导致表超出其容器的范围;
word-break:break-all
将导致自动换行,并使表格适合其容器。
table-layout:fixed
来使表格不展开word-wrap:break-work
table-layout:fixed
word-wrap
与pre
Firefox中的标记结合使用时,除非定义了固定宽度,否则也会发生此行为。使用word-break
产生期望的结果。我在上面发表的评论中链接了此答案,因为它演示了一个常见的用例。
有很大的不同。break-all
基本上无法用于呈现可读文本。
假设您将字符串This is a text from an old magazine
放在一个容器中,该容器每行只能容纳6个字符。
word-break: break-all
This i
s a te
xt fro
m an o
ld mag
azine
如您所见,结果非常糟糕。break-all
会尝试将尽可能多的字符放入每行中,甚至会将“ is”之类的2个字母单词分成两行!太荒谬了 这就是为什么 break-all
很少使用的原因。
word-wrap: break-word
This
is a
text
from
an old
magazi
ne
break-word
只会破坏太长而无法容纳容器的单词(例如“ magazine”,即8个字符,而容器仅容纳6个字符)。它永远不会破坏可能适合整个容器的单词,而是会将它们推到新的一行。
<div style="width: 100px; border: solid 1px black; font-family: monospace;">
<h1 style="word-break: break-all;">This is a text from an old magazine</h1>
<hr>
<h1 style="word-wrap: break-word;">This is a text from an old magazine</h1>
</div
word-break:break-all
:
继续边框然后换行的单词。
word-wrap:break-word
:
首先,换行符会自动换行,然后继续边界。
范例:
div {
border: 1px solid red;
width: 200px;
}
span {
background-color: yellow;
}
.break-all {
word-break:break-all;
}
.break-word {
word-wrap:break-word;
}
<b>word-break:break-all</b>
<div class="break-all">
This text is styled with
<span>soooooooooooooooooooooooooome</span> of the text
formatting properties.
</div>
<b> word-wrap:break-word</b>
<div class="break-word">
This text is styled with
<span>soooooooooooooooooooooooooome</span> of the text
formatting properties.
</div>
从各自的W3规范(由于缺乏上下文而变得非常不清楚),可以得出以下结论:
word-break: break-all
用于分解CJK(中文,日文或韩文)字符文字中的外国非CJK(例如西方)单词。word-wrap: break-word
用于非混合语言(让我们仅说西语)中的断词。至少,这些是W3的意图。实际发生的结果是浏览器不兼容的一个重大问题。这是有关各种问题的出色文章。
以下代码段可作为如何在跨浏览器环境中使用CSS实现自动换行的摘要:
-ms-word-break: break-all;
word-break: break-all;
/* Non standard for webkit */
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
除了前面的注释,浏览器对的支持word-wrap
似乎要好于word-break
。