彻底搞懂CSS文本、空白换行问题

更新日期: 2019-02-28阅读: 3.6k标签: 空白

本文前提:文本的父容器是块级元素。首先,我们来整理一下与换行有关的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;
}


 

链接: https://fly63.com/article/detial/2160

vue框架开发出现页面空白、白屏的解决方法总汇

使用Vue-cli脚手架开发单页应用时出现页面空白的情况:1.npm run build打包页面空白,2. iOS的Safari下无法打开网页,3.升级vue2+部分手机访问出现页面空白,4.升级vue2+IP访问页面空白,5.Vue在IE下显示空白问题,6.Vue只在iOS 10出现白屏问题

如何微信小程序禁止下拉_解决小程序下拉出现空白的情况

在微信小程序中,用力往下拉动,页面顶部会出现一段空白的地方。 产品的需求不太允许这么做,会影响用户体验,查看文档发现可以使用enablePullDownRefresh这属性来实现,但是在部分ios端仍然可以下拉出现空白。那么该如何解决呢?

html页面body与div之间产生空白解决方法

在做一个页面输出时发现body与div之间出现20px左右高度的空白,尝试多种方法无解,尤其是方法1也解决不了,后来发现原来是html文件编码格式问题造成的!css初始化,解决不了,就将html文件格式保存为utf-8编码格式,即问题完美解决

Android WebView 加载H5页面空白问题

在Android开发过程中,经常需要使用WebView加载一些H5页面,但有时会出现页面加载失败的情况,今天就探讨下如何解决页面加载空白的问题:

CSS使用font-size: 0去除内联元素空白间隙

我们在编写HTML标签的时候,通常会使用换行,缩进来保证代码的可读性。同时,在编写CSS样式的时候,也会需要把一些元素设置为inline或inline-block。这样一来,有时在页面中会出现意外的空白间隙导致页面视图与本意不符

HTML中6种空白空格

HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格(&nbsp;)是常规空格的宽度,可运行于所有主流浏览器。其他几种空格( &ensp; &emsp; &thinsp; &zwnj;&zwj;)在不同浏览器中宽度各异。

前端性能优化之白屏时间

该篇文章会为您分享在前端性能优化中非常重要的一环-白屏时间,将从白屏时间的概念、重要性以及白屏的过程一一进行阐述,同时提供性能优化的策略与实践。白屏时间:即用户点击一个链接或打开浏览器输入URL地址后

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!