必须用 而非 的唯一标准是:该文本是否为程序执行后用户在终端、控制台或浏览器 devtools 中原样看到的结果; 是语义化容器,需显式设置等宽字体、保留空白符,且严禁混入解释性文字或 html 转义遗漏。

什么时候必须用 ,而不是 或 <pre class="brush:php;toolbar:false;">
判断唯一标准:这段文本是不是程序执行后,用户在终端、控制台或浏览器 DevTools 里**原样看到的结果**?
- ✅ 正确:Error: Cannot find module 'fs'(Node.js 启动失败时真实打印的错误)
- ✅ 正确:added 123 packages in 4.2s(
npm install 命令结束后终端输出) - ❌ 错误:fetch("/api/users")(这是代码,该用
fetch("/api/users")) - ❌ 错误:{"id":1,"name":"Alice"}(这是 API 响应体,不是用户代理直接呈现的“程序输出”,该用
{"id":1,"name":"Alice"}) - ❌ 错误:Response: 200 OK(混入解释性文字 "Response: ",语义污染;应拆成 Response: 200 OK)
是内联元素,多行内容会塌陷,必须配
默认不保留换行符和多余空格。写成 Line1\nLine2,浏览器渲染出来就是 Line1 Line2(中间一个空格)。
- ✅ 正确:
<samp>Traceback (most recent call last):File "main.py", line 12, in <module>print(x)NameError: name 'x' is not defined</module></samp>
- ❌ 错误:Line1Line2(语义断裂,样式难统一,且屏幕阅读器无法识别为连续输出)
- ⚠️ 注意:旧版 Safari 对
<samp> 的字体继承不稳定,建议显式加 <code>style="font-family: ui-monospace, monospace;"</code></samp>
样式必须手动加,浏览器默认几乎没用
浏览器对 的默认样式仅可能设 font-family: monospace,但不保证换行、不保留空格、无背景、无内边距——它不是“等宽字体开关”,只是语义容器。
- 必须显式声明字体:
samp { font-family: ui-monospace, SFMono-Regular, Consolas, 'Liberation Mono', monospace; } - 单行输出建议加
white-space: nowrap; overflow-x: auto;防折断 - 多行输出靠
保留格式,<samp> 只负责语义;不要给 <samp> 加 <code>display: block</code> 强行换行——破坏内联语义,干扰可访问性树</samp></samp>
- 别用 包含 、
或 <var>——<samp> 里嵌 <kbd>逻辑不通(系统输出不会包含键盘按键)</kbd></samp></var>
动态插入或服务端渲染时,HTML 转义不能漏
不自动转义 HTML 特殊字符。如果内容来自用户输入或日志接口,<script>alert(1)</script> 会真实执行。
- 服务端返回的 JSON 或错误信息,需先对
、<code>>、&做 HTML 实体转义,再塞进 - 前端 JS 动态插入时,禁用
innerHTML;改用textContent,或框架的安全插值(如 React 的{JSON.stringify(data)}) - 敏感内容(如 token、路径)不能直接放进去—— 没有隐藏机制,右键“查看页面源代码”就能看到全量文本
$)、或非原始输出的修饰,整个标签就失效了。它只认“纯输出”,不多不少。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











