字体家族
sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Noto Sans SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif
mono: ui-monospace, "SF Mono", Menlo, Consolas, "PingFang SC", monospace
不加载任何 web font。 这是硬规定,理由在品牌书里。各平台落到的字:macOS / iOS → 苹方,Windows → 微软雅黑,Android → 厂商中文字(多为思源黑体系),小程序同宿主。四端字形不同但字号、字重、行高相同,观感一致。
字阶:桌面端
| 样式 | 字号 / 行高 | 字重 | 字距 | 颜色 | 用途 |
|---|---|---|---|---|---|
title |
26 / 32 | 700 | −0.01em | foreground |
页面主标题,一页一个 |
heading |
19 / 26 | 700 | foreground |
区块标题、弹窗标题 | |
body |
14 / 22 | 400 | foreground |
正文 | |
input |
15 / 22 | 500 | foreground |
输入框里的值 | |
label |
13 / 18 | 500 | foreground |
表单标签、表格主字段、按钮文字 | |
meta |
12 / 16 | 400 | muted-foreground |
时间、责任人、分组小标题、指标后缀 | |
chip |
12.5 / 16 | 700 | 状态色 | 状态芯片 | |
th |
11 / 16 | 600 | +0.06em | subtle |
表头 |
metric |
28 / 32 | 600 | −0.02em | foreground |
指标大数字 |
code |
13 / 20 | 400 | foreground |
工单号、编号、代码(mono) |
字阶:现场端
| 样式 | 字号 / 行高 | 字重 | 用途 |
|---|---|---|---|
f-title |
28 / 35 | 700 | 页面主标题 |
f-heading |
21 / 30 | 700 | 区块标题 |
f-body |
17 / 27 | 400 | 正文。下限,不要再小 |
f-body-large |
20 / 32 | 400 | 大字模式正文(应用内一键切换) |
f-input |
17 / 24 | 500 | 输入值 |
f-label |
15 / 20 | 500 | 表单标签 |
f-meta |
13.5 / 20 | 400 | 辅助信息 |
f-chip |
12.5 / 16 | 700 | 状态芯片(与桌面同尺寸,必须带图标) |
大字模式:正文 17 → 20,标签 15 → 17,行高同步。做成应用内设置而不是依赖系统缩放——系统缩放会把布局撑坏,应用内切换只换字号 token。iOS 上仍要响应 Dynamic Type,但把 f-body 绑到 .body 基准,放大时随之放大,不截断。
规则
- 层级靠字号和字重,不靠颜色。 颜色只表示「必读 / 辅助 / 不必读」三级。
- 数字一律等宽:CSS
font-variant-numeric: tabular-nums,SwiftUI.monospacedDigit(),ComposefontFeatureSettings = "tnum"。台账列里不等宽的数字对不齐,扫一眼就乱。 - 中英文混排:中英文之间、中文与数字之间空一格(「3 号机组」「共 156 条」「Qwen3.5 模型」);全角标点;单位紧跟数字不空格(「1.4天」写成「1.4 天」——这条例外:中文单位前空格,
%℃不空)。 - 行长:正文一行不超过 40 个汉字(约 560px),说明文字、错误块、AI 回答都受此约束;表格不受限。
- 字重只用 400 / 500 / 600 / 700,不用 300 以下(中文字体细体在低分屏上发虚)。
- 不用斜体(中文没有斜体,浏览器会做假倾斜);强调用 500 字重或
foreground对比muted-foreground。 - 标题不加省略号截断;过长换行。表格单元格可截断,但整行可 hover 显示 tooltip。