samp仅用于标记程序运行后用户实际看到的原始输出文本,须同时满足:是程序直接生成的文本、真实显示在终端/控制台/GUI中、上下文明确为“输出”;不可嵌套code,需配等宽字体与pre-wrap样式。
标签不是“用来显示程序输出”的万能容器,它只适用于**用户实际看到的、未经修饰的原始输出字符串**。用错场景会破坏语义、干扰辅助技术,甚至让屏幕阅读器把错误提示读成代码。
samp?看三个硬性条件必须同时满足以下三点,samp 才是合法选择:
比如执行 git status 后终端打印的:
<samp>On branch mainYour branch is up to date with 'origin/main'.nothing to commit, working tree clean</samp>
✅ 符合全部条件;❌ 把 { "error": "timeout" } 包进 samp 就不合法——那是 API 响应体,得用 <pre><code class="json">。
立即学习“前端免费学习笔记(深入)”;
samp 和 code、pre 到底怎么分?三者语义不可互换,混用等于在 HTML 里写错标点:
code:一小段**可执行/可引用的代码片段**,如 document.querySelector()、ls -la
pre:仅保留空格与换行的**纯格式容器**,无语义,常套 code 或 samp
samp:**只能是输出结果本身**,且不能嵌套 code(W3C 明确禁止)正确组合示例:
<p>运行 <code>npm install eslint</code> 后得到:</p><samp>+ [email protected] 123 packages from 78 contributors</samp>
⚠️ 错误写法:<samp><code>Error: ENOENT</code></samp> —— samp 里塞 code 是验证失败项。
samp 很危险浏览器对 samp 的默认样式不可靠:有的渲染为等宽,有的继承父级字体,有的连空格都不保留。不显式声明,就等于放弃可读性:
samp { font-family: ui-monospace, 'SFMono-Regular', monospace; }
white-space: pre-wrap;,否则换行丢失display: inline 默认行为——长输出溢出容器时不会自动折行没配 CSS 的 samp 在暗色主题下可能直接变成浅灰字+白底,肉眼不可读。
samp
samp 本身不提供交互能力,也不支持隐藏/显示切换。强行用 JS 控制 hidden 属性或 display,会导致语义断裂和可访问性失效:
<details><summary>响应头</summary><pre><code>HTTP/2 200...</code></pre></details>
<code aria-label="API key 已脱敏">••••••••</code>
console.log() 更安全、更轻量真正难的从来不是怎么写标签,而是每次敲下 <samp> 之前,先问一句:这串文字,此刻正躺在哪个终端里、被哪个用户的眼睛盯着看?