首先,我们来整理一下与换行有关的3个CSS属性:

word-break

该属性决定文本内容超出容器时,浏览器是否自动插入换行符。

属性值:

  • normal:默认换行规则——英文以词为单位换行,连续字符不换行,直接溢出父元素
  • break-all:无视单词,强制在父元素边缘位置截断(最省空间,看起来最整齐,但单词可能被从中劈开)。另外连续的标点符号不会换行,不知为何。。。
  • keep-all:与normal一样,而且连中日韩的连续文字也不换行了(有空格分隔时会换行)
  • *break-word:这不是一个规范属性,只有部分浏览器支持,效果同word-wrap: break-word;

word-wrap(overflow-wrap)

该属性决定浏览器是否应该在一个无法正常断开的单词内部插入换行符。

属性值:

  • normal:不在单词内部插入换行符,即换行只发生在单词间的空格等地方,不会截断单词。如果单词超级长,则溢出父容器。
  • break-word:『如果没有合适的截断点,那就可能在任意位置截断单词』。解释一下:首先尝试正常换行(这一行放不下就放到下一行),如果换行后还是很长,就在任意位置截断。注:连续的标点符号也会截断。

white-space

该属性决定浏览器如何处理空白和换行符。

属性值:

  • normal:默认行为,换行符转换为空白,合并连续的空白,但必要时换行(所谓『必要』对于英文来说,指的是一个单词后面的下一个单词在该行末尾放不下了,得整个放到下一行去;对中文来说就是自然的换行)
  • nowrap:其他与normal一样,但『必要』的换行也不做了,打死不换行
  • pre:保留连续的空白,遇到换行符或br标签时换行,但不自动插入换行符
  • pre-wrap:保留连续的空白,在遇到换行符、<br>时换行,『必要』时自动插入换行符
  • pre-line:合并连续的空白符,在遇到换行符、<br>时换行,『必要』时自动插入换行符

对这3个属性的关系,我的理解如下:

首先,white-space决定了浏览器如何渲染换行符,如果它选择无视换行符,那么另外两个属性指导浏览器自动插入的换行符都无效;而它自己插入的换行符不受影响。

其次,word-break优先于word-wrap,因为浏览器首先会把单词视为一个整体。举个例子:

word-break值为normal或keep-all时,可能会有超长的单词溢出容器。此时 word-wrap:break-word 会处理这种情况,将该单词从中间截断,浏览器最终表现出来的效果是break-word。

而若word-break值改成了break-all,那么超长的单词会被强制截断,此时word-wrap就没有用武之地了。浏览器最终表现出来的效果是break-all。

(PS:如果同时设了break-all和break-word,那么一长串标点符号不会换行,原因不详。。。为了长串标点能正常换行,建议只使用break-word)

因此,如果需求是这样的(一般是UGC文本的展示):

1. 换行符、空白都原样显示

2. 文本正常换行,不能溢出容器

那么需要设置的属性组合为:

.text {
white-space: pre-wrap;
word-wrap: break-word;
}

参考资料:

MDN之word-break

MDN之overflow-wrap

MDN之white-space

你真的了解word-wrap和word-break的区别吗?

white-space、word-wrap和word-break的简单整理

彻底搞懂CSS文本、空白换行问题的更多相关文章

  1. css文本是否换行

    关于文本换行有三个属性: white-space word-break word-wrap white-space normal 默认.空白会被浏览器忽略 pre 空白会被浏览器保留.其行为方式类似 ...

  2. 彻底搞懂CSS伪类选择器:is、not

    本文介绍一下Css伪类:is和:not,并解释一下is.not.matches.any之前的关系 :not The :not() CSS pseudo-class represents element ...

  3. 彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index

    前言 最近,在项目中遇到一个关于CSS中元素z-index属性的问题,具体问题不太好描述,总结起来就是当给元素和父元素色设置position属性和z-index相关属性后,页面上渲染的元素层级结果和我 ...

  4. CSS控制文本超出指定宽度后用省略号代替,CSS控制文本不换行

    CSS控制文本超出指定宽度后用省略号代替,CSS控制文本不换行. 一般的文字截断(适用于内联与块): .text-overflow {     display:block;/*内联对象需加*/     ...

  5. 用css实现文本不换行切超出限制时显示省略号(小tips)

    div{ max-width: 500px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;/*文本不换行*/ } 如上 ...

  6. CSS实现不换行/自动换行/文本超出隐藏显示省略号

    在写页面的时候,我们经常会需要用到关于文本的换行,强制换行以及显示几行超过显示省略号等,今天我们就对这些问题来做个汇总吧! 1.自动换行 div{ word-wrap:break-word; word ...

  7. 第 15 章 CSS 文本样式[下]

    学习要点: 1.文本总汇 2.文本样式 3.文本控制 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 文本样式,通过文本样式的设置,更改字体的大小.样式以及文本的方位. 一.文本总汇 本节课, ...

  8. 6.css文本样式

    文本样式,只要针对的是文本的效果和文本的方位,即文本样式和文本控制总结起来有一表中的属性可用: 属性名 说明 CSS 版本 text-decoration 装饰文本出现各种划线 1 text-tran ...

  9. CSS文本与文字

    -255之间 14.2 CSS中的文字属性 属性名称                    属性值                       说明 font-style          norma ...

随机推荐

  1. C# 线程获取/设置控件(TextBox)值

    线程读写控件需要用委托(delegate)与Invoke/BeginInvoke来进行 参考内容:http://www.cnblogs.com/runner/archive/2011/12/30/23 ...

  2. JS判断图片是否加载完成 背景图404 快到碗里来

    面对这个问题 我最多做到表面笑嘻嘻 …… 真不知道测试怎么那么…… 啥都能给你测出来 有的没的都能给你测出来 算了算了  谁让本仙女本精灵本可爱温柔大方善解人意呢 …呵呵呵 ————————————正 ...

  3. ORACLE设置用户密码不过期

    1.查看用户的 profile 是哪个,一般是 default SELECT USERNAME, PROFILE FROM dba_users; 2.查看指定概要文件(这里是1中对应的profile) ...

  4. Angular官方教程采坑

    Angualar 7.0.1是现在的最新版本,教程总体来说还是不错的,但是我在跟着教程做英雄项目的时候出现了一个很明显的坑. 在教程的第6部分HTTP的内容中写到(见下图) 文档中特别注明了要使用0. ...

  5. debian9使用国内源安装docker以及一些使用方法

    debian9使用国内源安装docker以及一些使用方法   首先, 我的环境是debian, 容器是centos debian 扔源 # deb-src [arch=amd64] https://m ...

  6. mysql操作数据表中的记录1

    一.插入记录INSERT ​ mysql> create TABLE users(    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMEN ...

  7. mysql 数据库导入导出方法总结

    一般形式:mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 (1)-p 后面不能加password,只能单独输入如1中那样 (2)mysqldump是在cmd下的命 ...

  8. Moving or disabling the package cache for Visual Studio 2017

    Moving or disabling the package cache for Visual Studio 2017 | Setup & Install by Heath Stewart ...

  9. mysql传统主从配置与主从监控

    主从简介 在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患. 当数据规模非常大,读写量也很高时,一台数据库已经无法负担全部读写任务,就需要多台数据 ...

  10. ASP.NET Core使用EntityFrameworkCore CodeFrist

    1,安装环境: 如果是VS2015,确保已经升级至 update3或以上 .net core sdk (https://www.microsoft.com/net/download/core) vs2 ...