Font类是管理字体资源的核心抽象,负责封装字体加载、参数配置和尺寸测量等底层逻辑,支持跨平台适配、变量字体解析、异步校验、缓存优化及可靠文本测量。

Font类是程序中管理字体资源的核心抽象,它不直接渲染文字,而是封装字体加载、参数配置和尺寸测量等底层逻辑。在不同平台或框架中,Font类的实现细节虽有差异,但核心职责一致:把字体从文件或系统中读取出来,设定样式参数,并提供可靠的方式预估文本在界面上占据的空间。
字体加载与变量绑定
Font类通常支持通过路径、名称或描述结构加载字体。例如,在支持可变字体的环境中,它能解析font-variation-settings中的轴参数(如wght、wdth),将字重、字宽等连续变化映射为具体实例。加载过程常包含异步校验——检查字体文件是否存在、格式是否合法、是否支持当前语言字符集。部分实现还会缓存已加载字体对象,避免重复解析开销。
- 传入字体路径(如
"./fonts/inter-var.woff2")或系统字体名(如"San Francisco") - 接受变体配置,如
{ wght: 600, wdth: 95 },由Font类转为底层渲染引擎可识别的指令 - 失败时返回空实例或抛出明确错误,便于上层做降级处理(如回退到系统默认字体)
文本尺寸测量的可靠性保障
测量不是简单调用ctx.measureText()就完事。Font类需应对多种干扰因素:字体未就绪时的回退行为、连字(ligature)与字距(kerning)影响、多行换行边界、以及不同渲染后端(Canvas、DOM、Skia)的像素对齐差异。因此,成熟的Font类会内置一致性策略,比如统一使用离屏Canvas+固定字号采样,或复用Ruler机制创建隐藏元素比对尺寸变化。
- 提供
measureText(text, options)方法,支持指定字号、行高、最大宽度等约束 - 对同一字体多次测量结果保持稳定,不受页面CSS或父容器样式污染
- 可选启用“预热”模式:提前触发字体加载并测量典型字符串(如"MWI"),减少首次排版延迟
跨平台适配的关键抽象点
操作系统对字体的管理方式不同:Windows依赖GDI的HFONT句柄,macOS使用Core Text的CTFontRef,Web环境则靠CSS Font Loading API或FontFaceObserver。Font类的作用正是屏蔽这些差异,向上提供统一接口。例如createFont()在桌面端可能调用GDI函数,在Web中则生成new FontFace()并注册加载监听。
- 构造时不立即加载字体,而是延迟到首次测量或渲染时才初始化资源
- 内部维护字体就绪状态(loaded / loading / failed),供UI组件判断是否可安全绘制
- 支持查询基础元信息:是否支持粗体/斜体、是否有符号字形、是否含CJK字符块等










