复合字体工坊

匹配规则

同一个 font-family 下可以写多条 @font-face。浏览器为每个字符从最后一条往前找,选第一条 unicode-range 包含它、且字体里真有这个字形的规则。所以基础字体(汉字)写在最前,不限范围,负责兜底;半角西文、半角数字等字符类别写在后面接管各自的范围;例外字符写在最后,优先级最高。

字符类别行保留名称和必要的状态;各字符类别涵盖的字符可在「字符类别」说明及分组设置中查看;半角数字仅含 0–9,全角数字属于全角符号。预设卡片名称描述字体搭配,简繁与地区由标签区分。顶栏「分享」左侧的齿轮打开「设置」,校样的「显示」菜单控制预览。

字体名前的灰色闪烁点表示正在加载,红点表示加载失败;悬停或用键盘聚焦可查看说明与具体失败原因。状态对应当前预览实际使用的字体;连续模式读取整条可变字重轴的加载结果。加载完成后状态点隐藏,跟随其他字符类别的字体不另显示状态点。

预设与保存

列表首张「当前配置」卡片显示正在编辑的搭配,不受筛选影响。「存为新预设」会按当前主要字体组合填入可修改的名称,重名时自动加序号,可以直接保存副本。没有预设名称时,卡片也显示同一建议名称;已有名称保留。编辑自己的预设时,「保存修改」会在有修改时启用,再次点击确认后更新原预设。另存默认新建副本;输入已有名称时会提示,并需再次确认覆盖。

预设只保存在当前浏览器,不包含字体文件。筛选只作用于后面的预设列表;没有匹配项时仍可保存当前配置。切换预设前会提醒保存尚未保存的修改。保存失败时保留编辑内容和已有预设。

外观与校样颜色

顶栏齿轮里的「外观」可选浅色、深色或跟随系统。跟随系统时会响应系统配色的变化。校样工具栏的「显示」菜单可用色板或十六进制色码自定义背景色与文字颜色,即时应用到校样和度量图;编辑区与工具栏继续使用主题配色。离开颜色框时,无效输入会恢复为上一次有效颜色。「恢复默认颜色」会清除自定义颜色,恢复当前主题的默认颜色。颜色可独立设置,切换主题时保留自定义值。 设置与显示弹层按功能分组,标签、控件和说明使用统一的对齐与间距。

这些是当前浏览器的外观偏好,刷新、换预设、撤销或导入分享后会保留,不随预设保存或分享,也不影响导出的 CSS、应用代码和字体文件。

分享配置

顶栏「导出」左侧的描边「分享」按钮会复制当前配置的链接,无需先存为预设。链接保留点击分享时的字体、大小、字重、基线、可变轴、字符分组、例外字符、排版及导出设置;后续编辑不会改变已经发出的链接。

链接不包含字体文件、自定义校样正文、历史记录或其他已存预设。接收方会看到内置校样,可以继续编辑或另存预设,也可撤销导入恢复原配置。Google Fonts 会重新加载;本机字体需要接收方安装,上传字体需要重新提供文件,缺失时在字体页提示。配置直接保存在链接片段中,无需服务器存储;链接过长时会提示,剪贴板不可用时可手动复制。

大小:size-adjust

size-adjust 按百分比缩放一个字体的字形和度量。Chrome/Edge 92+、Firefox 92+、Safari 17+ 支持。它也会放大这个字体的上伸、下伸度量,line-height: normal 时行距可能不均匀,建议写固定的 line-height。

「基础设定」里的大小和基线,以及「各字重」里的大小,都可直接输入数值,或用输入框右侧的上下箭头每次增减 0.5。键盘按住 Shift 再按 ↑↓ 时,每次增减 5。清空输入框可恢复继承值。箭头在悬停或聚焦时出现,触屏上常显;显示与隐藏不会改变数字的对齐位置。

基线偏移需要 JS

