Elements

指南

主题

明暗、主题色、场景、密度、对比度——五个维度,一次调用。

整个库的观感由根元素(<html>)上的五个属性决定:data-theme、data-accent、data-scene、data-density、data-contrast。@bysages/core 的主题引擎负责写入和保存,静态页面也可以直接手写这些属性。

ts
import { applyTheme } from "@bysages/core";

applyTheme({
  mode: "dark",        // "light" | "dark" | "system",默认 "system"
  accent: "zhusha",    // "auto" | "ink" | "qinghua" | "celadon" | "zhusha" | "feicui" | "jilan" | "qingjin",默认 "auto"
  scene: "civic",      // "auto" | civic | enterprise | studio | tech | cupertino | expressive | fluent | material | sketch | missive | dispatch | metric | new-york
  density: "spacious", // "compact" | "default" | "comfortable" | "spacious",默认 "default"
  contrast: "high",    // "auto" | "normal" | "high",默认 "auto"
});

调用后它与当前主题合并、写入属性,并返回完整的 Theme。主题保存到 localStorage 的 bs-theme 键,传 persist: false 可以不保存;initTheme() 负责恢复,getTheme() 读取当前主题。

#明暗

data-theme="light" 是宣纸,data-theme="dark" 是暖调的漆黑——不用纯 #000,同样的色相关系提到更亮的层级。"system" 跟随系统的 prefers-color-scheme。

#主题色

data-accent 决定主要操作块和焦点光晕的颜色。语义色(成功、警告、危险、信息)是固定的,不随主题色变。

accent颜色说明
ink(或不设)单色墨默认,庄重
qinghua钴蓝青花
celadon水绿天水碧
zhusha朱砂红印泥红,常用于政务
feicui翡翠绿翡翠,家书场景的颜料
jilan霁蓝霁蓝,公牍场景的颜料
qingjin青金青金石蓝,格律场景的颜料
auto场景的默认搭配见下表

#场景

data-scene 调整整站的形状、密度、动效和光的方向,不分叉组件。十三个场景分两类,每个场景有一组默认的主题色和对比度:

scene名称面向默认主题色默认对比度
civic典章政务和大龄用户:直角、48px 大目标zhushahigh
enterprise信笺安静的商用界面,适合长时间使用qinghuanormal
studio雅集设计和编辑类产品,留白多celadonnormal
tech司南现代工具类,精密高效inknormal
cupertino圆融移动端,柔和轻盈qinghuanormal
expressive飞白活泼,动效优先zhushanormal
fluent流水克制的生产力套件qinghuanormal
material格物靠投影分层的立体风格celadonnormal
sketch写意手绘趣味zhushanormal
missive家书熟悉的手持端风格feicuinormal
dispatch公牍办公场景的手持端风格jilannormal
metric格律讲究章法的生产力套件qingjinnormal
new-york玄素单色开发者工具风inknormal

各场景的出处。 受众场景——典章、信笺、雅集、司南——是我们自己的案头;风格场景各自致敬一种设计语言,key 换成通用词让 API 保持我们自己的,但谱系正是意义所在,明说无妨:

scene参考的气质来源
cupertino 圆融iOS 的设计语言——柔和轻盈的手持端
expressive 飞白弹簧动效驱动的移动端设计
fluent 流水Fluent,克制的生产力套件
material 格物Material,靠投影分层的立体风格
missive 家书开源移动端样式规范(WeUI)的熟悉手感
dispatch 公牍WeUI for Work,同一套手感换上办公的案头
metric 格律TDesign,讲究章法的企业级设计系统
sketch 写意手绘速写本与漫画
new-york 玄素shadcn/ui,黑白单色的开发者工具气质(沿用其官方 style 名)

applyTheme({ scene }) 自动带上这对默认值;手动指定的 accent 或 contrast 优先。比如 applyTheme({ scene: "civic", accent: "qinghua" }) 保留典章的直角和大目标,主题色换成钴蓝。默认值也导出为 SCENE_DEFAULT_ACCENT / SCENE_DEFAULT_CONTRAST,代码里可以直接用。

#密度和对比度

data-density 只调整留白(间距、内边距、控件间隙),不动字号和对比度。data-contrast="high" 把次级文字和边线提到与主级相同的强度,并加深焦点光晕。

#覆盖令牌

主题负责选值,你的 CSS 可以改值。令牌都在 @layer bs.tokens 里,所以一条不加 layer 的覆盖规则就能生效:

css
:root {
  --bs-radius-sm: 4px;   /* 控件更方 */
  --bs-color-primary: var(--bs-color-ink);
}

属性也可以不挂在 <html> 上,挂在任意容器上——属性会级联下去,所以一块 data-scene="studio" 的面板可以嵌在 civic 页面里。