常见样式问题七、word-break、word-wrap、white-space区别

首先推荐下MDN网站,在上面可以学习html、css、js。对于css而言,可以查看详细的语法、使用案例、浏览器兼容性。附上链接:https://developer.mozilla.org/zh-CN

一、基本介绍

1、word-break

MDN上显示语法:

normal | break-all | keep-all | break-word

值:

normal:
使用默认的断行规则。
break-all:
对于non-CJK (CJK 指中文/日文/韩文) 文本,可在任意字符间断行。
keep-all:
CJK 文本不断行。 Non-CJK 文本表现同 normal。

兼容性如下图所示:keep-all的兼容性比较差一些,其他基本上主流的浏览器都能支持。

2、word-wrap

注:word-wrap 属性原本属于微软的一个私有属性,在 CSS3 现在的文本规范草案中已经被重名为 overflow-wrap 。 word-wrap 现在被当作 overflow-wrap 的 “别名”。 稳定的谷歌 Chrome 和 Opera 浏览器版本支持这种新语法。

word-wrap语法如下:

normal | break-word

值如下:

normal:
表示在正常的单词结束处换行。
break-word:
表示如果行内没有多余的地方容纳该单词到结尾,则那些正常的不能被被分割的单词会被强制分割换行。

3、white-space

语法如下:

normal | pre | nowrap | pre-wrap | pre-line
值如下:
normal:
连续的空白符会被合并,换行符会被当作空白符来处理。填充line盒子时,必要的话会换行。
nowrap:
和 normal 一样,连续的空白符会被合并。但换行符无效。
pre:
所有空白符都会被保留。不会自动换行,原样输出。 
pre-wrap:
保留空白符序列,但是正常地进行换行。
pre-line:
合并空白符序列,但是保留换行符。

上面的换行符是指回车\r、\n、或\r\n。对于<br/>标签,不管是上面哪个属性都会换行的。

如果同时有多个空格、制表符、换行符,最终合并结果是只有一个空格。

pre和pre-wrap的区别在于pre-wrap能够自动换行;pre-wrap和pre-line的区别在于pre-line能够合并空格。

(帮助记忆:wrap在排版中一般指换行)

 空格和制表符换行符自动换行
normal合并合并换行
nowrap合并合并不换
pre保留保留不换行
pre-wrap保留保留换行
pre-line合并保留换行

二、word-break:break-all和word-wrap:nowrap区别

前者是暴力强制换行,不管行末的单词是否显示完整,只要是非中日韩字符,就强制换行;

后者是温柔处理,如果行末没有足够空间可以放下单词,整个单词放到下一行。

html代码如下:

<style> 
p {
    width: 200px;
    padding: 5px;
    background-color: #f0f3f9;
    font-size: 14px;
}
.word-break {
    word-break: break-all;
}
.word-wrap {
	white-space: break-word;
}
</style>

<p class="word-break">这个段落设置了word-break:break-all。</p>
<p class="word-wrap">这个段落设置了white-space:break-word。</p>

效果如下图所示:


三、word-break:keep-all和white-space:nowrap

这两个差别比较大,作用完全不一样。

word-break:keep-all会自动换行,但自动换行不会在词间换行,包括非日韩文以及日韩文。对于非日韩文来说,效果和word-break:normal是一样的。

white-space:nowrap效果是不会自动换行,除非手动添加换行标签。

<style> 
p {
    width: 200px;
    padding: 5px;
    background-color: #f0f3f9;
    font-size: 14px;
}
.word-break {
    word-break: normal;
}
.word-keep {
    word-break: keep-all;
}
.nowrap {
	white-space: nowrap;
}
</style>
<p class="word-break">这个段落设置了word-break:normal。非中日韩文词间不会断行但日韩文词间换行。</p>
<p class="word-keep">这个段落设置了word-break:keep-all。非中日韩文以及中日韩文的词间都不换行。</p>
<p class="nowrap">这个段落设置了white-space:nowrap。不管文字有多长都不会换行,除非添加换行标签<br/>。<br/>前面有个换行标签</p>
### 使用 `word-wrap` `word-break` 实现换行效果 #### 属性解释 `word-wrap` `word-break` 是 CSS 中用于控制文本换行行为的重要属性。 - **`word-wrap: break-word;`** 此属性主要用于处理超出容器宽度的内容,允许长单词或 URL 被拆分到下一行。它仅在必要时才会打断单词[^2]。 - **`word-break: break-all;`** 这一属性更加激进,会在任何字符处强行断开单词,即使不需要打破单词也会如此操作。这种特性非常适合包含大量英文或其他非亚洲语言的场景[^4]。 当应用于中文环境时,两者的区别主要体现在是否严格遵循语义分割上: - 对于纯中文内容来说,因为汉字之间不存在自然间隙(不像英文字母间存在空格),所以无论是采用 `word-wrap: break-word;` 或者是 `word-break: break-all;` 都能够正常工作并按需完成换行任务[^3]。 然而需要注意的是,在混合型文档——即既含有中文又夹杂着较长不可分割单元比如技术术语、链接地址等情况之下,则应仔细权衡选用哪一种策略更为合适[^1]。 以下是具体的应用实例以及代码展示部分: ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Word Wrap & Break Example</title> <style> .example { width: 200px; border: 1px solid black; margin-bottom: 10px; } /* Using word-wrap */ .use-word-wrap { white-space: pre-line; word-wrap: break-word; } /* Using word-break */ .use-word-break { white-space: normal; word-break: break-all; } </style> </head> <body> <div class="example use-word-wrap">这是一个非常长的单个词语aaaaaaaaaaaaaaaabbbbbbbbbbbbcccccccccccddddddddddeeeeeeeeee。</div> <div class="example use-word-break">这是另一个例子:http://www.example.com/verylongurlthatneedstobebrokenintopieces.</div> </body> </html> ``` 以上HTML片段展示了两种不同方法的实际运用情况。第一个 div 利用了 `word-wrap: break-word;` 来优雅地处理超长字符串;而第二个则通过设置 `word-break: break-all;` 达到了同样的目的却可能破坏某些特定场合下的可读性[^5]。 ### 结论 综上所述,在实际开发过程中可以根据项目需求灵活选择合适的解决方案。如果是针对一般性的网页布局设计,并且希望保持较好的用户体验,则推荐优先考虑使用 `word-wrap: break-word;` 。但如果面对特殊情形如表格内部单元格溢出等问题,则可以尝试引入更加强硬的方式 —— 即启用 `word-break: break-all;`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值