化学式与数学符号需严格使用<sub>和<sup>标签:H<sub>2</sub>O、SO<sub>4</sub><sup>2−</sup>(电荷用Unicode减号),顺序为先<sub>后<sup>;嵌套无效,复杂公式应改用MathML或KaTeX。

化学式里怎么写 H2O 和 SO42−
必须用 <sub> 包氢原子个数、氧原子个数,用 <sup> 包电荷数——顺序不能颠倒,且电荷符号要用 Unicode 减号 −(U+2212),不是 ASCII 连字符 -。
常见错误:SO<sub>4</sub><sup>2-</sup> 渲染为 “SO₄²-”,视觉上像“减号”但语义错乱;正确写法是 SO<sub>4</sub><sup>2−</sup>。浏览器默认不校验字符编码,但屏幕阅读器和学术数据库会依赖准确的 Unicode 表达。
-
H<sub>2</sub>O合法,H<sub>2</sub>O<sub>2</sub>也合法(过氧化氢) -
CO<sub>2</sub>正确,CO2(无标签)丢失化学语义,SEO 和无障碍支持弱 - 离子电荷必须紧贴元素/基团右侧:
Na<sup>+</sup>✅,<sup>+</sup>Na❌(语义断裂)
数学幂次与下标索引:x2、an、log10x 怎么写才对
<sup> 和 <sub> 在数学中只表达单层位置关系,不参与运算解析。它们的渲染顺序就是 HTML 的书写顺序:先 <sub> 再 <sup> 才能得到 xᵢ² 这类复合效果。
错误写法:x<sup>2</sup><sub>i</sub> 渲染为 “x²i”,不是数学意义上的 “xᵢ²”;正确写法是 x<sub>i</sub><sup>2</sup>。
立即学习“前端免费学习笔记(深入)”;
-
log<sub>2</sub>(8) = 3✅(底数 2 是下标,括号和等号是普通文本) -
log<sub>2(8)</sub> = 3❌(把 “2(8)” 整体当底数,语义错误) -
a<sub>n+1</sub>✅(整个表达式是下标),但a<sub>n</sub>+1是 “aₙ + 1”,不是 “aₙ₊₁” - 复合幂如
a<sup>n+1</sup>必须完整包裹,拆成a<sup>n</sup>+1就变成 “aⁿ + 1”
为什么 <sub><sup>2</sup></sub> 会失效
嵌套 <sub> 和 <sup> 虽语法合法,但浏览器解析时会扁平化结构,W3C 验证器报错,屏幕阅读器可能跳过或误读。更关键的是,它破坏了数学语义层级——比如 <sub><sup>2</sup></sub> 想表达“下标里的上标”,实际既不是标准化学式,也不是通用数学记号。
真实场景中几乎不需要这种嵌套。需要多级标记(如 aₙ₊₁²)时,<sub>/<sup> 已超出能力边界,应切换到 MathML 或 KaTeX。
- 富文本编辑器常自动剥离嵌套标签,保存后只剩外层
<sub>或<sup> -
<pre>或等宽字体环境里,<sub>垂直偏移容易错位,建议改用 CSSfont-variant-position: sub; - 脚注编号必须配
id和引用锚点,单写<sup>1</sup>不具备可跳转性
什么时候该放弃 <sub>/<sup> 改用 MathML 或 KaTeX
只要公式含分式、根号、求和号 ∑、积分 ∫、括号自动缩放,或需上下标精确定位(如 ai2 要求 “i” 在右下、“2” 在右上),<sub>/<sup> 就不再适用。
它们本质是语义标签,不是排版引擎。强行用它们拼复杂公式,结果往往是:视觉错位、语义污染、复制粘贴失真、无障碍支持归零。
- MathML 提供完整语义树,KaTeX 输出可配置
aria-label,二者都支持响应式缩放 - 简单单位(m2)、索引(xn)、电荷(Ca2+)仍推荐原生标签——轻量、语义清、无需 JS
- Markdown 中直接写
H<sub>2</sub>O安全有效,但别指望靠它撑起整篇《微积分讲义》
<sub> 和 <sup> 看似省事,实则埋下语义断裂、渲染不可控、无障碍失效三重隐患。真正要解决的不是“怎么让它看起来像公式”,而是“怎么让机器和人都能准确理解它”。



















