本文主要要介绍的是 CSS 中 word-break: break-all
和 word-wrap: break-word
的区别,虽然这两个属性都有使用过,但都是属于使用时查一查文档随手就用,用完了也不会深刻去探究的范畴,但愿借着这篇文章来深刻的探究一下这二者的区别。css
有一句话是“没图说个 xx”,我以为这句话在探究 CSS 时特别正确。先让咱们来看一张图:segmentfault
上面的图是同一段 HTML 代码由不一样的 CSS 控制产生的效果,你们能猜到具体是哪些 CSS 值吗?答案在 jsfiddle.net/elvinn/88p8… 中,能够去看看猜的对不对 ^_^ 若是猜对了的话,那么能够残忍地关闭这篇文章了;不过假如没有猜对的话,那么不妨和我一块儿来探究一番吧。浏览器
word-break
在 MDN 上的官方解释是 specifies whether or not the browser should insert line breaks wherever the text would otherwise overflow its content box,翻译一下就是它决定了当文本要溢出容器时,浏览器是否应该插入换行符避免溢出,它有下列值:wordpress
word-break: normal;
word-break: break-all;
word-break: keep-all;
/* 全局属性 */
word-break: inherit;
word-break: initial;
word-break: unset;复制代码
咱们只须要关注前三个值:normal
、break-all
、和 keep-all
,具体介绍以下:spa
word-wrap
在 MDN 上的官方解释是 specifies whether or not the browser should insert line breaks within words to prevent text from overflowing its content box,把这个和 word-break
的解释对比,能够发现基本如出一辙,只是多了 within words
两个单词进行了限制,也就是说它只能控制是否在单词内加入断行,它有下列值:.net
word-wrap: normal;
word-wrap: break-word;
/* 全局属性 */
word-wrap: inherit;
word-wrap: initial;
word-wrap: unset;复制代码
咱们只须要关注前两个值:normal
、break-word
,具体介绍以下:翻译
也许 W3C 也以为
word-break
和word-wrap
这两个属性名字实在是太类似了吧,因此在 CSS3 规范里把word-wrap
用overflow-wrap
重命名了,不过目前浏览器支持不是很好,因此仍是乖乖地使用word-wrap
吧。code
终于来到本文的重点了!一开始看到 word-break: break-all
和 word-wrap: word-break
就头大,这也太相像了,一共就四个单词,结果还有三个单词都是同样的,效果看上去也好像没什么区别,也难怪 W3C 要给 word-wrap
换个名字了。那说回正题,区别在哪里呢??orm
俗话说的好,一图胜千言。在上图中,咱们能够清楚地看到,word-break: break-all
值如其名,断开一切,利用上每一块能够利用的空间来塞下文本,避免铺张浪费;而 word-wrap: word-break
则收敛许多,假如一行文字有能够换行的点,如标点、CJK 文本等,那么就不会在英文单词或者字符中插入断行了,不过从显示效果来讲的话则容易一起密集、一起空白,很不美观。cdn
前面说了这么多 word-break
和 word-wrap
的值的做用,显得它们很厉害的样子。不过实际上它们受 white-space
大佬管辖,它的默认值为 normal
时能够容许 word-break
和 word-wrap
发挥做用,不过当它的值设为 nowrap
时,就会不容许换行,致使全部的文本都挤在一行之中,以下图所示。