word-break: normal; 之间有什么区别?和断字:keep:all;?

whats the difference between word-break: normal; and word-break: keep:all;?

这些看起来是一样的,有什么区别? https://jsfiddle.net/pmuub8w1/2/

    p{
          word-break:normal;
   }

   p{
         word-break: keep-all;
    }
  1. normal: 遵循正常的换行规则,即在单词之间的space处换行。因此,即使最后一个单词超出了容器的范围,句子也不会转到下一行,直到下一个单词出现。这将对所有文本完成,甚至 CJK characters(中文、日文、韩文和衍生词)
  2. break-all: 如果超出范围,则在字符处中断,这意味着单词本身将被中断并带到第二行。因此,假设 ALongWordAL 处越界,那么 break-all 将使其余的 ongWord 转到第二行。 CJK 个字符不会执行此操作。
  3. keep-all: 除中日韩字符外,按正常行规则中断。它就像 normal 除了 CJK 的情况下它根本不会中断(既不是 normal 所做的行规则也不是 break-all 所做的字符)

以下是 Mozzila documentation 处示例的屏幕截图。

注意非 CJK 和 CJK 句子处理方式的区别。

另一个答案的重要部分是正确的:normalkeep-all 对于非 CJK 文本是相同的。但是,对 CJK 文本行为方式的描述是错误的。

normal 中,CJK 可以在任何地方 换行 。这是因为 CJK 通常在没有空格的情况下使用,并且任何地方的中断都是可以接受的(如果不是完美的话)。在屏幕截图中,本当 是一个单词,但在最后一行的开头被分成两半。

break-all中,非CJK文本可以在任何地方断开,与normal中的CJK文本相同。

keep-all 中,CJK 文本与其他脚本中的文本在 normal 中的工作方式相同 - 也就是说,如果没有任何空格的长行可能会溢出容器。如果您希望 CJK 文本换行,您必须手动插入空格。当与零宽度空格结合使用以在自然单词边界处创建换行符时,这可能很有用。截图中,因为日文没有空格,所以和英文的长字一样处理,溢出容器。