MathML 在 HTML 中直接写公式可行,但仅 Firefox 和 Safari(macOS/iOS)原生渲染;Chrome/Edge 默认无渲染引擎,需 MathJax 等库支持,否则显示空白或乱序。
行,但只在 Firefox 和 Safari(macOS/iOS)里能原生渲染;Chrome/Edge 默认不支持 math 标签的排版逻辑,会显示为空白或乱序结构。不是浏览器“不识别标签”,而是没实现 MathML 渲染引擎——这点常被误判为“代码写错了”。
常见错误现象:<math><mi>x</mi><mo>+</mo><mn>1</mn></math> 在 Chrome 里看不见,检查元素却能看到 DOM 存在;右键“查看网页源代码”也正常——问题出在渲染层,不是语法或路径问题。
mfrac 或上下标对齐MathJax 是目前兼容性最稳的选择,它能把 <math> 块自动识别并重绘为 SVG 或 HTML-CSS,不依赖浏览器原生能力。
关键点:必须等 MathJax 完全加载后再让页面显示公式内容,否则会出现“先闪白后渲染”的抖动。推荐用 tex-svg 输出模式(默认),比 chtml 更适合中文混排且字体对齐更准。
立即学习“前端免费学习笔记(深入)”;
<head> 里插入:<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
MathJax.typeset(),只要公式写在 <math> 标签内,加载完就会自动处理MathJax.typeset([domElement])
defer 或 async 脚本冲突:确保 MathJax 在所有公式 DOM 渲染完成后才执行KaTeX 渲染速度比 MathJax 快 2–3 倍,但它**不解析 <math> 标签**,只接受 LaTeX 字符串。想用 KaTeX,就得把 MathML 手动转成 LaTeX,或改用 $$...$$ 包裹。
典型误用:<math><msup><mi>a</mi><mn>2</mn></msup></math> 直接扔给 KaTeX 不会生效——它压根不看这个标签。
$$a^2$$ 或用 JS 调用:katex.render("a^2", element)
text{速度} 可能字体错位,建议配合 font-family: "sans-serif" 强制统一maction(交互式公式)、mtable 的复杂对齐控制仅当公式极度简单(比如单个分数、上下标)且目标用户全是现代浏览器时,可考虑不用 JS 库。但要注意:CSS 无法精确控制字间距、行高缩放、运算符加粗一致性,数学语义也丢失了。
例如:a<sub>1</sub> + b<sup>2</sup> 看似可行,但 <sub> 的垂直偏移量各浏览器不一致,乘号 × 和加号 + 的宽度、高度、粗细也不匹配数学排版规范。
mfenced(自动加括号并适配大小)frac{a}{frac{b}{c}},CSS 模拟会崩塌成一行role="math" 和 ARIA 属性,视障用户读不出“a 分之 b”