标签本身不识别编程语言,仅作纯语义标记;语法高亮需配合嵌套、language-xxx类名、html实体转义及高亮库css/js共同实现。

为什么标签本身不识别编程语言
code 是纯语义标签,浏览器只把它当作“这段是代码”,不会自动做语法高亮、缩进保留或语言特化渲染。它不解析 class 名,也不读取 <code>lang 属性——哪怕你写成 <code lang="python">,浏览器也完全无视这个 lang 值。
class="xxx" 是事实标准,不是 HTML 规范
主流高亮库(Prism.js、highlight.js)都约定用 class 属性来识别语言类型,且格式固定为 language-python、language-js、language-html 等。这不是 W3C 标准,但所有库都认它。
- 写成
class="python"或class="js"—— Prism.js 默认不识别,得额外配置别名 - 写成
class="python py"—— 可同时兼容多个别名,更稳妥 - 写成
class="lang-py"—— highlight.js 支持,但 Prism.js 默认不认,容易漏高亮 - 必须和
pre搭配使用:单独code标签无法保留换行与缩进,高亮后视觉错乱
实际嵌入时最容易漏掉的三件事
光写对 class 不够,下面这三项缺一不可:
- 原始代码中的
必须手动转义为 <code><,否则浏览器会尝试解析成标签,导致截断或报错 -
pre必须包裹code,不能反过来,也不能省略:<pre class="brush:php;toolbar:false;"><code class="html">...</code></pre> - 引入 Prism.js 时,要同时加载 CSS + JS;如果只加了 CSS,代码会显示但无颜色;只加 JS 则完全没反应
不同语言标识的实际效果差异
标识名影响的不只是颜色,还有词法分析逻辑。比如:
-
language-js能正确识别const、模板字符串、可选链?.;换成language-bash就全当命令行处理,高亮全错 -
language-html会高亮标签名、属性、双引号内的值;language-xml对自闭合标签更宽容,但不识别<script></script>内联 JS - JSON 内容建议用
language-json,它会校验结构并高亮true/null等字面量;用language-js会把大括号当代码块,可能误判语法错误
真正麻烦的不是写错 class,而是 class 对了但内容没转义、或没套 pre——这时候页面看着像代码,实则 DOM 已被浏览器破坏,连复制都出问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











