浏览器默认压缩空白符,需用、white-space、 或四类手段保留;原样输出适合代码等预格式化文本,white-space属性更灵活可嵌入任意标签, 用于少量空格,仅控制换行。

浏览器默认会把多个空格、制表符、换行符全压缩成一个空格,所以直接敲空格或回车没用——想原样保留,得用 <pre class="brush:php;toolbar:false;"></pre>、white-space、 或 <br> 这四类手段,选哪个取决于你到底要“保留什么”和“用在哪儿”。
用 <pre class="brush:php;toolbar:false;"></pre> 标签原样输出所有空白
这是最粗暴也最可靠的方案,适合代码块、日志、ASCII 图、对齐要求严格的文本。它会照搬源码里的空格、缩进、换行,连制表符都原样渲染。
-
<pre class="brush:php;toolbar:false;"></pre>默认用等宽字体,如果不想用等宽,加font-family: sans-serif;覆盖 - 它自带上下外边距(
margin),嵌在段落里时容易撑开布局,建议加margin: 0; - 不推荐用于大段正文排版,语义上它表示“预格式化文本”,跟普通段落混用会降低可访问性
<pre class="brush:php;toolbar:false;" style="margin:0; font-family:sans-serif;">
第一行开头有两个空格
第二行有四个空格
第三行无缩进
用 white-space CSS 属性精细控制
比 <pre class="brush:php;toolbar:false;"></pre> 更灵活,能嵌入任意标签(如 <p></p>、<div>),且不影响语义。关键看你要保留什么:
<ul>
<li>
<code>white-space: pre;:完全保留空格+换行,但不自动换行(超长内容会溢出容器)
white-space: pre-wrap;:保留所有空格和换行,同时允许在单词边界处正常折行(最常用)white-space: pre-line;:合并连续空格,只保留换行符(适合纯换行需求,比如诗歌)white-space: normal; 或不设——那就回到默认压缩行为注意:该属性作用于**容器元素本身**,不是子元素;且对内联元素(如 <span></span>)效果受限,优先套在块级容器上。
用 插入不可折叠的单个空格
当你只需要在两个词之间多塞一两个空格(比如“第 一章”),又不想动整体排版逻辑, 就是唯一选择。它不会被合并,也不会导致换行。
- 多个
可以堆叠:姓名 电话→ 显示三个空格 - 不适合大量使用:10 个空格就得写 10 次
,维护困难,语义不清 - 典型场景:数字与单位之间(
100 km)、版权符号后(© 2026)、防止人名断行(P. T. Barnum)
用 <br> 控制换行位置,但不处理空格
<br> 只管换行,不管空格。它常被误当作“保留空格”的手段,其实只是强行打断行流——前后空格依然会被压缩。
- 适合地址、诗歌、简单列表这类已知固定换行点的短文本
- 连续多个
<br>会产生多余空白行,不如用margin或line-height控制间距 - 不能替代段落结构:用
<p></p>包裹每行更语义化,<br>只是视觉辅助
比如:<p>北京市朝阳区<br>建国路8号<br>SOHO现代城A座</p>
真正难的不是选哪种方法,而是判断原始文本里哪些空格/换行是有意义的、哪些只是编辑器随手敲的。先理清语义意图,再选技术手段——否则很容易用 堆出难以维护的 HTML,或者给整段文字套 white-space: pre; 导致响应式失效。