@font-face 没有基线描述符。同一行里所有字形都对齐在字母基线上,CSS 无法按字体单独移动。工具里的「基线」会在导出时附带一段脚本,把对应字符包进 <span> 用相对定位移动,不影响行高。想要纯 CSS,就把所有基线保持为 0。

自动调整

「基础设定」右上角的「自动调整」会按字符类别匹配独立指定的字体,汉字基础字体保持不变。跟随项继承来源字符类别的结果,已有的大小、基线覆盖保留。所有需要匹配的字体与参照相同时,提示无需调整,不改现有设置。结果可微调,整次操作可一次撤销。操作提示从屏幕底部滑入,停留后淡出;系统开启「减少动态效果」时直接显示。

参照。西文以汉字字体自带的西文为参照,兼顾大写字母和小写 x 的高度,缺少字母时按汉字字面估算;独立数字对照本次调整后的西文数字。假名、全角标点、符号、注音及独立的中西共用标点,对照汉字字体中的同类字符。假名、数字、注音比较对应字符的高度;全角标点、符号与共用标点按对应字符的字身宽度匹配大小,再匹配字形的位置,保留标点的小字面与地区位置。不是把所有字符都放大到汉字高度。

例外字符。仅自动匹配原属同一字符类别、最多 64 个字符的独立例外组,以原字符类别当前字体中的相同字符为参照。混合字符类别、未归类字符、范围过大或缺少可靠对应字形时,保留原设置并提示。任一待测字重缺少参照时,保留该字符类别的全部设置,避免基础设定的改动间接影响未能测量的字重。

字重与基线。分档模式在最终大小下比较同类字符的笔画粗细,选择更接近的可用字重,并避免同一字体的粗体比正文更细。西文使用 H、h 的主干,其他字符类别使用多个对应字符的横纵截面估算;它们都只是视觉匹配的起点。支持 Google Fonts 和带字重轴的本机/上传字体;连续模式、单一字重或量不到可靠笔画时保留粗细。按选中的导出字重测量,并始终测量 400:400 写入基础设定,其他档的大小与基础相差至少 0.5 个百分点时单独保存。基线只保存基础值,小于 2% em 的偏移设为 0;网页偏移需要 JS,字体文件直接写入位置。旧版浏览器仍可自动匹配字重;若无法测量所选的其他可变轴,该字符类别保留原设置并提示。

局部重置与限制。「各字重」字符类别标题旁的重置按钮恢复该字符类别的基础大小 100%、基线 0 和最接近常规 400 的可用字重,并清除逐档大小、粗细与独立字体覆盖。保留基础字体选择、其他可变轴、其他字符类别、共享字体名映射、导出勾选及预览字重,可撤销。自动调整不会创造缺失字重,也不会改变导出勾选。字形风格、衬线反差及设计比例仍需在正文中判断,必要时手动微调或更换字体。

选择字体

字体库纳入随页面提供的官方元数据中所有标注支持简体中文、繁体中文、香港中文或日文的 Google Fonts 字族,并保留原有常用西文与韩文字族。更新元数据时目录一起更新,不在每次打开时实时抓取 Google 全站。列表字样只加载可见项,选中后再加载详细预览;无需预先下载全部字体。 排序入口位于列表上方、候选数量右侧,使用无描边按钮显示当前方式;筛选栏只保留筛选条件。 「字体库」合并 Google Fonts 与浏览器读取到的本机字体,标注来源,同名字体可分别选用。已知的本语言名称显示在英文名后,搜索别名明确标为别名;无可靠资料时保留原名。搜索名称、别名、本机完整名或 PostScript 名,忽略大小写、全半角、空格、连字符和下划线。默认按名称 A–Z 排列,可切换已知字重范围广到窄,未知范围置后。后来发现的字体追加到末尾;后台检查不移动已有候选,主动切换排序时重新排列。切换保留搜索、筛选与当前试看字体。 列表样张优先展示字体的主要文字:日文混排汉字、平假名与片假名,简繁中文、韩文和西文各用对应文字。Google Fonts 优先使用官方主要文字资料,本机已知名称作补充;语言未知时保留字符类别样张。右侧预览仍按正在编辑的字符类别显示。少量字重简写为 400/700。

