white-space 、 word-wrap 和 word-break 是决定段落中的文本如何展现的3个css属性,属性说明请点击连接查看参考手册。css
white-space属性定义了如何处理文本中的空白;具体到细节,主要决定决定了如何处理元素内文本中空白符、换行符、是否容许过长行折行;
其中,过长行是指那些单行内容宽度超出了容器宽度的行,如下列代码为例:html
<!--html--> <p>ABCDEFGHIJKOMN</p> /*css*/ p{width:4em;}
内容行ABCDEFGHIJKOMN
渲染宽度为7em,超过所在容器的指定宽度,那么它属于过长行。浏览器
white-space默认值为normal,可选值包括pre、nowrap、pre-wrap、pre-line。wordpress
下表对比分析了white-space各值在处理空白符、换行符、折行与否时的不一样策略。spa
值 | 概述 | 空白符 | 换行符 | 过长行是否折行 |
---|---|---|---|---|
normal | 合并连续的空白符、换行符为一个空白符;折行; | 连续的多个空白符合并成一个; | 换行符被当作空白符处理,一同合并; | 折行(说明1) |
pre | 彻底保留代码中格式;不折行; | 全部空白符保留; | 全部换行符保留; | 不折行(说明2) |
nowrap | 合并连续的空白符、换行符为一个空白符;不折行; | 连续的多个空白符合并成一个; | 换行符被当作空白符处理,一同合并; | 不折行(说明2) |
pre-wrap | 保留全部空白符、换行符;折行; | 全部空白符保留; | 全部换行符保留; | 折行(说明1) |
pre-line | 空白符合并;换行符保留;折行; | 连续的多个空白符合并成一个; | 全部换行符保留; | 折行(说明1) |
说明1:折行( CJK遇到容器边界自动换行;非CJK由word-wrap和word-break的值决定。)
说明2:不折行(行内容宽度超出容器宽度时的表现由overflow属性决定;word-wrap和word-break设置为任何值都不影响表现。)ssr
1.以下方代码(图1)及相应效果图(图2)所示,段落中的换行效果可能来源于两种不一样的缘由。一种是段落中保留的换行符;另外一种状况是过长行的折行效果。
前者在所属容器宽度改变时,仍然是单独一行;后者在所属容器改变时可能合并到其他行中。code
white-space值为normal、pre-wrap、pre-line时,过长行遇到容器边界时会触发折行现象。white-space决定了过长行是否发生折行,而 word-wrap和word-break用于决定如何进行折行。orm
从易于区分和理解的角度,我引用了“无双”在你真的了解word-wrap和word-break的区别吗?一文中对两个css属性做用的解释:
word-wraphtm
word-wrap 属性用来标明是否容许浏览器在单词内进行断句,这是为了防止当一个字符串太长而找不到它的天然断句点时产生溢出现象。blog
word-break
word-break 属性用来标明怎么样进行单词内的断句。
关于word-wrap和word-break,咱们主要关注word-wrap:break-word和word-break:break-all的区别:
word-wrap先尝试寻找空格、链接符等正常换行点,若是正常换行能知足不超出容器宽度的需求,正常换行;若是正常换行后仍然超出容器宽度,对非CJK长内容进行强制换行。
word-break:break:all直接强制在行末尾换行。
详细论述和验证建议参考张鑫旭大神的word-break:break-all和word-wrap:break-word的区别 和 无双的你真的了解word-wrap和word-break的区别吗?,两篇文章阐述都清晰明了,此处不班门弄斧;引出基本的概念和理解主要为了引出后续的组合引用效果表格。
word-wrap默认值normal,可选值break-word;
word-break默认值normal,可选值为break-all,keep-all。非CJK文本下,keep-all和normal的表现是一致的。
下表列出了word-wrap和word-break的组合使用效果。
组合 | 效果 |
---|---|
word-wrap:normal; word-break:normal; | 遵循默认规则折行; 如没有-和空白符,不折行(说明1); |
word-wrap:normal; word-break:break-all; | 内容遇到容器末尾强制执行换行; |
word-wrap:break-word; word-break:normal; | 优先尝试正常折行; 正常折行后仍然过长的,强制在遇到容器末尾时换行; |
word-wrap:break-word; word-break:break-all; | 内容遇到容器末尾强制执行换行(非末行均占满容器宽度); (不优先尝试-和空白符等折行规则) |
说明1:超出容器宽度后的效果优overflow属性决定。