Datatype:把柱状图、折线图和饼图全部做进一个可变字体

字体
数据可视化
开源
前端
巧思
2026/10/4
·

阅读时间: 大约 8 分钟

Datatype:把柱状图、折线图和饼图全部做进一个可变字体

Datatype 官网首屏:DATATYPE 字样下方,一排柱状图、迷你折线、饼图全部由字体连字渲染,GitHub star 1,460,已上架 Google Fonts

数据可视化这个领域,过去十年的主流做法是”用 SVG 或 Canvas 画”。Frank Tisellano 做的 Datatype 走了一条几乎没人走的路:它是一个 OpenType 可变字体(variable font),你在文档里写下 {b:30,70,50,90} 这样的表达式,字体的连字替换(ligature substitution)就会把它替换成一个真正的柱状图。不要 JavaScript、不要图片、不要任何渲染库——一个 woff2 文件就是全部。本文基于其官方演示站 franktisellano.github.io/datatype 做一手分析。

一、它是什么:data as type

Datatype 的口号是 “Datatype is data as type”。它把图表压缩成三种文本表达式:

写法渲染成规则
{b:30,70,50,90}柱状图(bar)逗号分隔值,每个 0–100,最多 20 根柱
{l:10,50,30,80,20}迷你折线/sparkline逗号分隔值,每个 0–100,最多 20 个点
{p:65}饼图单个 0–100 的数,表示填充百分比

用法就是普通的 CSS:@font-face 引入 Datatype.woff2,给需要出图的元素指定 font-family: 'Datatype',然后直接在 HTML 里写表达式即可。图表和周围文字一样,跟随字号、字重,metrics 与正文字体对齐。

二、技术机制:连字替换 + 双轴可变字体

为什么能”写字就出图”?靠的是 OpenType 的连字特性:平时我们熟悉的连字是把 fi 合并成一个字形;Datatype 把 {b:30,70,50,90} 这串字符序列注册成一个自定义连字,排版引擎匹配到后直接替换成预先画好的图表字形。

它同时是可变字体,有两个轴:

  • Width(wdth)轴:控制图表密度——柱子更疏还是更密;
  • Weight 轴:控制笔画粗细,也就是柱、线的视觉权重。

Datatype 的双轴控制条(Width 50 / Weight 400 / Size 48px)与从 14px 到 64px 的同一段表达式逐级放大效果

上图上方是官方的实时控制台:拖动 Width / Weight 滑杆,图表立刻变形;下方是同一段 {b:30,70,20,90} 从 14px 到 64px 的逐级渲染——因为图表本质是字形,它和文字一样在任何字号下都是矢量清晰的。

三、它适合的场景:JS 跑不起来的地方

官方给的用例很有针对性:任何能放文字的地方都能放图表。最典型的是下面这个股票观察列表——30 天趋势列里的 sparkline 完全由字体渲染,和价格、涨跌幅排在一张表格里:

Datatype 在真实表格里的样子:AAPL/MSFT/NVDA/TSLA/AMZN 五行,30D TREND 列是纯字体渲染的迷你折线

官方还演示了图表混排进衬线、无衬线、等宽三种正文里:“Revenue grew steadily… {l:15,28,40,52,63,78,88,95,74,58} before a seasonal dip”——趋势线就像一个普通词一样嵌在句子里。这正是它的价值主张:

  • 邮件、PDF、终端、静态报表:这些场景里 JavaScript 跑不起来、图片又常被客户端屏蔽,一个字体文件就能让数据”长”在文字里;
  • 嵌入正文的迷你趋势:不需要坐标轴、不需要交互,只要一个”涨了还是跌了”的视觉印象,sparkline 比真图表合适。

四、关键口径:官方与 koala 都明确写出的硬边界

这个项目的局限和它的创意一样有名,而且官方和项目库点评都没有回避:

  1. 数据范围被焊死在 0–100:每个值必须是 0 到 100 的整数百分比,没有对数轴、没有任意量程——它表达的是”相对高低”,不是真实数值;
  2. 最多 20 个点:超过这个数的序列,这个字形方案装不下;
  3. 完全静态、零交互:不能 hover、不能 tooltip、不能联动——它是一个”打印出来的图标”,不是活的可视化;
  4. 单色:图表颜色跟随文字色,做不出多系列对比配色;
  5. 字体加载失败就露馅:如果 woff2 没加载成功,用户看到的就是 {b:30,70,50,90} 这串原文;复制粘贴、屏幕阅读器读到的也是这串表达式而不是图表——它对可访问性并不友好,图表没有替代文本语义;
  6. 它是技术创意,不是图表库:koala 项目库点评说得很到位——“可以把它理解成一种技术创意的体现”。

五、优势与局限

优势:

  1. 极致轻量:一个 woff2 文件干掉一个图表库 bundle,首屏零 JS 成本;
  2. 无处不在:邮件、PDF、终端、RSS——只要能嵌字体/能显示文字,就能出图;
  3. 排版一致性:图表作为字形与正文 metrics 对齐,不会像 <img> 那样在邮件里跳版;
  4. 可变性:wdth/weight 双轴让同一套图表适配不同字号与场景。

局限:

  1. 表达力天花板低:无交互、单色、0–100、20 点上限,只够”氛围型”数据点缀;
  2. 可访问性与复制粘贴是硬伤:屏幕阅读器读不到图表语义,复制出来是语法串;
  3. 依赖字体加载:font-display: swap 不当会闪或露馅;
  4. 不是通用方案:dashboard、BI 这些要坐标轴、要交互的场景,它根本不对路。

六、谁该关注它

  • 做邮件/newsletter 里的数据点缀的运营/前端:sparkline 跟着正文走,图片被拦也不塌;
  • 做 PDF/静态报告/终端仪表盘的工程师:不想为了几个迷你图引一个 JS 库;
  • 喜欢”把一个老技术玩出新花样”的字体/排版爱好者:它是可变字体能力的一次漂亮展示。

但如果你要做的是带坐标轴、可下钻、能联动的正经数据看板,继续上 ECharts/D3——Datatype 的定位从来不是替代它们,而是占领它们到不了的那些”只能放字”的缝隙。

参考来源