列表与预览以分隔线区分,桌面为竖线、窄屏为横线。来源和字重信息位于列表项右上;窄列表会换到名称下方并靠右。分档只有一至两档时直接列出字重,更多档位显示数量与范围。未读取的本机文件只显示已发现字重,不推断连续或分档。 「含意大利体」筛选要求字体提供 Italic 款式或 ital 轴,不把 Oblique、单独的 slnt 轴或浏览器模拟倾斜算作意大利体;未知资料保留,不扫描所有字体文件。此筛选不改变导出设置。 页脚的「应用后自动调整以匹配汉字」默认勾选,只在确认使用字体后执行;取消对话框不应用。 覆盖筛选聚焦于简体汉字、繁体汉字、日文汉字、假名、全角标点、全角符号和注音;西文字母、数字与中西共用标点的缺字仍在选中字体后的校样检查中提示。 「字重类型」包含连续(VF)、分档,以及「支持粗体」。类型组内任选;支持粗体作为附加条件,须同时满足。风格包括黑体、宋/明体、仿宋、楷体、圆体、教科书体、手写及书法;使用已知设计和明确名称规则,支持多标签,不改变合成设置。字符类别中的汉字拆为简体、繁体与日文汉字,可同时选择,复用字体详情的代表字;它们表示字符覆盖,不代表当地字形标准。所选代表字符须全部确认覆盖;启用覆盖筛选时不显示未检查的字体,清除筛选可查看。Google Fonts 使用随页面附带的 CSS 范围,本机字体复用已完成的默认款式检查;不保证全字库均无缺字。新结果在下次搜索或筛选时应用,不在后台移除候选。列表与预览共用本机字重信息:汇总 Regular、Bold 等明确款式,读取字体后优先采用实际字重及连续轴范围,原地更新标签;不扫描所有本机文件,不自动重排。 手写筛选直接采用 Google Fonts 官方的 Handwriting 分类,不再归入“其他”。Zhi Mang Xing、Long Cang 和 Liu Jian Mao Cao 另依官方说明归入书法;可同时拥有多个风格。仿宋、楷体、书法等细分含名称推断,菜单内标明仅供参考;未知资料仍保留。 缺字在选字样张内以波浪线标记。基础设定只选择字体,粗细在「各字重」中调整。样张工具栏的字重和字号只用于试看。从某一字重行进入选字时,可直接指定该档使用的字体字重,也可选择替换该字符类别的全部字重。可变轴直接显示在右侧页脚,对这个字符类别的所有字重生效;点击「使用这个字体」后保存,关闭或取消不保存。

首次打开字体库时自动尝试读取本机字体,需要通过浏览器的字体访问授权;浏览器也可能要求本次点击触发读取。本页读取成功后复用结果,只有失败时显示重试;不支持接口的浏览器可直接在搜索框输入完整名称。读取结果按家族与款式分组,选择时再读取可变轴。右侧所选字体下方的「字体款式」用于选择 Regular、Bold、Italic 等实际款式,只有多个款式时才显示。名称不能通过 CSS local() 加载时,尝试用已授权字体的数据预览;CSS 导出仍使用字体名。字样加载、字符检查与缺字分别提示;字样失败不表示字体未安装。筛选优先使用已知资料与名称中明确的风格、粗体信息,不会因为未读文件就认定字体不支持粗体。未验证的完整名称可尝试选用,加载失败会明确提示。字体列表与访问到的数据只留在当前页面会话。 后台字形和字重资料更新时,保留正在编辑的表格输入,避免重绘打断输入。

字体文件可以拖入或选择,导入后留在本页的字体列表,可搜索并用于其他字符类别或字重;重复的相同文件不会新增一项。能读取名称表时显示正式字族及样式,否则显示文件名。无效文件不会覆盖当前选择。列表与文件只保留在当前页面内,重新载入后需再次提供;预设和分享不包含文件。

