CSS – word-break, overflow-wrap, word-wrap, white-space
参考
word-break 和 word-wrap 的区别 (我以为这篇已经很厉害了)
彻底搞懂word-break、word-wrap、white-space (没想到, 这一篇更厉害)
white-space
white-space 是负责管理空格, 换行的, 比如 <br>, \n
默认的行为:
和 <br> 有效
连续的 space 会被缩减成一个
\n 无效
句子超过一行后会自动换行
单个字太长则会超出边界.
大神已经整理很好给我们了:

一般而言, 不需要背起来, 只需要知道默认行为和最常遇到的情况就可以了.
\n 无效是最常遇到的问题. 比如 user 通过 textarea 写了 \n 换行, 后来被弄掉了.
解决方案就是用 white-space: pre-line
word-break
word-break 讲的是单个字要怎样 break.
默认情况, 英文就是看连续字母一直到空格算一个能被 break 的字. 中文不看空格, 每一个字都可以被 break
break-all
break-all 的情况, 英文的每一个字母都可以被 break. 中文本来就可以.
keep-all
keep-all 的情况, 中文变得跟英文一样, 只有到空格才能被 break.
2 个都很少会被用到. 因为效果都不太好.
overflow-wrap (word-wrap)
以前叫 word-wrap. CSS 3 后改的, 现在都支持了。
break-word
它的效果就是只有当一个字没办法被 break 又超过了边界时, 才把那个字 break-all. 这才是最常用到的体验.
当遇到 flex, break-word 失效
参考: Stack Overflow – flex item overflows container due to long word even after using word-wrap

其原因是 flex item 在没有设置 min width 的时候, 最小就是 width 本身. 当设置 min-width: 0 以后, 就会看到 break-word 效果了.
但这招感觉有点 hacking 的味道...
还有一招是用
word-break: break-word;
不过这招当遇到很长很长的字, 它也会 break 掉. 这个体验不一定是想要的.
总结
几个东西需要记住
1. 连续 space 会被合并, 所以要连续 space 就得用
2. 默认 \n 是无效的, 需要加 white-space: pre-line
3. 当遇到 1 个很长的单字时, 用 overflow-wrap: break-word 把它 break 掉
4. 如果不希望自动换行 white-space: nowrap; 或者 pre; 区别是 pre 允许 \n
题外话: 当 inline element 遇上 new line
<p><span>abc</span><span>xyz</span><span>123</span></p>
<p>
<span>abc</span>
<span>xyz</span>
<span>123</span>
</p>
这 2 个 <p> 渲染出来的效果是不一样的

第一个 <p> 间中没有空格
第二个 <p> 中间却有空格, 所以当 inline element 遇上 new line 会变成空格哦. 这个要注意了.
CSS – word-break, overflow-wrap, word-wrap, white-space的更多相关文章
- leetcode 139. Word Break 、140. Word Break II
139. Word Break 字符串能否通过划分成词典中的一个或多个单词. 使用动态规划,dp[i]表示当前以第i个位置(在字符串中实际上是i-1)结尾的字符串能否划分成词典中的单词. j表示的是以 ...
- 139. Word Break 以及 140.Word Break II
139. Word Break Given a non-empty string s and a dictionary wordDict containing a list of non-empty ...
- word break和word wrap
默认情况下,如果同一行中某个单词太长了,它就会被默认移动到下一行去: word break(normal | break-all | keep-all):表示断词的方式 word wrap(norma ...
- [LeetCode] Word Break II 拆分词句之二
Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
- 【leetcode】Word Break II
Word Break II Given a string s and a dictionary of words dict, add spaces in s to construct a senten ...
- 17. Word Break && Word Break II
Word Break Given a string s and a dictionary of words dict, determine if s can be segmented into a s ...
- LeetCode:Word Break II(DP)
题目地址:请戳我 这一题在leetcode前面一道题word break 的基础上用数组保存前驱路径,然后在前驱路径上用DFS可以构造所有解.但是要注意的是动态规划中要去掉前一道题的一些约束条件(具体 ...
- LeetCode Word Break II
原题链接在这里:https://leetcode.com/problems/word-break-ii/ 题目: Given a string s and a dictionary of words ...
- 【LeetCode OJ】Word Break II
Problem link: http://oj.leetcode.com/problems/word-break-ii/ This problem is some extension of the w ...
- Leetcode#139 Word Break
原题地址 与Word Break II(参见这篇文章)相比,只需要判断是否可行,不需要构造解,简单一些. 依然是动态规划. 代码: bool wordBreak(string s, unordered ...
随机推荐
- 2024秋招字节跳动朝夕光年UE4客户端开发实习生岗笔试题目
20240117更新 2024年秋招笔试题目,没想到时隔几个月字节跳动游戏业务就要寄了,本文仅供参考,请大佬多多指教 Q1字符串处理 Q2 杯子问题 桌子上有4109+1个饮料杯,这些饮料杯的编号依次 ...
- [oeasy]python0007_ print函数_字符串_display_电传打字机_程序员的浪漫
你好世界 回忆上次内容 上次 想输出 Hello world! 据说是程序猿的浪漫 键盘按键 作用 ↑ 上一条指令 ↓ 下一条指令 ← 光标 向左移动 一格 → 光标 向右移动 一格 ctrl + ...
- Groovy 基于Groovy实现DES加解密
groovy 3.0.7 DES加密简介 加密分为对称加密和非对称加密.非对称加密,加解密使用不同的密钥,如RSA:对称加密,加解密使用相同的密钥,如DES(Data Encryption Stand ...
- openEuler 安装 DocekrCE
就个人而言,openEuler 算是不错的国产化操作系统."一脉传承"自redhat让实际的使用体验非常丝滑.软件源都是国内的,开箱即用,漏洞的补丁发的也挺及时.美中不足的是貌似 ...
- bloom效果
搜索 复制
- vue codemirror sql编辑器功能 可自定义提醒(关键字,库名,表名),高亮,主题
工作中再一次需要开发sql编辑器,优化上篇文章内容 https://www.cnblogs.com/Lu-Lu/p/14388888.html 本次功能是tab页打开多个sql编辑器,效果图: 安装: ...
- css 蛇形排序
先看效果 需求: 一个[ 4 * ?]的网格布局,奇数行 布局 从左往右,偶数行 布局 从右往左. 思路1: js将数组按4个每份进行分割,将偶数份进行反向,然后再将分割后的数据,重新组装.( 太麻 ...
- java面试一日一题:垃圾回收器如何组合使用
问题:请讲下java中垃圾回收器如何组合使用 分析:该问题主要考察对垃圾回收器的深度理解 回答要点: 主要从以下几点去考虑, 1.垃圾回收器有哪些种类,每种的特点 2.组合使用怎么理解 在上篇文章&l ...
- iOS开发基础143-性能优化
我们可以先构建一个详细的大纲,然后在每个部分详细阐述.下面是一个针对iOS性能优化的详细大纲: 一. App启动时间优化 A. 启动分类 冷启动 热启动 B. 冷启动优化 减少启动时的动态库加载 尽可 ...
- 【PhpAdmin】小皮面板配置PhpAdmin
1.先用面板开启MySQL和Apache服务 2.MySQL的端口不在3306,我改为3307 3.新建一个站点,声明域名和端口配置 没有配置本地域名映射,这个域名就没有什么用,还是依靠localho ...