正确顺序是,不能颠倒;保留换行缩进等格式,声明代码语义,二者嵌套才能兼顾格式与语义,且为高亮库唯一识别结构。

用 <pre class="brush:php;toolbar:false;"></pre> 包裹原始文本,再嵌套 <code>
直接写 <p></p> 或 <div> 显示代码会丢失换行、缩进和空格——浏览器默认会合并连续空白符。必须用 <code><pre class="brush:php;toolbar:false;"></pre> 告诉浏览器“按原样渲染”,它保留所有空格、制表符和换行。但仅靠 <pre class="brush:php;toolbar:false;"></pre> 不够:它没有语义,也不带代码样式提示。所以标准做法是嵌套一层 <code>,既表达“这是计算机可执行/可读的代码片段”,又方便后续用 CSS 统一加底色、字体等。
常见错误现象:
- 只用
<code>而不套<pre class="brush:php;toolbar:false;"></pre>→ 换行和缩进全消失 - 用
<pre class="brush:php;toolbar:false;"></pre>但没闭合 → 后续所有 HTML 内容被当成预格式化文本,布局崩坏 - 在
<pre class="brush:php;toolbar:false;"></pre>里写中文注释或路径含全角空格 → 渲染错位(应统一用半角)
white-space 的三种关键取值怎么选
<pre class="brush:php;toolbar:false;"></pre> 默认等价于 white-space: pre,但它不是唯一选择。根据使用场景,你可能需要:
-
white-space: pre-wrap:最常用。保留换行和空格,但允许自动折行(避免长代码行撑破容器) -
white-space: pre-line:合并多余空格,但保留换行 —— 适合日志输出、命令行回显这类“换行有意义、空格不重要”的场景 -
white-space: pre:严格按源码渲染,不折行、不合并空格 —— 适合展示 ASCII 图、固定列宽表格,但需配合overflow-x: auto防溢出
别用 white-space: nowrap 套代码块——它禁用换行却不管空格,缩进全乱,且横向滚动体验差。
防止代码块破坏页面流的两个硬性约束
代码块默认是块级元素,但容易引发两类布局问题:
- 外边距塌陷:相邻
<pre class="brush:php;toolbar:false;"></pre>之间上下 margin 会合并,导致段间距不可控 → 显式设margin-block: 1em或margin: 1em 0 - 宽度失控:未设
max-width时,超长行会让父容器无限拉宽,移动端直接横向滚动 → 必须给容器加overflow-x: auto,并确保<pre class="brush:php;toolbar:false;"></pre>不设固定 width
顺带提醒:<pre class="brush:php;toolbar:false;"></pre> 里不要塞 <div> 或 <code><p></p> —— 它们会破坏预格式化语义,部分浏览器会自动闭合 <pre class="brush:php;toolbar:false;"></pre> 导致结构断裂。
语法高亮不是排版,但影响可读性底线
纯 <pre class="brush:php;toolbar:false;"><code></code> 只解决“不丢格式”,不解决“看得清”。真实项目中,几乎总会引入语法高亮库(如 Prism.js、highlight.js),它们依赖 <code><code></code> 的 <code>class</code> 属性识别语言类型:</code></pre>
function hello() {
console.log('Hello');
}
注意两点:
- 语言标识必须写对,比如
language-python不是python或py - 高亮库通常要求
<code>是<pre class="brush:php;toolbar:false;"></pre>的**直接子元素**,中间不能插<span></span>或其他标签
如果只是临时调试或静态文档,用 CSS 手动配色也行,但别试图用 font 标签或内联 color —— 它们已废弃,且无法响应深色模式。