基础设定只选择字体,粗细在「各字重」中调整。样张工具栏的字重和字号只用于试看。从某一字重行进入选字时,可直接指定该档使用的字体字重,也可选择替换该字符类别的全部字重。可变轴直接显示在右侧页脚,对这个字符类别的所有字重生效;点击「使用这个字体」后保存,关闭或取消不保存。

样张初始文字按正在编辑的字符类别和校样语言生成,可直接输入、换行或粘贴;切换候选及「预览/信息」保留草稿。缺字只按当前样张检查,以和主页相同的波浪线标记;悬停可查看缺字与系统补字的说明,不再统计主校样的缺字。检查不能完成时,仅在信息页说明无法确认。工具栏将 B 字重控件与字号放在一起:点击 B 或数字展开滑杆,也可输入、按方向键或拖动图标。连续字体支持范围内的数值及 400/700 快捷刻度,分档字体只选真实档位,单档字体保持该档。字重与字号均只用于试看;基础设定的粗细在「各字重」中调整。输入框随内容、字体、字号和栏宽自动增高;高亮不改写输入值,不影响光标和中文输入法。重新打开恢复字符类别样张,编辑不进入预设、分享或导出。 校样正文可直接点击编辑。首次修改内置样本时自动新增并选中一份自定义文本,继续输入只修改同一份;内置样本保持原样。自定义文本可切换、删除并在此浏览器保存,新增按钮可复制当前文本。支持换行、纯文本粘贴、输入法和文字撤销/重做;文字不进入字体配置、分享链接或导出。字体列表以电脑和 Google 图标表示本机与 Google Fonts 来源,悬停显示来源及字重详情。

选择非汉字字符类别时,默认勾选「自动调整以匹配汉字」。确认使用后,只按该字符类别的参照规则调整所选字符类别;数字参照西文,其他字符类别保留各自用途与比例。可取消勾选以保留原调整。单档选择只调整该档的大小与可调粗细,不改字符类别共用基线。测量完成后一次应用,取消不保存;缺少可靠参照时仅选用字体并提示保留调整。字体和调整可一次撤销。

桌面左右等宽,分隔线居中,两侧分别滚动。对话框顶部是「本地字库 + Google Fonts/字体文件」页签,下方采用宽屏工作区:左侧以更大的字样浏览候选,右侧用分隔线区分并显示所选字体的预览与设置,两侧分别滚动,不添加栏标题。搜索框下方直接显示「来源/风格/字重/字符集」筛选栏,已选条件保持可见;来源和风格均可多选,同组内任一项匹配即可,不同组需同时满足;未勾选代表不限制该组。清除筛选保留搜索文字,窄屏自动换行。弹窗上下仅保留小边距,底部操作始终可见。搜索和完整名称输入共用一个框:没有结果时,按允许的来源提供明确尝试操作;输入一半不会加载候选。缺字在样张内标记,检查失败收在信息页。列表无外框,以行间分隔线区分候选,底部与工作区对齐。右侧以「预览/信息」切换样张和来源、字重、主要文字及覆盖详情;信息不再列西文字母、数字、韩文徽标和缺字图例。确认与取消固定在右栏底部,自动调整位于按钮上方。窄屏上下排列,在同一工作区滚动,底部操作保持可见。 字体库未选字体时右侧显示空状态;文件列表为空时隐藏右侧,拖放区占满整个工作区,说明位于区内。导入后恢复左右布局,拖放入口收紧。可变轴位于右侧页脚的确认按钮上方,桌面长轴列表单独滚动;窄屏轴设置随工作区滚动,确认按钮保持可见。支持可变轴的字体使用「使用此配置」确认,其他字体使用「使用这个字体」。

