设计系统
全站那套颜色、字号、间距、组件的公开文档。这一页不是截图——
下面每一个色块的名字和值都是从真实样式表里现读出来的,
每一个按钮、徽章、骨架屏都用全站正在用的那些 class 真渲染。
改了 CSS,这一页跟着变;改不动它,也就没法让它过期。
读的是 base.html 里那条完整的加载链(共
5 份,顺序也从模板现读),不是只读 main.css——
后面的样式表会覆盖前面的同名 token,只读第一份就会印出一批站上根本没在用的值。
被覆盖掉的都摆在下面「token 出处与冲突」里。
每格的「实测值」由浏览器 getComputedStyle 当场读取,
所以切到夜航模式时数值会跟着翻,你可以直接验证这一点。
色板 50 个色彩 token · 共 87 个 token
底纹是透明度检查格:--gold-wash、--red-light
这些本身是半透明的,压在纯色底上看不出来,而「它是透明的」正是用它时要知道的事。
标着 别名 的那些是用 var() 指过去的向后兼容名,不是独立色值——
它们存在是因为老模板里还引着旧名字,收敛到一个真值上比全站改名安全
(--text-lighter 那一行改一次就修好了 82 处不过 AA 的小字)。
每格下方的比值是该色对当前卡片底色的实测对比度,由浏览器当场算,
不是从注释里抄的;标绿的过 WCAG AA 正文线 4.5:1,标灰的是图形/底色类
token(本来就不该拿去写小字)。
字阶 12 / 14 / 16 / 20 / 28 / 44
每一行都用它自己那一级的字号真渲染。
--fs-base 和 --fs-md、--fs-lg 和
--fs-xl 当前是同一个值——这不是写错,是两套命名(语义级 / 尺寸级)
并存的结果,收敛到同一个数比全站改名安全。
最右一列是长辈模式(html.elder)下这一级会变成多少:
整套字阶整体上抬,而不是只放大正文。
间距 8px 网格,紧凑处允许 4
条的长度就是这一级的实际像素值。规范第四节定的是 8px 网格:
所有 margin / padding 走 8 的倍数,--sp-1(4px)是唯一的例外,
留给图标与文字之间那种贴合的缝。
圆角、阴影与字体栈 都只有两档,禁止新造
阴影只有常态和 hover 两档。阴影色不用纯黑:纸面是暖白
#FAF8F4,压中性黑会把暖调压成脏灰,所以阴影往表面色相偏
(取墨色的暖褐向),并拆成近/远两层。中文标题不走网络字体——
实测一个首页要拉 22 个分片 / 1.7MB,手机端首屏被拖到 12.8 秒,改用系统衬线后回到 1.8 秒。
| token | 值 | 示例 |
|---|---|---|
--r | 10px |
|
--r-sm | 6px |
|
--radius | var(--r) |
|
--radius-sm | 10px |
|
--radius-full | 999px |
|
--radius-lg | 20px |
|
--radius-md | 14px |
|
--shadow | 0 1px 2px rgba(56,46,28,0.04), 0 2px 6px rgba(56,46,28,0.03) |
|
--shadow-hover | 0 2px 4px rgba(56,46,28,0.05), 0 8px 22px rgba(56,46,28,0.06) |
|
--font-serif | 'Fraunces','Times New Roman','Songti SC','Source Han Serif SC','Noto Serif CJK SC','STSong','SimSun',serif |
AutoNews 2026 汽车 |
--font-display | 'Fraunces',Georgia,'Times New Roman',serif |
AutoNews 2026 汽车 |
--font-body | 'PingFang SC','Microsoft YaHei',-apple-system,'Segoe UI',sans-serif |
AutoNews 2026 汽车 |
--font-mono | ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace |
AutoNews 2026 汽车 |
--ease | cubic-bezier(0.4,0,0.2,1) | — |
--ease-out | cubic-bezier(0,0,0.2,1) | — |
组件清单 下面每一个都是真 class 真渲染
class 名标在每组上方,去 static/css/main.css 里能搜到同名规则。
按钮每屏最多一个主行动(规范第五节);黄底上永远只放深字——
白字压主黄只有 1.63:1,是历史上最硬的那处伤,永久禁用。
| 媒体 | 报道数 | 质量分均值 |
|---|---|---|
| 示例媒体 A | 128 | 71.4 |
| 示例媒体 B | 96 | 63.8 |
如实说明:表格是这套系统目前唯一没收敛的组件——各页自己写。 摆在这里不是充数,是把缺口标出来。
三态全家福 空态 / 加载态 / 错误态
这三态是最容易被跳过、也最容易在答辩现场被点到的。三条各自的规矩: 空态要给下一步(一句引导 + 一个去处),不是只写「暂无数据」; 加载态用骨架屏而不是转圈——骨架屏预告了内容的形状,页面不会跳; 错误态要说清发生了什么并给重试,不许只靠颜色传达(规范第七节)。
还没有符合条件的报道
换个筛选条件 →这条链接抓不到正文
可能是源站要求登录,或原文已被撤下。文字本身说清了原因—— 颜色只是强化,不是唯一线索。
双主题对照 日间 / 夜航,同一组组件
左右两块是同一份标记,只是各自锁在一个主题下——夜航那侧靠
main.css 里 [data-theme="dark"] 那条不限元素的
属性选择器直接生效;日间那侧的 token 由取数层从 :root 现场生成,
同样不是手抄。按下面这个按钮可以把整页翻面,两块的相对关系不会变——
这正好证明它们各自锁得住。
token 出处与冲突 5 份样式表按加载顺序叠,29 处同名覆盖
这一节是做这一页时用浏览器实测逮出来的,不是设计出来的展示项。
当时页面上 --paper 在夜航下量到 #181512,
而 main.css 里写的是 #1A1714——差别不是渲染误差,
是 v2-shell.css 在 main.css 之后加载、
同名 token 由它说了算(那份文件的档头注释自己就写着这件事)。
一个只读第一份样式表的「设计系统」会印出一批站上根本没在用的值,
那正是这一页最该避免的失败。所以这里按真实加载顺序整条读,
上面每一格标的是生效值和它来自哪份文件;被盖掉的那些列在下面。
摆出来不是自曝其短——一套 token 有两个出处是这个仓库反复记录的那类漂移
(--paper-2 / --bg-subtle 都栽在同一个形状上),
能把它列全,本身就是这套系统还管得住的证据。
| token | 主题 | 先声明(被盖) | 后声明(生效) |
|---|---|---|---|
--gold-wash |
日间 | rgba(217,165,20,0.08)main.css |
rgba(217, 165, 20, .08)v2-shell.css |
--green |
日间 | #556957main.css |
#2E6B4Fv2-shell.css |
--radius-sm |
日间 | var(--r-sm)main.css |
10pxv2-shell.css |
--fs-xs |
日间 | 12pxmain.css |
11pxv2-shell.css |
--fs-sm |
日间 | 14pxmain.css |
13pxv2-shell.css |
--fs-base |
日间 | 16pxmain.css |
15pxv2-shell.css |
--on-invert |
日间 | #F5C518main.css |
#FAF8F4v2-shell.css |
--red-light |
日间 | rgba(181,84,59,0.08)main.css |
rgba(169,74,50,0.08)v2-shell.css |
--green-light |
日间 | rgba(94,114,97,0.1)main.css |
rgba(46,107,79,0.08)v2-shell.css |
--on-red |
日间 | #FFFFFFmain.css |
#fffv2-shell.css |
--paper |
夜航 | #1A1714main.css |
#181512v2-shell.css |
--card |
夜航 | #242018main.css |
#24211Cv2-shell.css |
--ink |
夜航 | #E8E2D6main.css |
#EDE8DCv2-shell.css |
--gold |
夜航 | #F0C040main.css |
#E8C040v2-shell.css |
--gold-text |
夜航 | #F0C040main.css |
#D4B030v2-shell.css |
--gold-light |
夜航 | rgba(240,192,64,0.1)main.css |
#3D3010v2-shell.css |
--gold-wash |
夜航 | rgba(240,192,64,0.06)main.css |
rgba(224, 184, 48, .12)v2-shell.css |
--green |
夜航 | #7FA882main.css |
#5AB88Av2-shell.css |
--red |
夜航 | #E07A5Fmain.css |
#E07860v2-shell.css |
--line |
夜航 | #2E2A24main.css |
#3A3530v2-shell.css |
--invert-bg |
夜航 | #E8E2D6main.css |
#EDE8DCv2-shell.css |
--on-invert |
夜航 | #1E1C18main.css |
#181512v2-shell.css |
--red-light |
夜航 | rgba(224,122,95,0.08)main.css |
rgba(224,120,96,0.15)v2-shell.css |
--green-light |
夜航 | rgba(127,168,130,0.1)main.css |
rgba(90,184,138,0.12)v2-shell.css |
--ink4 |
日间 | #8A8578v2-shell.css |
#726D60v2-local.css |
--fs-xs |
日间 | 11pxv2-shell.css |
12pxv2-local.css |
--fs-sm |
日间 | 13pxv2-shell.css |
14pxv2-local.css |
--ink4 |
夜航 | #7A7468v2-shell.css |
#8A8478v2-local.css |
--red-deep |
夜航 | #C86048v2-shell.css |
#CE664Ev2-local.css |
无障碍:对比度留档 从这几份样式表的注释里提炼,31 条
设计规范第一条就写着「所有对比度数字为脚本实测(tools/contrast_check.py),
不是目测」。这些数字一直躺在 CSS 注释里、从没在任何页面上露过面——
而它们恰恰是这套色板最值钱的部分:它们记的是每个色为什么是这个值,
以及上一个值错在哪。
两点如实说明:①下面是注释里当时留下的记录,色值后来又调过的话
这里的数字会比现值旧——所以色板那一节的比值一律由浏览器当场重算,
两处对不上时以当场算的为准;②--ink-4 这类图形专用色
按 WCAG 走 3:1 而不是 4.5:1,它的定义处写着「禁止用于正文小字」。
token 从 main.css、v2-shell.css、v2-home.css、v2-local.css、lens.css 按加载顺序现读,缓存 1 小时。
想看流水线现在什么状态,去
系统中心。