code 标签是行内元素,不保留换行、缩进和连续空格,导致多行代码被压成一行、语义错乱,如函数显示为单行、路径丢失分隔符、html 字符未转义。

code 标签本身不保留换行和缩进
code 是行内元素,浏览器会忽略其中的换行符、制表符和连续空格——这不是 bug,是规范行为。你粘贴进去的多行 JS 或 Python,渲染出来就是压成一行的平铺文本,括号错位、逻辑断裂,复制到编辑器里根本没法直接运行。
常见错误现象包括:
- 写
function add(a, b) {<br> return a + b;<br>},实际显示为function add(a, b) { return a + b; } - Shell 命令
ls -l<br>/home/user
渲染成ls -l /home/user,丢失路径分隔语义 - 带 HTML 字符的代码(如
x )未转义,导致浏览器解析失败、后续结构错乱
多行代码必须用 嵌套
真正能保留原始格式的是 pre 元素,但它只负责“预格式化”,不声明“这是代码”;code 负责语义,但不保格式。二者必须嵌套使用,缺一不可。
正确结构是:
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;"><code class="js">function hello() {
console.log('hi');
}</code>
关键点:
pre 必须设 <code>overflow-x: auto,否则长代码行会撑破容器-
code应设display: block,否则它作为行内元素,不响应pre的宽高和滚动控制 - 若需语法高亮,
class属性(如class="js")必须加在code上,highlight.js 或 Prism.js 才能识别语言 - 代码中含
、<code>>、&时,必须手动转义为、<code>>、&
单行代码别误塞进
写“调用 fetch() 时传 signal”这种句子,code 就够了。硬塞进 pre 会带来三个问题:
-
pre是块级元素,默认带上下 margin,插在段落中会让行高异常增大 - 屏幕阅读器读作“预格式化文本”,不是“fetch 函数”,语义错误
- CSS 统一给
pre加背景色,结果把 ASCII 艺术或日志也染上了
判断标准只有一个:要不要保留原始换行和缩进。要 → 用 pre+code;不要 → 只用 code。
容易被忽略的 CSS 和字体细节
只写 font-family: monospace 不够可靠——不同系统 fallback 字体差异大,Windows 下可能用 Courier New,macOS 下用 Menlo,Linux 下甚至用 DejaVu Sans Mono,等宽但字宽、行高等渲染表现不一致。
推荐显式指定字体栈:
code {
font-family: "SFMono-Regular", "Fira Code", "Consolas", "Liberation Mono", "Menlo", monospace;
font-size: 0.875em;
background-color: #f6f6f6;
padding: 0.2em 0.4em;
border-radius: 3px;
}
还要注意:
- 别给
code单独设white-space: pre——它已从pre继承,重复设置可能干扰层叠 - 缩进统一用空格(2 或 4 个),别用 Tab,不同环境渲染宽度不一致
- 中文字体名含空格(如
"Microsoft YaHei")必须加引号,否则 CSS 失效
真正难处理的,是混用边界:有人把整段 Shell 脚本塞进 code,有人把 console.log() 单独包一层 pre。记住,格式保留和语义表达从来不是二选一,而是靠组合与克制。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