信息页按名称、字体特征、作者与授权统一排列,可显示中文、英文及字体内提供的日文等其他语言显示名、家族、款式、PostScript 名、来源、字重、当前来源的家族款式数、Unicode 字符数量、等宽与可变类型、当前文件大小,以及字体内的设计师、出品方、授权说明和网址。字符数统计映射到非零字形的 Unicode 字符,不是字形总数。只在查看信息时读取所选本机文件;导入文件复用已有数据,不扫描整个本机字体库。TTF、OTF 和 WOFF 可读取完整表资料;WOFF2 及 Google Fonts 网页来源缺少完整资料时标为「当前来源未提供」,已读取但字体没有填写的字段标为「字体里没有提供」。不把搜索别名当成字体内名称,不用字形数冒充字符数,不推断授权。代表字符检测不等于完整语言支持;字体元数据只保留在本页,不进入配置、分享或导出。拖放区的文件类型及本地读取说明组成一个紧凑文字组,与选择按钮间隔 24px;导入后入口收紧。 桌面上字体名、款式及「预览/信息」页签固定,仅页签下方内容滚动;窄屏仍使用工作区统一滚动,详情标题与页签在详情范围内置顶。代表字符检测改用与其他资料一致的两列字段,显示每组支持数与检测总数;斜体信息归入字体特征。本机字体的预览字重可切换同一家族、相同倾斜和宽度款式中已安装的真实字重文件,支持已知分档;可变字体仍使用连续范围。不合成粗体,不扫描未选中的字体二进制;资料未知的字重不作猜测。预览不改变所选基础款式和配置。家族只有粗细区别时不再重复显示款式下拉框,存在斜体或宽窄等其他区别时保留。配套斜体文件入口位于配置页脚,说明其用于导出斜体、不会改变当前正体预览;只对西文、数字、共用标点或自定义字符类别等适用选择显示,已配对文件可继续替换。导入失败保留原配对,关闭或取消不应用。 字体内提供的其他语言显示名逐项列出;资料限制、风格推断、代表字符检测与授权说明合并在信息页顶部。选字窗口不再显示标点位置标签及名称解释。

搜索只筛选列表,并显示候选数量;没有结果不表示加载失败。列表外的完整名称需明确尝试,手动输入时不会检测半个名字。获取字体、加载字样、等待本机授权与失败分别显示状态;字样等待超过 12 秒会停止等待提示并提供重试,迟到结果不会覆盖新的选择。失败时保留候选与配置;未确认的本机字体仍可选用。字符检查失败显示未知,不当作全部支持。

本机字体:local()

local() 按字体的完整名或 PostScript 名匹配,而不是字族名。例如写 Hiragino Sans GB W3 或 HiraginoSansGB-W3,而不是 Hiragino Sans GB。Safari 只允许网页使用系统预装字体,自己安装的字体在 Safari 里不生效。访客电脑上没有这个字体时,会回退到前面一条规则。

Google Fonts

中日韩字体在 Google Fonts 上被切成上百个分片,每片有自己的 unicode-range。导出时工具会把分片范围和字符类别范围求交集,只保留需要的分片,所以西文字符类别通常只剩一两条。url 指向 fonts.gstatic.com,正式项目建议下载后自托管。

导出多个字重

字体名下用「连续字重」「分档字重」说明可用的粗细:连续字重可在范围内输入任意值,例如「连续字重 200–900」;分档字重只有固定档位,例如「分档字重 400、700」,档位较多时显示最轻到最重的范围,悬停可查看完整档位。这些标注说明字体本身的能力;导出模式在「各字重」里另选。范围无法准确读取时不推测,已知存在可变轴但字重范围不明时标为「字重范围未知」。跟随其他字符类别的字体信息看来源行。

连续模式下,预览或网页设为 font-weight: 450,可变字体就显示 450,不必只选 400 或 500;超出字体支持范围时使用最近的端点,静态字体使用最接近的一档。可变字体的单独粗细调整暂不生效,切回分档即可恢复。

