white-space: pre-wrap 是最稳妥的通用方案,可保留换行符、连续空格,并允许容器内自动折行;需搭配 overflow-wrap: break-word 处理无空格长串,且在 flex 布局中应设 min-width: 0 防止换行失效。

white-space: pre-wrap 是最稳妥的通用方案
多数“空格不显示”“换行丢失”问题,本质是浏览器默认 white-space: normal 合并了连续空白。用 white-space: pre-wrap 能兼顾三件事:保留源码中的 \n 换行、保留多个空格(但不强制等宽)、允许在容器边界自动折行。
- 比
pre-line更适合含混合空格+换行的用户输入(如评论、地址) - 比
pre更适合常规排版——不会让中文段落变成等宽字体 - Chrome 70+、Firefox 60+、Safari 12.1+、Edge 79+ 全支持;IE11 不支持,但可用降级为
pre-line或 JS 检测后 fallback
示例:
<div style="white-space: pre-wrap; overflow-wrap: break-word;">北京市朝阳区建国路8号 SOHO现代城A座1208室 邮编: 100022</div>
超长无空格字符串必须配 overflow-wrap: break-word
仅设 white-space: pre-wrap 对 https://example.com/very/long/path/with/no/spaces 或一整段中文“上海市静安区南京西路1266号恒隆广场办公楼38层”无效——浏览器默认只在空格、标点、连字符处断行。
-
overflow-wrap: break-word强制在任意字符间断行(含字母、数字、中文),是手机窄屏下的刚需 - 不要用
word-break: break-all:它会在单词中间硬切,破坏可读性(如“上海”切成“上/海”) - 搭配
min-width: 0使用,尤其在 Flex 容器内,否则子元素可能拒绝收缩导致横向溢出
避免 和全角空格(U+3000)
在 Safari 中容易被忽略(尤其在行尾或 inline-block 内),而全角空格在不同字体下宽度不一致(微软雅黑 vs PingFang),造成跨设备错位。
- 需要固定占位时,优先用
margin-left或padding-left,而非空格字符 - 服务端或 JS 输入处理阶段,可用
str.replace(/[\u3000\s]+/g, ' ')统一转为半角空格 - 若必须用空格字符,
(thin space)或(thin space, no break)比更稳定,但需确认字体支持
Flex/Grid 布局中空格失效的真正原因
不是空格“没了”,而是父容器没设 min-width: 0,导致子元素在内容过长时拒绝收缩,从而撑破容器、禁用换行逻辑。
- 常见于
display: flex的卡片标题区域,里面放了一段带空格的地址文本 - 只需给该子元素加
min-width: 0,再配合white-space: pre-wrap和overflow-wrap: break-word即可生效 - 别依赖删 HTML 源码换行来“解决间隙”——那是 inline-block 的坑,Flex/Grid 下无效且不可维护
white-space 层级被 UI 框架(如 Vant 的 .van-button)或全局 CSS(如重置了所有元素的 white-space: nowrap)悄悄覆盖。查问题时,先打开开发者工具看 computed 样式里 white-space 的最终值,而不是猜哪个浏览器“不兼容”。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











