文本换行word-wrap、word-break与white-space

本文同步至微信公众号:http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401671055&idx=1&sn=b88c986e61708da0027fac035ad36f0f#rd

对于后续文章感兴趣的可以添加关注:

文中有些地方没显示全,查看全部内容,请点击上面的原文链接哈

在对页面内容进行排版的时候,不可避免的会遇到对文本进行处理的问题。今天整理了文本换行相关的内容,记录下来分享之。毕竟,好记性不如烂笔头嘛。

对于文本换行,自己之前也处理过相关的问题。知道要用到word-wrap,word-break和white-space等相关的样式规则。然而对于它们三个之前到底有什么区别,还说不清楚。本着理论与实践相结合实事求是的原则,今天抽时间看了下。

在mozilla官网上搜word-wrap会得到如下解释:

The word-wrap property is used to specify whether or not the browser may break lines within words in order to prevent overflow when an otherwise unbreakable string is too long to fit in its containing box.

word-break的解释:

The word-break CSS property is used to specify whether to break lines within words.

word-wrap 属性用来标明是否允许浏览器在单词内进行断句,这是为了防止当一个字符串太长而找不到它的自然断句点时而出现溢出包含框的现象。

word-break表明怎样进行单词内的断句。

从字面意思来看这两个都是用来对文本进行换行的,那么这两个到底有什么区别呢?我们来看一下官网上给出的例子。

首先看一下word-wrap的语法:

word-wrap: normal;word-wrap: break-word;
p { width: 13em; background: gold; }


当指定word-wrap:normal(默认值)时,我们看到Fernstraßenbauprivatfinanzierungsgesetzesund   这串单词很长des后面的位置显示不下,它会换一行显示,而且还从它的容器中溢出了。

p { width: 13em; background: gold; word-wrap: break-word; }

当我们给p元素加上样式word-wrap:break-word时运行结果如下图:


    我们看到Fernstraßenbauprivatfinanzierungsgesetzesund这么一长串仍然会换到下一行显示,当下一行的宽度仍然不够显示的时候,他就会换行显示。官网上给的break-word的解释是Indicates that normally unbreakable words may be broken at arbitrary points if there are no otherwise acceptable break points in the line.个人的理解是,对于普通的文本,当容器剩余的空间不足以显示的时候,它可以在任意的地方被截断(换行显示).

接下来在看看官网上给出的word-break的例子:

word-break的语法:

word-break: normal; word-break: break-all; word-break: keep-all;

再来看下面的三个实例:

.narrow {
    padding: 5px;
    border: 1px solid;
    width: 8em;}
<p>1. <code>word-break: normal</code></p><p class="normal narrow"> This is a long and Supercalifragilisticexpialidocious sentence. 次の単語グレートブリテンおよび北アイルランド連合王国で本当に大きな言葉 </p>
.normal {
    word-break: normal;}

运行结果如下图:


    word-break:normal Use the default line break rule.也就是也就是单词过长时不换行,超出的部分溢出。

再来看word-break: break-all

<p>2. <code>word-break: break-all</code></p><p class="breakAll narrow"> This is a long and Supercalifragilisticexpialidocious sentence. 次の単語グレートブリテンおよび北アイルランド連合王国で本当に大きな言葉 </p>
.breakAll {
    word-break: break-all;}

运行结果如下图:


        break-all:Word breaks may be inserted between any character for non-CJK (Chinese/Japanese/Korean) text.单词可能在任何位置被截断(中文,日文和韩文除外)

上文中有提到word-wrap:break-word也是对文本进行截断处理。它两的区别就在于break-word对于长文本会换到下一行进行显示,如果下一行也显示不完则进行换行。而break-all对于长文本不会换到下一行,直接在当前行截断显示(如上图)

那么word-break:keep-all的作用呢?我们知道对于中文,日语,朝鲜文不会出现像英文单词那样出现一个很长很长的串。对于CJK来说默认的就是换行显示的比如:

<p class="narrow"> This is a long and Supercalifragilisticexpialidocious sentence. 次の単語グレートブリテンおよび北アイルランド連合王国で本当に大きな言葉</p>

这段文字它的运行效果如下图:


    但有时候我们可能会碰到这样的需求,对于中文不让它进行换行,在同一行进行显示,这时候就是keep-all出场的时候了。在上图的例子的基础上,加上word-break:keep-all之后的显示效果如下图:


    加上word-break:keep-all之后,图中的日文(没学过岛国语言,姑且这么称呼吧)就在同一行进行显示了。

keep-all:Don‘t allow word breaks for CJK text.  Non-CJK text behavior is the same as for normal.这个是官网对这一条规则的解释。对于cjk文本,不允许换行显示。

以上(word-wrap,word-break)就是css中对于文本换行相关的处理。接下来在来看一下white-space.

官网上对于white-space的解释是white-space CSS 属性是用来描述如何处理元素中的空格。

white-space: normal
white-space: nowrap
white-space: pre
white-space: pre-wrap
white-space: pre-line