滑杆统一使用与按钮一致的黑白配色,横向轨道两端与滑块中心及刻度对齐。连续模式在表格左侧拖动两个滑块,按 100 一档选择导出范围。范围外的行保留并置灰,已有调整不会丢失;范围内仍包含中间字重。精确端点可在「导出」中输入。键盘方向键每次移动 100,配合 Shift 每次移动 10。拖动在松手时保存,可一次撤销,Esc 取消本次拖动。表格只有大小列时,使用「汉字大小」「半角西文大小」等单行表头;有静态字体可调粗细时,保留字符类别与粗细、大小两级表头。

分档模式下,在「各字重」里勾选要导出的字重(导出对话框里也能选),每个字重各生成一组规则。点击已勾选行的空白处即可预览该字重,不会改变导出勾选。点击校样工具栏的 B 图标或字重框可展开滑杆,也可直接输入数字或拖动 B 图标;数字会实时同步。分档模式只预览已勾选的字重,滑杆显示对应节点;连续模式在导出范围内无级调整,范围内的 400(Regular)和 700(Bold)刻度可点击跳转。范围端点与常用刻度统一显示在滑杆下方,过近的端点文字会省略。取消当前预览的字重时,自动切到最近的已勾选字重;输入范围外或未勾选的值,确认时也会收进可用范围。工具里设定的字体对应 400;其他字重里,Google Fonts 的字体按同样的差值换算(例如 500 的字体在 700 时取 800),没有这个字重就取最接近的;本机字体会按名称推测粗体(例如 W3 → W6、Regular → Bold),并在这台电脑上检测。各字体的粗细分布并不一致:「各字重」一览表里可以按字重单独调整各字符类别的大小和粗细。可变字体的粗细可直接输入任意数值,右侧箭头或键盘 ↑↓ 每次增减 10,Shift + ↑↓ 每次增减 100;静态 Google Fonts 字体按 100 档调整,缺档时跳到下一个可用字重。本机字体名、字体文件,或者只给这个字重换的字体,点那一格,或者用这一行末尾的「⋯」菜单里的「换字体…」,在「选择字体」里指定。Google Fonts 的静态字体只列出它实际有的字重;灰色是推算的值,蓝色是单独设定的,选回灰色那一档就取消单独设定。

各字重的规则没法合并。CSS 变量(var())在 @font-face 里无效,浏览器会直接丢掉这条描述。同一个 font-family 里,如果有的规则写 font-weight: 700、有的写 400 700,实测 Chrome 会把它们分成两组,只用其中一组,合成就失效了。

真正占体积的是汉字字体在 Google Fonts 上的上百个分片。「基础字体:引用 Google Fonts」会用 @import 直接引用 Google 的 CSS,把这个字体排在 font-family 的第二位,自己只写需要覆盖它的字符类别,导出的 CSS 通常只有几 KB。服务器一般会用 gzip 压缩 CSS,导出区显示的 gzip 体积更接近实际传输量。字体文件只按页面用到的字符下载,与 CSS 长度无关。

分档模式下,在字体选择器里提交修改或改变跟随关系时,会检查各行实际使用的字体和粗细,自动取消明确超出已知字重范围的导出勾选。网页和字体文件的选择分别检查;有效的单独映射、范围内的静态缺档,以及范围未知的字体都会保留。取消勾选不删除该行的调整,可重新勾选;换字体和自动取消可一起撤销。若某组已选字重全部越界,则保留原勾选并提示手动确认。换成范围更大的字体不会自动勾回字重;连续模式的选择与范围不自动调整。

斜体

没有斜体规则时,<em> 和 <i> 里的字全部由浏览器模拟倾斜:西文明明有斜体也不用,汉字也会歪掉。所以默认导出斜体,每组规则另有一份 font-style: italic:西文用真正的斜体(Google Fonts 的 Italic、上传的斜体文件、本机的「… Italic」,或者可变字体的 slnt / ital 轴);没有斜体的字符类别用正体文件、也声明成 italic,浏览器就不会去模拟。基础字体用 @import 引用时,Google 那边只有正体,所以使用规则里加了 font-synthesis-style: none,让它同样保持正体。

