主题 token 清单
三层结构见 ADR-0020:语义层是根,元素层默认从语义层派生,作者只写想改的。
怎么改见换一套主题色。
语义层(18 个)
自定义主题绝大多数情况只需要改这里的几个值。
在 CSS 里的名字全部带 --pf- 前缀,例如 --pf-primary。
中文字体栈来自公认写法(https://snook.ca/archives/html_and_css/cjk-font-stack-notes)。行高取 1.75 而非浏览器默认的 1.5 —— 后者对中文正文偏挤。
命名一律语义化(danger 而不是 red),因为同一套 token 要同时服务亮暗两套主题:red 在暗色主题里可能其实是粉色,那种命名会自相矛盾。
元素层(16 个)
默认值全部从语义层派生,只能引用语义层,不能引用其它元素层。这 16 个就是全部,没有别的:
最后六个是图表层 —— ADR-0016 做 SVG 颜色替换时就是往这六个变量上换。它们属于元素层,规则完全相同。
四种提示块不区分底色,统一用 --pf-bg-subtle;区别只在左边那条 3px 竖线的颜色,直接取语义层的 --pf-info / --pf-tip / --pf-warn / --pf-danger。
也不渲染任何图标。 所以没有 --pf-callout-*-bg、没有 --pf-callout-*-icon,写了不起作用。
同理没有 --pf-code-fg —— 代码块的文字色直接继承正文的 --pf-fg。
改名的代价很高:替换规则、内置主题、文档三处要同时改。
深色一套
深色主题只覆盖语义层的十个颜色,字体、间距、行高、圆角全部沿用亮色那套:
深色是缺省,而且不看读者的系统设置。 浅色那一套只在打印时用得上(@media print)—— 深色底打出来是一整页油墨,而多数打印设置会直接把背景丢掉,于是浅色的字落在白纸上,等于打出一张空白。
两套都是纯 CSS,没有一行 JavaScript 参与。图表的颜色也在这一层,所以打印时图里的线和字跟着一起变浅。