飞立(plui)主题与令牌

所有颜色、间距、字号、圆角、阴影、层级、过渡都来自 src/css/base/tokens.css 的 CSS 自定义属性。改令牌就能改全站,不需要重写组件。


1. 四层结构

层写什么举例
1. 原始层 raw具体值,写死--plui-color-gray-100: #f3f4f6;
2. 语义层 semantic语义别名,引用原始层--plui-color-text: var(--plui-color-black);
3. 组件层 component组件专用参数--plui-control-height: 2.5rem;
4. 主题层 theme预留,覆盖语义层深色模式(见下)

工具类引用的是语义层与原始层,组件引用的是组件层。组件里不写死具体色值,因此换主题时组件不需要改。


2. 语义令牌清单

令牌用途默认值
--plui-color-bg页面底色white
--plui-color-bg-soft次级底色(表头、卡片头)gray-100
--plui-color-bg-inverse反色底black
--plui-color-text正文色black
--plui-color-text-strong强调正文色black
--plui-color-text-muted次级文字gray-600
--plui-color-text-faint弱化文字、占位符gray-400
--plui-color-text-inverse反色文字white
--plui-color-inverse反色前景(图标等)white
--plui-color-border主边框black
--plui-color-border-muted弱化边框、表格线gray-300
--plui-color-border-strong强调边框black
--plui-color-focus焦点环black
--plui-color-backdrop模态遮罩rgba(255,255,255,.86)

3. 暗色模式(v0.3.0 已实现)

src/css/base/dark.css 里已经写好了暗色主题:覆盖语义层令牌,组件与工具类自动跟随,不需要改任何组件样式。

两种启用方式:

<!-- 手动指定主题(data-plui-theme="light" 可强制浅色,覆盖系统设置) -->
<html data-plui-theme="dark">
<!-- 不加属性时自动跟随系统 prefers-color-scheme -->

如果要把暗色主题拆到自己的样式表里,也可以只覆盖语义层:

[data-plui-theme="dark"] {
  --plui-color-bg: #111827;
  --plui-color-bg-soft: #1f2937;
  --plui-color-text: #ffffff;
  --plui-color-text-strong: #ffffff;
  --plui-color-text-muted: #9ca3af;
  --plui-color-text-faint: #6b7280;
  --plui-color-border: #ffffff;
  --plui-color-border-muted: #374151;
  --plui-color-backdrop: rgba(0, 0, 0, 0.86);
}

注意工具类里的 bg-gray-100 这类原始色阶不会跟着变,深色适配请用语义类(bg-soft、text-muted、text-faint、bg-inverse、text-inverse)。暗色下语义色(红绿蓝黄)会自动提亮一档,保证边框与文字的对比度达标。


4. 语义变体怎么用

极简风格要求不做大面积色块,所以语义色只出现在文字与 1px 边框上:

组件表现
.plui-btn-success / danger / warning / info白底,文字与边框用语义色
.plui-btn-primary黑底白字
.plui-btn-secondary白底黑边
.plui-alert-success 等白底,左侧 4px 语义色竖条
.plui-card-danger 等只改卡片边框色
.plui-badge-success 等白底,语义色边框与文字
.plui-progress-bar-success 等进度条填充色(面积小,可接受)

需要自定义语义色时,改 tokens.css 里的 --plui-color-green-600 这类原始令牌即可,全部组件同步变化。


5. 排版刻度

字号与行高成对定义,工具类里 text-lg 同时带上字号与行高:

类字号行高
text-xs0.75rem1rem
text-sm0.875rem1.25rem
text-base1rem1.5rem
text-lg1.125rem1.75rem
text-xl1.25rem2rem
text-2xl1.5rem2rem
text-3xl1.875rem2.25rem
text-4xl2.25rem2.5rem

leading-* 可以单独覆盖行高。

本页由 build/build-docs.mjs 从同名 Markdown 生成,请修改 .md 后重新生成,不要手工编辑本文件。