code标签仅提供语义标识,不保留格式;多行代码必须嵌套在pre中,二者分工明确:pre保留空白符,code声明代码语义,且html字符需转义。

code 标签不能定义“代码块”,它只负责语义标识——告诉浏览器和辅助技术“这是一小段可执行的程序文本”,仅此而已。
为什么单用 code 会丢失缩进和换行
code 是行内元素,浏览器会像处理普通文字一样合并空格、忽略换行。哪怕你写成:
function add(a, b) {
return a + b;
}
实际渲染效果仍是:function add(a, b) { return a + b; }——所有格式全被压平。
- 它不保留任何空白符,
tab、\n、连续空格都会塌缩为单个空格 - 它不阻止文字在单词中间折行,长变量名可能被截断
- 它不提供语言上下文,
Prism.js等高亮库无法识别语法类型
多行代码必须用 pre + code 嵌套
真正能保留格式的是 pre,而真正能声明“这是代码”的是 code。二者职责分离,缺一不可:
-
pre管显示:保留换行、缩进、空格 -
code管语义:告诉屏幕阅读器“这不是普通文本,是源码” - 现代高亮库(如
highlight.js)默认只扫描pre > code结构
正确写法:
HTML5技术开发服务解决公司网站模板是一款提供为企业提供服务和解决方案的公司宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。
<pre class="brush:php;toolbar:false;"><code class="js">function greet(name) {
return `Hello, ${name}!`;
}</code>
HTML 字符必须转义,否则直接解析
在 code 或 pre > code 中出现 、<code>>、& 时,不转义就会被浏览器当作标签或实体处理,轻则内容消失,重则破坏 DOM。
- 想展示
<div id="app">,必须写成 <code><div id="app"> - JSON 中的
""要写成"<html>" - 漏转义
&是最常见错误,会导致后续 HTML 全部错位 - 没有
pre,它依然不保留换行,多行内容挤成一行 - 没设
font-family: monospace,部分系统可能用等比字体渲染,语义失效 - 没加
white-space: pre-wrap,长代码会在任意位置折行,可读性崩坏
别把 code 当样式容器用
有人给 code 加 background、border、padding,指望它变成“代码块卡片”。但问题在于:
真正可控的做法:始终用 pre > code 作结构基础,再统一加 CSS 控制溢出、tab 宽度和字体。
最容易被忽略的不是怎么加样式,而是先确认内容是否真的需要“多行”——如果只是函数名、命令或属性名,code 单独用就对了;一旦涉及换行缩进,pre 就不再是可选项。