可变轴

「选择字体…」里可以调可变字体的其他轴,例如宽度、笔画粗细(GRAD)、光学尺寸。Google Fonts 只保留请求里写了的轴,其余固定在默认值、从文件里去掉,所以调过的轴会加进请求,文件大约变成两倍。固定的值写在 @font-face 的 font-variation-settings 里,Safari 不认这一行,会按默认值显示。光学尺寸选「跟随字号」时,浏览器按实际字号设定 opsz;实测 Chrome 用的是 size-adjust 放大之后的字号,正好对应西文实际显示的大小。

「字体」页签「字体特性」里的「数字样式」「斜线零」对应 font-variant-numeric,写在使用规则里(Chrome 52+、Firefox 34+、Safari 9.1+),页面上还可以按元素改,比如只让表格用等宽数字。效果取决于显示数字的那个字体有没有这些 OpenType 特性:工具会检测它默认是哪种数字,选了它没有的样式时会提示。Google Fonts 的网页字体删掉了大部分特性,没有旧式数字和斜线零。

行高度量:合成字体的行高(line-height: normal)和基线在行里的位置,浏览器取自负责空格的那条规则,也就是半角西文的字体,而且是 size-adjust 放大之后的。导出时默认给基础字体以外的规则写上汉字字体的 ascent-override、descent-override、line-gap-override;size-adjust 会把它们再放大一次,所以写的是除过之后的值。这样排出来和纯汉字字体一样。Chrome 87+、Firefox 89+ 支持,Safari 会忽略。

繁体中文:台湾和香港

「适用语言」的繁体中文分成台湾和香港两种。导出时用 :is(:lang(…)) 把常见写法都包进去:台湾版匹配 zh-Hant、zh-TW,香港版匹配 zh-HK、zh-Hant-HK 和澳门的写法。原因是 :lang(zh-Hant) 匹配不到 lang="zh-TW":浏览器不会从地区推出文字。简体中文同样会加上 zh-CN、zh-SG。

两地的写法和大陆不同:标点在字身正中(大陆、日本靠左下),字形也按各自的标准。工具会量全角标点的位置,并按字族名判断字形的地区:和校样的语言不一致时在字符类别表里提示,和适用语言不一致时在导出区提示。思源、Noto CJK 这类一个文件含多个地区字形的字体会按 lang 切换,所以测量时也带上语言。

字符类别表里有一行「注音符号」,也负责声调号 ˊ ˇ ˋ ˙:它们原本属于西文的码位,不归过来就会用西文字体显示。法语等的重音字母(é、à)是另外的码位,不受影响;需要的话可以在齿轮里把声调号改回半角西文。

App 代码(实验性)

iOS、Android 和 Flutter 没有复合字体。导出里的「App 代码」生成一段 Swift、Kotlin 或 Dart:按字符类别把文字切成片段,每段分别设字体、大小和基线偏移,字符范围和网页导出完全相同。代码里的字体名称(PostScript 名、文件名、family)是推测的,要对照 App 里实际打包的字体改;混用不同大小的字会让行高变化,没有网页那样的行高修正;Flutter 不能单独移动基线。三种代码都编译过(Kotlin 对着 Android API,Flutter 通过 analyze 和 test),切分结果也核对过,但没有在真机上看过排版效果,发现问题欢迎在 GitHub 提交 PR 或 Issue。字体授权允许的话,把生成的字体文件打包进 App 效果最完整。

字体文件

「字体文件」页签把合成字体做成真正的字体(TTF、WOFF2、OTF,可任选),给 Figma、Keynote、Word 这类不支持合成字体的软件用。做法和导出的 CSS 一一对应:每条规则的字体只取它负责的字,按大小缩放、按基线上下平移,再合并成一个字体;行高度量用汉字基础字体的。生成在浏览器里进行(Pyodide + fontTools),字体不会上传到任何服务器。

