你以为数学公式渲染只能靠 MathJax?今天 font-family: math 把这件事做进了浏览器——Baseline 2026 三引擎支持

你以为数学公式渲染只能靠 MathJax?今天 font-family: math 把这件事做进了浏览器——Baseline 2026 三引擎支持。

前端页面里出现数学公式,标准答案长期以来是引入 MathJax 或 KaTeX。几百 KB 的脚本,渲染还要等一次 JS 执行,公式里的行列式、积分符号、上下标全部靠脚本算出来——这些本该是浏览器的活。

Baseline 2026 把 font-family: math 加入了 CSS 的通用字体族序列,浏览器第一次能直接渲染数学符号,不需要任何运行时脚本。

font-family: math 是什么

math 是 CSS Fonts Level 4 新增的通用字体关键字,和 ui-sans-serif、ui-serif、ui-monospace 同级。你可以在任何 font-family 声明里把它加进回退栈:

.math-block {
  font-family: math, "Latin Modern Math", "STIX Two Math", serif;
}

浏览器会从系统里找专用的数学字体(Linux 上通常是 Latin Modern Math 或 STIX Two Math),这种字体天然知道怎么渲染:

  • 积分、求和、连乘等大型运算符要随内容伸缩
  • 括号和分隔符要根据嵌套深度自动拉伸
  • 上下标的间距和大小由字体设计规范决定,而不是 CSS 手调
  • 特殊运算符(可约分数、约等于号、箭头运算符)有独立字形

Before(手调行高和间距):

.formula {
  font-size: 1.1em;
  /* 上下标手动调位置 */
  vertical-align: sub;
  font-size: 0.7em;
  line-height: 1.2;
  /* 括号要靠左右各一个括号字符撑开 */
}

After(直接声明数学字体,浏览器搞定一切):

/* 数学内容块 */
.math-block {
  font-family: math, "Latin Modern Math", "STIX Two Math", serif;
  font-size: 1.2rem;
}

/* 行内数学 */
p em {
  font-family: math, serif;
}

配合 MathML 使用

font-family: math 最标准的用法是配合 <math> 元素,这是 HTML 原生的数学标记语言:

<math>
  <mrow>
    <mi>x</mi>
    <mo>=</mo>
    <mfrac>
      <mrow>
        <mo>-</mo>
        <mi>b</mi>
        <mo>±</mo>
        <msqrt>
          <mrow>
            <msup><mi>b</mi><mn>2</mn></msup>
            <mo>-</mo>
            <mn>4</mn><mi>ac</mi>
          </mrow>
        </msqrt>
      </mrow>
      <mrow><mn>2</mn><mi>a</mi></mrow>
    </mfrac>
  </mrow>
</math>

加上 CSS:

math {
  font-family: math, serif;
  font-size: 1.2em;
}

浏览器现在能正确渲染这个二次方程求根公式,包括分数、平方根和伸缩括号,全部原生完成,不需要任何 JS 库。

和 MathJax 的体积对比

方案 体积 首次渲染 依赖
MathJax 3 ~300KB gzipped JS 执行后才渲染(FOIT) 无
KaTeX ~200KB gzipped 快很多,但仍需 JS 无
font-family: math + <math> 0KB 浏览器直接渲染(无 FOIT) 现代浏览器

实际页面中如果只有零星公式,font-family: math 完全够用;如果有大量复杂排版(矩阵、分段函数、证明推导),MathJax 仍是更完整的方案,但 CSS 字体层的加入可以减少回退栈里对它的依赖。

规范与浏览器支持

CSS Fonts Level 4 的 math 通用字体族于 2026 年 1 月随 Baseline 2026 进入 Newly Available,Chrome、Firefox、Safari 三大桌面版浏览器均已支持。规范地址:https://www.w3.org/TR/css-fonts-4/#font-family-math。

接下来可以做什么

页面上有数学公式的地方,把 font-family: math 加入回退栈的第一位——如果只有几个简单公式,直接去掉 MathJax 依赖;复杂公式保留 MathJax 作为 fallback,CSS 字体层兜底,不需要 JS 的场景直接走浏览器原生渲染,FOIT 完全消失。

评论区

0 条评论

登录后可评论。

阿柯·前端架构 12 阅读