标签本身不能实现代码高亮,它仅是语义化行内元素,不保留换行缩进、不声明语言类型、不触发高亮库解析;必须与嵌套使用,并配合正确class(如language-js)、css主题和js库(如highlight.js)调用highlightall()或highlightelement()方可生效。

code 标签本身不能制作代码高亮插件——它只是语义化标记,不带任何解析、着色或语法识别能力。真要实现高亮,必须配合 pre 结构、语言标识、CSS 主题和 JavaScript 解析库。
为什么单独用 标签无法高亮
code 是纯行内元素,浏览器只给它加等宽字体,不处理换行、缩进、关键词匹配或颜色渲染。写成 <code><p>hello</p> 会被当作真实 HTML 解析(可能直接渲染出段落),而不是显示字符串。
- 它不保留空格和换行:多行代码会塌成一行
- 它不声明语言类型:
const x = 1对 highlight.js 完全无效 - 它不触发任何高亮库:所有主流库(highlight.js / Prism.js)默认只扫描
pre+code嵌套结构
必须用 <pre class="brush:php;toolbar:false;"> 嵌套结构
这是所有高亮库的硬性约定,不是可选项。只有 pre 能保留原始格式(缩进、空行、tab),只有 <code>code 能声明“这是计算机代码”,二者缺一不可。
- ✅ 正确:
<div class="app"></div>
- ❌ 错误:
<div>(无 <code>pre,不保留格式,也不被扫描) - ⚠️ 注意:
code内的、<code>>、&必须转义,否则浏览器先解析再高亮,DOM 已错乱 - 支持写法:
language-js、language-python、lang-css - 不支持写法:
js、Javascript、html5、bash-script - 不确定语言时可用
language-plaintext,强制禁用高亮但保格式 -
hljs.highlightAll()是否在 DOM 就绪后执行?放在里且没defer或事件监听,基本白搭 - CSS 主题文件是否加载成功?检查开发者工具 Network 面板有没有 404;只引 JS 不引 CSS,代码能显示但全是黑字
- 动态插入的代码块(如 Markdown 渲染后、AJAX 加载)是否手动调了
hljs.highlightElement(el)?highlightAll()不会自动监听 DOM 变化
class 值必须是 language-xxx 或 lang-xxx
highlight.js 不认 js 或 javascript 这类简写——它严格匹配标准前缀。写错等于没写。
高亮不生效?先查这三处
90% 的“引入了但没颜色”问题都卡在这三个环节,重装库不如快速验证:
precode 这个嵌套结构在 CMS、编辑器、模板引擎、前端框架各种干预下始终不被破坏——空格被删、标签被自动闭合、class 被覆盖、script 标签位置错乱,都会导致高亮静默失效。