normal

    • 连续的空白符会被合并,换行符会被当作空白符来处理。填充line盒子时,必要的话会换行。这就是默认我们所看到的。

      nowrap

      和 normal 一样,连续的空白符会被合并。但文本内的换行无效。当我们不想让文本进行换行显示时,使用white-space:nowrap时也管用的原因就在于此。

pre

连续的空白符会被保留。在遇到换行符或者<br>元素时才会换行。

有的时候,我们为了防止文本溢出,需要对于超出包含框的文本做隐藏或换行处理。也有的时候,我们又有这样的需求,不让文本进行换行。以上是整理了我根据平时工作中遇到的文本换行相关的一些问题及处理方式的分析。。文中所提到的官网均只mozilla官网。如果文中有不对的地方或者您还有其他的好的方法处理文本换行,欢迎一起讨论哈。

时间: 2024-08-07 04:09:07

文本换行word-wrap、word-break与white-space的相关文章

word break和word wrap

默认情况下,如果同一行中某个单词太长了,它就会被默认移动到下一行去: word break(normal | break-all | keep-all):表示断词的方式 word wrap(normal | break-word):表示是否要断词 word wrap break-word   [要断词] 独占一行(默认情况下单词太长就会被换到下一行去,所以就独占一行了)的单词被断开成多行, 默认值normal,则不断词,而是一行显示,超出容器 word break break-all:和上面相比

富文本编辑器内容生成Word 与 Dictionary的使用

@{ ViewBag.Title = "知识上传";}@model Dictionary<string, bool> //表单验证必填项目不为空函数 $(function () { if ("@Model["upload"]" == "True") { $('body').dailog({ type: 'primary', title: '提示.', discription: '上传成功!' }); } else

reverse the string word by word

题目:Given an input string, reverse the string word by word. For example,Given s = "the sky is blue",return "blue is sky the". 要求: 1)首尾有空格的时候,反转后的string要将空格去掉 2)当string有多个连续空格的时候,只保留一个空格. 代码分析: 对多余空格剔除: 思路分析: 1)从原始s 的最末尾开始扫描,如果遇到空格,用whil

Vue插值文本换行问题

问题背景: 后端返回的字符串带有\n换行符,但Vue将其插值渲染成div内部文本后,文本并不换行,换行符显示为一个空格. 目标: 让文本在换行符处换行. 解决方法: 思路:实现文本换行有两种方法,一是HTML方法,即<br>标签:二是CSS方法,即white-space属性. 方法1. 使用v-html 首先,将字符串里的\n替换为<br>,然后用v-html指令渲染字符串为innerHTML. // JS部分 this.text = res.data.replace(/\n/g,

cocos2d-x改底层之RichText富文本换行

关于字符编码的知识,请参考前辈的博客:字符串和编码格式 这里使用的是cocos2dx的2.2.3版本,底层的RictText换行机制不能满足中文换行,需要改动.由于在3.x的版本已经优化了,而且以后的项目也会转到3.x的版本,所以这里只是做一个记录,对底层换行机制的思想做一个分析,仅供学习用. RichText的换行原理: 以文本换行为例(图片同样的道理),先用一个不带换行的label,算出该label的总长度L,然后和程序设定的宽w比较,w<L则一行足以,否则按w在L中比例来截取原字符串,作为

如何将latex转换为word之word插入.bib中的文献

论文一直用latex写的,投稿需要,现在要将latex的论文转换到word中.难点之一:插入以前bib中的文献. 工具准备: 1 MiKTeX核心,如果已经装个Tex软件,比如CTeX就不用装了. 2 JabRef,BibTeX形式的参考文献管理工具. 3 Bibtex4Word软件.解压后将文件夹中的"bibtex4word.dot"文件,复制粘贴至Word的启动文件夹.我的是Win8系统,所在路径是:C:\Users\Administrator\AppData\Roaming\Mi

android 输出.txt 文本换行问题

// 获取当前日期和时间 Calendar cal = Calendar.getInstance(); String fileName = cal.get(Calendar.YEAR) + "_" + cal.get(Calendar.MONTH) + "_" + cal.get(Calendar.DAY_OF_MONTH) + ".txt"; FileWriter fileWriter = new FileWriter(new File(fil

08.05 边框图片 盒子倒影 新增属性 文本阴影 文本属性 文本换行 文本溢出 文本修饰 文字描边 其他属性

---恢复内容开始--- ### 边框图片 * border-image-source   图片地址 * border-image-slice     图片截取方式 值 浮点数/百分比 * border-iamge-width   边框图片厚度  值 长度单位 * border-image-outset   外延   值 长度单位 * borde-image-repeat    延伸方式  值 stretch/repeat/round/space * border-image border-im

CSS学习笔记:文本换行显示(word-wrap)

在CSS3中新定义了文本换行属性,word-wrap: nomal属性值表示控制连续文本换行. break-word属性值表示内容将在边界内换行.如果需要,词内换行(word-break)也会发生. 换行技术比较分析 IE定义了多个换行处理属性:line-break.word-break.word-wrap,另外CSS1定义了white-space,CSS3增加了word-wrap. line-break专门负责控制日文换行. word-wrap属性可以控制换行.当属性值取word-wrap时,