“word-break: break-all”和“word-wrap: break-word”的区别是什么?
当我两个都用的时候,如果它不适合容器,它们似乎就会破坏单词。但是为什么W3C制定了两种方法来实现呢?
“word-break: break-all”和“word-wrap: break-word”的区别是什么?
当我两个都用的时候,如果它不适合容器,它们似乎就会破坏单词。但是为什么W3C制定了两种方法来实现呢?
当前回答
CSS中的分词属性用于指定当一个单词到达一行末尾时应该如何分词或分词。换行属性用于拆分/换行较长的单词并将它们换行到下一行。
“word-break: break-all;”和“word-wrap: break-word;”的区别:
word-break: break-all;:用于在任意字符处进行换行,防止字符溢出。
word-wrap: break-word;:用于在任意点打断单词,以防止溢出。
其他回答
overflow-wrap: break-word;
参考
overflow-wrap (MDN)
单看断字和换行的定义就很容易让你头晕目眩,但当比较这两个词时,更容易这样想:
首先,你可能会使用overflow: auto;同样,您可能想要尝试单独使用它是什么样子:如果您可以容忍需要在容器中滚动文本而不是任意换行位置,那么它可能正是您所需要的。
然后请记住,在这个上下文中,“word”是一个没有空格的字符串。
单词分割:打破所有;
优先减少空间浪费,同时避免溢出,在保持任何文字完整之前,所以它永远不会在任何地方,但在正确的边缘。它甚至在包含的文本中用空格替换换行符。如果你想尽量避免滚动,并使用一个足够宽的容器来提高可读性,这是很有用的:然而,如果你的容器太窄,结果通常不是很令人满意,正如Drkawashima指出的那样。
自动换行/ overflow-wrap: break-word;
优先级保持任何和所有单词不间断,同时避免溢出,因此如果一个单词太长,无法放入该行的其余部分,它会先换行,并尝试将其余文本放入下一行,即使这意味着上面的行短至只有一个字符。如果你想要最大限度的可读性,同时尽可能避免滚动,并使用一个足够宽的容器,这是很有用的:否则你可能只想使用overflow: auto来代替。
关于换行,它并没有真正被取代(也许在全球使用的浏览器中,它比溢出换行更被普遍认可):它成为溢出换行的别名,因为所有的大型浏览器和许多许多网页都已经采用了换行,尽管最初没有在标准中定义。
然而,由于广泛使用,在定义overflow-wrap时它并没有被丢弃,而是定义为今天的别名,并且由于遗留原因,ua(用户代理,例如web浏览器)必须将换行作为overflow-wrap属性的遗留名称别名。因此,它已经成为W3C事实上的标准,而且它不会很快消失(也许当W3C标准灭绝或整个网络被人工智能机器人普遍更新时)。
5.5. Overflow -wrap/word-wrap属性
overflow-wrap (MDN)
我只能查到这些。我不确定它是否有帮助,但我想我应该把它加入到混合中。
自动换行
此属性指定如果内容超出了元素的指定呈现框的边界,当前呈现的行是否应该中断(这在某些方面类似于' clip '和' overflow '属性的意图)。此属性仅适用于以下情况:元素具有可视渲染,是具有显式高度/宽度的内联元素,是绝对定位的元素和/或是块元素。
单词分割
此属性控制单词中的换行行为。在一个元素中使用多种语言的情况下,它特别有用。
讨论这些问题的W3规范似乎表明,word-break: break-all是为了要求CJK(中文、日语和韩语)文本具有特定的行为,而word-wrap: break-word是更一般的、不了解CJK的行为。
从各自的W3C规范(由于缺乏上下文,这些规范非常不清楚)可以推断出以下内容:
break-all: break-all用于将CJK(中文、日语或韩语)文字中的外来词、非CJK(即西方)词拆分。 break-word是在非混合语言(让我们说纯西方语言)中进行分词。
至少,这是W3C的意图。实际发生的是浏览器不兼容的结果。这里有一篇关于所涉及的各种问题的优秀文章。
下面的代码片段可以作为如何在跨浏览器环境中使用CSS实现换行的摘要:
-ms-word-break: break-all;
word-break: break-all;
/* Nonstandard for WebKit */
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;