word-wrap、word-break、white-space区别

word-wrap、word-break、white-space区别

我们先来看看在w3c中这三个属性分别是怎么解释的。

white-space:规定如何处理元素中的空白。

word-wrap:允许对长的不可分割的单词进行分割并换行到下一行。

word-break:规定非中日韩文本的换行规则。

貌似后两个跟前面两个没什么联系,其实还是有一些的,我们先来看看后面两个,废话不多说,先上实例:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.   }  
  10. </style>  
  11. </head>  
  12.     <body>  
  13.         <div>i am a good boyhahahahahahhahahahahh</div>  
  14.     </body>  
  15. </html>  

来看看先进的w3c浏览器的效果:


再来看看落后的ie6:


在英文单词的处理上,只要后面的单词不能够放在后面,默认就会另起一行,但是另起一行还是不够怎么办?默认是不会换行的,w3c浏览器会直接写出去,而落后的ie6会撑开父容器,我们讨论的全是英文单词的情况,中文的情况大家可以看成每个中文都是一个单词,所以默认就会换行的。

怎么样解决上面的问题呢,我们来试下word-wrap,这个属性只有normal和break-word两个值,normal就是默认值就不说了,来看看break-word:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.     word-wrap:break-word;  
  10.   }  
  11. </style>  
  12. </head>  
  13.     <body>  
  14.         <div>i am a good boyhahahahahahhahahahahh</div>  
  15.     </body>  
  16. </html>  

ie6和w3c都变成这样了:


也就是说允许把单词截断了,但是问题来了,既然允许把单词截断,那为何不把第一行的空白部分也占领了然后再截断?那这个问题就不是word-wrap说了算了,它这样其实是有好处的,只要后面不够就另起一行,我们来看看好处是什么:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.     word-wrap:break-word;  
  10.   }  
  11. </style>  
  12. </head>  
  13.     <body>  
  14.         <div>i am a good boyhaha</div>  
  15.     </body>  
  16. </html>  

这下后面单词没有刚刚那么长了,这个时候word-wrap没起作用,因为没有单词需要截断。效果如下:


但是矛盾来了,如果说要占领上面的空白,明显两种情况都会被截断,但是第一种情况明显是占领空白更好,而第二种最好不好占领空白,因为第一种情况那个单词实在是太长了,不管在哪里都必须被截断,而第二种可以一行装下,那么能不截断就不截断吧。但是计算机可没有那么智能,现在有两种情况:

1.截不截断单词视情况而定,不管单词有多长都另起一行。

2.截断单词,占领空白。

第一种情况就是用word-wrap:break-word控制

第二种情况就是word-break控制了,我们先来看看word-break有几个值:

normal这个不多说,就是默认情况;

break-all:这个就是我刚刚说的第二种情况,直接上例子:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.     word-break:break-all;  
  10.   }  
  11. </style>  
  12. </head>  
  13.     <body>  
  14.         <div>i am a good boyhaha</div>  
  15.     </body>  
  16. </html>  


大家看上面的结果,这个结果占领了空白,并且肯定会截断单词的。对非常长的单词来说反正都会截断,还不如占领空白,但是对稍微短的单词来说就有点不划算了,但是没办法,计算机就是这样,要那种情况自己抉择,那你说能不能把两个属性都写起,这样就智能了呢,我试过,不能,默认以word-break的方式处理问题,也就是word-break的属性比word-wrap更强。

再来看看word-break的最后一个属性:keep-all,解释是只能在半角空格或连字符处换行

听上去有点懵,不急,我们先上例子:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <span style="white-space:pre">    </span><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.   <span style="white-space:pre"> </span>width: 120px;  
  8.   <span style="white-space:pre"> </span>border:1px solid red;  
  9.   <span style="white-space:pre"> </span>word-break:keep-all;  
  10. }  
  11. </style>  
  12. </head>  
  13. <span style="white-space:pre">    </span><body>  
  14. <span style="white-space:pre">        </span><div>i am a good boyhahaaaaaaaaaaaaaaa</div>  
  15. <span style="white-space:pre">    </span></body>  
  16. </html>  


大家应该搞懂是什么例子了撒,就是遇到空白才换行,不截断单词的,其实就是跟什么都不设置也就是最最开始的情况是一样的。

现在再来看看white-space,我们一个一个的来。

1.pre:这种情况类似于加个<pre>标签,里面的所有空白和换行被保留。说这个之前,我们先看看浏览器默认是什么情况:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.       
  10. }  
  11. </style>  
  12. </head>  
  13.     <body>  
  14.         <div>i     am</div>  
  15.     </body>  
  16. </html>  


在代码中我加了几个空格,但是只显示一个空格,不管加回车还是空格都没用。但是加上pre

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.     white-space:pre;  
  10. }  
  11. </style>  
  12. </head>  
  13.     <body>  
  14.         <div>i      
  15.       am</div>  
  16.     </body>  
  17. </html>  


不管是回车空格还是制表符,都统统给你显示出来。

2.nowrap:不许换行,说好的截断单词呢,不管是word-wrap还是word-break统统没用,必须在同一行显示,这个就不举例了哈,不管你写什么,都是在一行中显示,空格和回车和制表符都没用,只显示一个空格。


3.pre-wrap:这个属性对ie6-ie8没啥用,在w3c浏览器中,会保留空格,直到下一行,但是到了下一行就没用了。举个例子:

[javascript]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style>   
  6.   div{  
  7.     width: 120px;  
  8.     border:1px solid red;  
  9.     white-space:pre-wrap;  
  10. }  
  11. </style>  
  12. </head>  
  13.     <body>  
  14.         <div>i                                                     am</div>  
  15.     </body>  
  16. </html><strong>  
  17. </strong>  

这里明显空格已经超过第二行了,但是到第二行就没用了。


3.pre-line:合并空白符,保留换行符。这个浏览器支持上跟pre-wrap一样。解释很清楚,就不举例了。


基本上就是以上的情况了,今天重点是讲解三个属性

white-space:nowrap           word-break:break-all      word-wrap:break-word

这三个属性的强度是越来越弱,并且功能上也有差异,童鞋们,搞清楚了吗?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值