小程序里想用一款指定字体,开发第一反应是 @font-face 挂个远程地址,试完发现字体没换上来;改成本地打包,包体又超了。最后切了图,运营改一个字就得重新出一版。
这类反复,多半不是技术没做对,而是起点没分清:小程序里的“用字体”有好几种实现方式,每种在授权上落到不同的栏位,做法的限制也不一样。
猫啃网收录 839 款免费中文字体,能进小程序的不少,但能不能进包、能不能放到 CDN,是两个问题。
一、包体这道门槛先算清楚
主包体积上限在 MB 量级。 一款覆盖两万多汉字的黑体,全量文件常在五到十五兆之间,直接放进去就超限。子集化到几百个字,文件落到几十到两百 KB,才谈得上进包。
每个字重是独立文件。 Regular 和 Bold 是两个文件,标题用粗档、正文用常规档,体积就翻倍。
包体是共享的。 图片、音频、第三方 SDK 都在抢同一份额度,字体能占的比例很小。为了一款字挤掉别的资源,通常不划算。
多端要按最严的那个算。 同一个产品发到不同平台的小程序,各平台对单包大小的限制不同,做预算取最小值。
中文字体的体积上限很低。 这也是为什么小程序里更常见的是标题用字体、正文用系统字体,而不是全站统一。
二、远程加载在小程序里的三个差异
域名要先登记。 远程字体走网络请求,字体所在域名需要在小程序后台配置为合法域名,且必须是 https。没配好,请求会失败,控制台有日志,用户端只是看到另一款字。
接口是平台给的。 微信小程序提供 wx.loadFontFace,可以动态加载网络字体,global 参数为 true 时对全局生效;其他平台各有各的写法,支持范围和生效时机不完全一致。
首屏会回退。 字体是异步加载的,加载完成前显示系统字体,缓存策略两端不同,同一页面在 iOS 和 Android 上换字的时刻可能差一截,页面会跳一下。
与 App 的差别主要在这里。 App 可以在首次启动时把字体随包安装好,渲染稳定;小程序的加载时机更靠后,也更容易被平台策略影响。
失败要能看见。 在加载回调里做一次标记,缺字或加载失败时记日志,比等用户反馈“字不对”要好。
三、把字体文件放 CDN 供下载,是“再分发”
性质变了。 打进小程序包,是随产品分发;放在公开可访问的 CDN 上,任何拿到地址的人都能下到字体文件本身,这属于向公众提供字体软件。
多数声明没写这一层。 “免费商用”通常指用字形出图,不包含把字体文件对外提供下载。OFL 允许再分发,但要附许可文本,修改过的版本还要改名。
加签名、限来源也一样。 文件最终还是到了用户设备上,按分发看待更稳。
真要远程加载,先看协议。 商业字体的内嵌授权一般不区分包里包外,按产品数量和安装量计;作者声明类则要单独问清楚“能否以网络字体形式对外提供”。
自建接口返回字体流也一样。 换个传输方式不改变结论,判断的还是文件有没有到客户端。
四、图片化与替代做法
标题图化。 把标题渲染成图片上传。省掉字体分发,代价是文字不可选、不可搜、缩放会糊,改一个字要重新出图。
服务端出图。 由服务端渲染文字再返回图片,字体不落到客户端,适合活动页标题这类内容固定的位置。
系统字体兜底。 正文用系统自带字体,只有品牌标题用指定字体,需要授权的范围能压到最小。
先看平台自带能力。 部分小程序框架提供了字体加载接口或内置字体方案,能覆盖的场景先用起来,比自建链路稳。
双端截图核对。 图片化或远程加载之后,仍要在 iOS 和 Android 各截一版对照,尤其看字重和行高,两端的回退字体并不相同。
库里的几款适合放到小程序标题位:荆南波波黑 笔画圆、字面满,小尺寸下不散;猫啃网糖圆体 转折钝、气质亲和,适合消费类与生活服务;字库星球飞扬体 结构舒展,活动和 banner 上用得多。都是作者声明免费商用,能不能以网络字体形式加载,仍要按各自声明核。
五、授权说明
这里的“能用”,指字体文件以什么方式进入小程序。核验按三步走。
第一步,确认字体全名。 同系列多个字重、多个地区版本,授权按具体文件声明。带 GB、VF 这类后缀的与基础版不是同一份文件。
第二步,查协议类型。 常见几类:开源协议(SIL OFL、MIT、GPL)、作者声明免费商用、随包附带的免费商用声明,以及带保留字体名称条款的授权。开源协议文本公开可查;作者声明的范围由声明自身界定,写法差别很大。
第三步,核使用场景。 排字出图、做印刷物料,通常都在允许范围内;把字体放进小程序包、放 CDN 供客户端下载、以接口形式对外提供字体文件,这三类要单独确认。同一款字在“出图”和“随包分发”上的结论可能不同。
留凭证。 字体全名(含版本与字重)、获取日期、许可页面截图和链接记在同一个文档里,和项目文件放在一起。字体更新后条款可能调整,有记录才好追溯。
六、FAQ
问:小程序里用系统字体,也要授权吗?
不需要。系统自带字体随操作系统授权,页面里调用属于正常使用,不涉及额外的字体授权。
问:只把标题做成图片,是不是就不用管授权了?
图片化省掉的是字体文件分发,不改变“用字形出图”这件事。宣传性质的图片仍要看字体声明是否允许商用。
问:小程序包很小,只放了子集文件,还要按整款授权吗?
要。子集化只改体积,不改授权性质,裁过的文件仍是那款字体的衍生件。
问:OFL 字体能直接放 CDN 给小程序加载吗?
可以,但要满足条件:随附版权声明与许可文本,修改过的版本更换字体名称,衍生件仍以 OFL 分发。放公开地址前,先确认这几点做没做到。
七、小结
小程序和 App 的差别不在“要不要授权”,在文件怎么到用户手上。进包受体积限制,远程加载受域名和平台接口限制,放 CDN 供下载则从“内嵌”变成了“再分发”,口径更严。判断时看三件事:文件最终去哪、协议有没有写这种形态、义务履行了没有。体积压不下来就先做子集化和标题图化,把需要授权的范围收窄。具体条款以协议原文与官方授权说明为准。
猫啃网