源字体:Google Fonts 的字体从 google/fonts 仓库下载完整文件,网页接口给的切片去掉了大部分 OpenType 特性;上传的字体直接使用;本机安装的字体通过浏览器的本机字体接口读取(Chrome、Edge,需要授权)。CFF 轮廓的 OTF 会转换成 TrueType 曲线(误差不超过 1/1000 em),字体集合(TTC)只取用到的那一款。只有 OFL、Apache 等允许修改的许可可以直接合并,许可不明的字体(包括系统自带和商用的字体)要先确认有权修改,生成的文件只给自己用。字体微调(hinting)会去掉,只影响 Windows 上的小字号。浏览器会在中西文之间自动加 1/8 em 的间距,其他软件不会。

格式:合并只能在 TrueType 曲线上做,所以 OTF 是最后从合并结果转换成 CFF 曲线得到的。浏览器里能跑的字体库(fontTools)不能合并中日文 OTF 常用的 CID 结构 CFF,也不能把 TrueType 和 CFF 曲线放进同一个字体;能直接合并 CFF、生成 CID 结构 OTF 的 Adobe AFDKO 是 C 程序,不能在浏览器里运行。所以源字体是 CFF 时,会经过「三次曲线 → 二次曲线 → 三次曲线」的转换(误差不超过 1/1000 em,印刷上看不出),生成的 OTF 也不是 CID 结构。现在的软件都能正常使用,个别要求 CID 字体的老印刷流程可能不接受。

为什么不用 font-size-adjust

font-size-adjust(Chrome 127、Firefox 92、Safari 17 支持双值语法)也能统一字号,但它对元素里的每个字体都生效:把西文调到目标大写高的同时,汉字字体也会按它自带的西文度量被缩放。它也不能按字符类别分配字体,解决不了引号归属。更关键的是,MDN 指出它和 @font-face 的 size-adjust 同时出现时,size-adjust 不再起作用。所以使用复合字体的元素上不要再写 font-size-adjust。校样的「对照其他做法」里可以切换到这个做法比较效果。

CSS 原生 CJK 排版属性

这些属性和复合字体互不冲突,可以叠加使用。「排版」里的设定会写进导出的使用规则;对齐、对齐方式、段落换行属于页面版式,在校样的「显示」菜单里,只用于预览,不导出。下表是 2026 年 10 月 MDN 兼容性数据里各浏览器开始支持的版本。

属性作用Chrome / EdgeFirefoxSafari
text-autospace汉字、假名与西文、数字之间自动加 1/8 em。Chrome 只支持 normal / no-autospace,实测初始值是 no-autospace(规范写的是 normal),需要显式写出。14014518.4
text-spacing-trim全角标点挤压:相邻标点合并、行首开括号半角化。目前只实现了 normal / space-all / space-first / trim-start。123——
word-break: auto-phrase按词组(文節)换行,避免把一个词拆在两行。只对 lang="ja" 和 lang="ko" 生效。119—预览版
line-break禁则强度:strict 更严格地禁止行首出现小假名、长音符等。586911
text-wrap: pretty避免段落末行只剩一两个字。Chrome 只调整段落最后四行;Safari 会重排整段、把每行排短,并让标点悬挂失效。117—26
text-wrap: balance让各行长度接近,适合标题。11412117.5
text-justify两端对齐的方式:inter-character 在字间分配空隙。14555—
hanging-punctuation标点悬挂到版心外。Safari 里 text-wrap 为 pretty 时不悬挂。——10
text-box裁掉首行上方、末行下方的半行距。ideographic 边缘目前只有 Firefox 支持。13315418.2
text-combine-upright: all竖排中的纵中横,需要把数字包进单独的元素。digits 值没有浏览器实现。484815.4

来源:MDN text-autospace、text-spacing-trim、font-size-adjust、MDN browser-compat-data、Chrome:CSS 国际化新特性。

@font-face · unicode-range · size-adjust GitHub