news 2026/11/4 1:20:42

一个字体文件装下 7 种字重:思源黑体可变字体的部署与调参实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个字体文件装下 7 种字重:思源黑体可变字体的部署与调参实战

一个字体文件装下 7 种字重:思源黑体可变字体的部署与调参实战

【免费下载链接】source-han-sansSource Han Sans | 思源黑体 | 思源黑體 | 思源黑體 香港 | 源ノ角ゴシック | 본고딕项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans

思源黑体(Source Han Sans)是 Adobe 与 Google 联合发布的开源泛中日韩字体项目,其可变字体版本把 250–900 的全部 7 种字重装进了单个字体文件,font-weight 可以取区间内的任意整数。下面先从一个真实的部署场景切入,再拆开字体内部的配方表,最后给出三步部署流程和进阶自定义玩法。

多语言站点要面对 35 个字体文件时

想象你的资讯站同时覆盖简中、繁中(台)、繁中(港)、日文、韩文 5 个语言版本。按静态字体的传统部署方式,每个语言变体都要 7 个独立 OTF 文件(ExtraLight 到 Heavy),一来就是 35 个文件,转成 woff2 后还是 35 个,每个都要在 CSS 里单独注册。

更麻烦的坑在后面:浏览器只会匹配你显式注册过的字重。样式表里写font-weight: 550,它只会就近取 500 或 700,中间无法过渡。当"常规段落"和"稍强调的小标题"排在一起时,字重跳变肉眼可见。可变字体的思路是:只注册一条 wght 轴(OpenType 里的字重轴,可以理解为字粗细的滑块轨道),声明范围 250–900,浏览器就对任意整数做轮廓插值。35 个文件因此收缩到每个语言 1 个,再按站点用到的字符做子集化,体积还能进一步压缩。

一个文件装下 7 种字重:designspace 配方表里写了什么

项目源码的核心是 designspace 文件(可以理解为字体的"配方表")。打开 SourceHanSans-VF.designspace 能看到三层信息:

  • 轴定义:wght 轴 minimum=250、maximum=900;
  • 插值坐标:7 个<map>把 ExtraLight/Light/Normal/Regular/Medium/Bold/Heavy 静态字重分别映射到 0/160/320/390/560/780/1000 的轴坐标;
  • 主母版:只列了 250 端(ExtraLight)和 900 端(Heavy)两个真实轮廓文件,中间 5 个字重全靠这两个母版按坐标插值生成。

源文件侧每个字重对应一套 VF 源:比如 cidfont.VF.SC.unhinted 存简体中文字形轮廓(unhinted 表示未加 hinting 提示,利于插值精度),配套的 features.VF.SC 存 OpenType 特性规则。5 个语言版本(日文基底 SourceHanSans、SC、TC、HC、K)各有自己的 designspace,结构一致。

三步完成 web 端字体部署

  1. 拿预编译产物。项目随 release 提供预编译的 Variable OTF/TTF/WOFF2,直接下载即可,无需本地编译。
  2. (可选)转 woff2。手上只有 OTF 时,用 fonttools 自带的 otf2woff2 转换:
otf2woff2 --no-hinting SourceHanSansSC-VF.otf
  1. 声明字重区间,然后随意取值:
@font-face { font-family: "ShanHei VF"; src: url("./ShanHeiSC-VF.woff2") format("woff2-variations"); font-weight: 250 900; font-display: swap; } .article h2 { font-weight: 600; } /* 没有 600 文件,浏览器自动插值 */ .article p { font-weight: 380; }

样式表里font-weight从此是个连续量:420 给你"比 Regular 略重"的感觉,550 落在 Medium 和 Bold 之间,都不需要额外文件。在浏览器开发者工具里选中元素,Font 面板会显示字体带 variable 标记、计算后的字重轴值,可以当场验证插值生效。

进阶玩法:HW 半角版与自定义字重 🛠

如果你做的是数据密集的界面(股价列表、表格页),全角 CJK 字形的视觉密度偏高,项目专门提供 HW(Half-Width,半角)版本:wght 轴只覆盖 400–700(Regular 到 Bold),每个语言一份独立的 designspace,例如 SourceHanSansHWSC。另外 designspaces 下的 Subset/ 目录还给了 CN/TW/HK/JP/KR 五个地区子集版本,适合按地区收窄字符集、进一步缩小文件。

想改规则时,动的是配方表而不是轮廓:在<map>里加一行映射、调整 xvalue,或增删母版文件来改变轴的覆盖范围,再用 AFDKO 重新构建即可。.unhinted源文件就是留给这一步改动的"毛坯房"。

周边工具链与关键文件

静态版本的完整构建流程记录在 COMMANDS.txt 里,值得逐行读一遍:makeotf负责编译,其中-cs 25选择简体中文字形变体(同一个"直"字在 CN/JP/KR 里写法不同,-cs 的编号决定取哪一套),-ch指向字符集清单文件,比如 UniSourceHanSansCN-UTF32-H 列出了该语言版本收录的全部码位,otf2otc则把 5 个语言变体打包成一个 ttc。安装后字体列表里显示的菜单名,由 FontMenuNameDB.SUBSET 这类 name DB 文件控制。整套代码以 OFL 协议开源,商业产品里直接使用没有授权问题。

适合谁

需要多语言多字重、或界面要动态调字重的开发者,可变字体版本值得上;只在单端用 Regular 的,装一个静态 OTF 更省事,不必为用不到的能力买单。

【免费下载链接】source-han-sansSource Han Sans | 思源黑体 | 思源黑體 | 思源黑體 香港 | 源ノ角ゴシック | 본고딕项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 1:20:38

Centos连接FinalShell

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/4 1:20:18

163MusicLyrics 指南:三步补齐本地音乐库的 LRC 与 SRT 歌词

163MusicLyrics 指南&#xff1a;三步补齐本地音乐库的 LRC 与 SRT 歌词 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 163MusicLyrics 是一款开源歌词下载工具&#xf…

作者头像 李华
网站建设 2026/11/4 1:18:41

HarmonyOS实战教程:300+示例源码,从HelloWorld到仿抖音应用

HarmonyOS实战教程&#xff1a;300示例源码&#xff0c;从HelloWorld到仿抖音应用 【免费下载链接】harmonyos-tutorial HarmonyOS Tutorial. 《跟老卫学HarmonyOS开发》 项目地址: https://gitcode.com/GitHub_Trending/ha/harmonyos-tutorial 想做鸿蒙应用&#xff0c…

作者头像 李华
网站建设 2026/11/4 1:17:02

Folia 歌词动画播放器完整安装指南:Windows、Mac、Linux 一次装好

Folia 歌词动画播放器完整安装指南&#xff1a;Windows、Mac、Linux 一次装好 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款基于…

作者头像 李华