<pre> 是“preformatted text”的缩写,核心作用是原样保留空格、换行和制表符;它不是段落标记,语义和 <p> 完全不同,适用于终端输出、代码片段、ASCII 表格等需严格保留格式的场景。
很多人看到 <pre> 就下意识觉得是“paragraph”的缩写,其实完全不是。<pre> 是 “preformatted text” 的简写,核心作用只有一个:**原样保留空格、换行、制表符等空白字符**。它和 <p> 语义完全不同,<p> 才是真正的段落标记,会自动合并多余空白并按块渲染;而 <pre> 渲染时连你代码里缩进的 4 个空格、换行后的空行都会照单全收。
以下场景不加 <pre> 很难准确还原格式:
用 <div> 或 <p> 包裹这些内容,浏览器会把所有连续空白压缩成一个空格,换行也被忽略——除非你手动加 white-space: pre CSS,但那只是样式模拟,语义上仍不正确。
<pre> 是块级元素,允许包含行内元素,但禁止直接嵌套 <p>、<h2> 这类块级标签(虽多数浏览器能容错渲染,但不符合 HTML5 规范)。
立即学习“前端免费学习笔记(深入)”;
<pre><code class="js">console.log("hello");</code></pre> —— <code> 提供语义(这是代码),<pre> 提供格式(保留缩进换行)<span>(用于高亮关键词)、<a>(跳转到某行)、<img>(行内图标)<div>、<section>、<blockquote> —— 容易破坏预格式化流,也可能触发浏览器解析异常<pre> 默认用等宽字体(如 monospace),且不自动换行,容易撑破容器:
overflow-x: auto 防横向滚动条失控,或 white-space: pre-wrap 允许长行换行(但会轻微改变原始格式)width 属性 —— HTML5 已废弃 <pre width>,无效且可能被忽略<pre> 内文本,但不会把它当正文段落加权;若内容重要(如 API 响应示例),建议额外用 <details> 或 aria-label 补充说明最常被忽略的一点:pre 本身不提供语法高亮,也不解析 HTML 实体。比如你写 <div>,它会原样显示为 <code><div>;但如果你直接写 <div>,浏览器会尝试解析成真实标签——所以实际使用中,HTML 特殊字符必须手动转义。