指南
主题定制
One UI 始终包含不可覆盖的内置 default 主题。oneTheme.init() 可以注册多套全局主题,每套自定义主题都会按 colors、typography、border 和 radius 分组,从内置 default 深度继承未填写的字段。
初始化多套主题
import { OneButton, oneTheme } from '@geektech/one';
oneTheme.init({
defaultTheme: 'brand',
themes: {
brand: {
colors: { primary: '#326bff', primaryHover: '#2457dc' },
typography: { fontFamily: 'Inter, sans-serif', lineHeight: '1.6' },
border: { color: '#cbd5e1', width: '1px', style: 'solid' },
radius: { sm: '4px', md: '8px', lg: '12px' },
},
night: {
colors: { surface: '#101510', text: '#f4f8f4', muted: '#a8b3aa' },
},
},
});
const defaultButton = new OneButton({ children: ['默认主题'] });
const nightButton = new OneButton({ children: ['夜间主题'] });
defaultButton.on('click', () => oneTheme.switch('default'));
nightButton.on('click', () => oneTheme.switch('night'));
console.log(oneTheme.currentTheme);初始化会立即应用 defaultTheme;再次调用 init() 会替换此前注册的自定义主题。oneTheme.switch() 只接受已注册名称,并在成功写入全部变量后更新 currentTheme。
作用域、错误与持久化
主题服务只作用于全局 document.documentElement,不提供局部主题容器。配置字段、名称或 CSS 值无效时抛出 OneThemeConfigError;切换到未知名称时抛出 OneThemeNotFoundError;没有浏览器根节点时抛出 OneThemeEnvironmentError。失败操作不会改变当前主题。
读取 CSS 回退值
原有的扁平 ONE_THEME_DEFAULTS 仍用于读取组件 CSS 的默认回退值;嵌套的 ONE_DEFAULT_THEME 则描述完整内置主题。
import { ONE_THEME_DEFAULTS } from '@geektech/one';
const primaryColor = ONE_THEME_DEFAULTS.colorPrimary;
const cardRadius = ONE_THEME_DEFAULTS.radiusMd;主题 token
| 名称 | 签名 | 说明 |
|---|---|---|
--one-color-primary | Fallback: #5fd956 | 主按钮默认背景色。 |
--one-color-primary-hover | Fallback: #4bc944 | 主按钮 hover 背景色。 |
--one-color-primary-contrast | Fallback: #162018 | 主按钮文本对比色;默认与两种主色背景均满足 WCAG AA。 |
--one-color-secondary | Fallback: #ffffff | 次按钮默认背景色。 |
--one-color-secondary-hover | Fallback: #d9e8d6 | 次按钮 hover 背景色。 |
--one-color-secondary-contrast | Fallback: #162018 | 次按钮文本对比色。 |
--one-color-danger | Fallback: #b83232 | 危险按钮与无效输入框的默认强调色。 |
--one-color-danger-hover | Fallback: #9f2d2d | 危险按钮 hover 背景色。 |
--one-color-danger-contrast | Fallback: #ffffff | 危险按钮文本对比色;默认与两种危险背景均满足 WCAG AA。 |
--one-color-surface | Fallback: #ffffff | 输入框、卡片与次按钮使用的基础表面色。 |
--one-color-text | Fallback: #162018 | 组件主要文本色。 |
--one-color-border | Fallback: #d9e8d6 | 输入框与卡片使用的基础边框色。 |
--one-color-focus | Fallback: #2f7c39 | 按钮与输入框的键盘焦点色。 |
--one-radius-md | Fallback: 8px | 按钮和输入框的默认圆角。 |
--one-radius-lg | Fallback: 8px | 卡片与 Dialog 等大型表面的圆角。 |
--one-space-sm | Fallback: 8px | 按钮 gap 的共享间距 fallback。 |
--one-space-lg | Fallback: 16px | 卡片区域 padding 的共享间距 fallback。 |
--one-font-size-sm | Fallback: 12px | 小尺寸按钮和输入框的字号。 |
--one-font-size-md | Fallback: 14px | 中尺寸按钮和输入框的字号。 |
--one-font-size-lg | Fallback: 16px | 大尺寸按钮和输入框的字号。 |
--one-font-family | Fallback: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif | 全部 One UI 组件使用的字体栈。 |
--one-line-height | Fallback: 1.5 | 全部 One UI 组件使用的基础行高。 |
--one-border-width | Fallback: 1px | 普通组件边框与分隔线使用的全局宽度。 |
--one-border-style | Fallback: solid | 普通组件边框与分隔线使用的全局样式。 |
--one-shadow-card | Fallback: 0 12px 30px rgba(32, 74, 38, 0.1) | 卡片阴影的共享 fallback。 |
--one-color-info | Fallback: #2563eb | 信息反馈的强调色。 |
--one-color-success | Fallback: #2f7c39 | 成功反馈的强调色。 |
--one-color-warning | Fallback: #9a6700 | 警告反馈的强调色。 |
--one-color-overlay | Fallback: rgba(22, 32, 24, 0.48) | Dialog 遮罩背景色。 |
--one-color-muted | Fallback: #647268 | 反馈组件的次要文本色。 |
--one-radius-sm | Fallback: 4px | Tooltip 的紧凑圆角。 |
--one-space-xs | Fallback: 4px | 反馈内容的最小共享间距。 |
--one-space-md | Fallback: 12px | Alert 与 Message 的中等共享间距。 |
--one-shadow-overlay | Fallback: 0 18px 48px rgba(22, 32, 24, 0.2) | Message、Dialog 与 Tooltip 的浮层阴影。 |
--one-z-index-dialog | Fallback: 1000 | Dialog 默认层级。 |
--one-z-index-message | Fallback: 1100 | Message 默认层级。 |
--one-z-index-tooltip | Fallback: 1200 | Tooltip 默认层级。 |
--one-alert-gap | Fallback: var(--one-space-sm, 8px) | Alert 图标、正文和操作之间的间距。 |
--one-alert-padding | Fallback: var(--one-space-md, 12px) | Alert 内边距。 |
--one-alert-color | Fallback: var(--one-color-text, #162018) | Alert 主要文本色。 |
--one-alert-background | Fallback: var(--one-color-surface, #ffffff) | Alert 背景色。 |
--one-alert-border-color | Fallback: var(--one-color-border, #d9e8d6) | Alert 默认边框色。 |
--one-alert-radius | Fallback: var(--one-radius-md, 8px) | Alert 圆角。 |
--one-tooltip-background | Fallback: var(--one-color-text, #162018) | Tooltip 气泡背景色。 |
--one-tooltip-arrow-x | Fallback: 50% | Tooltip 垂直方向气泡的箭头横坐标。 |
--one-tooltip-arrow-y | Fallback: 50% | Tooltip 水平方向气泡的箭头纵坐标。 |
--one-button-gap | Fallback: var(--one-space-sm, 8px) | 按钮图标、spinner 与文本之间的组件级 gap override。 |
--one-button-padding-sm | Fallback: 4px 12px | 小尺寸按钮的组件级 padding override。 |
--one-button-padding-md | Fallback: 8px 16px | 中尺寸按钮的组件级 padding override。 |
--one-button-padding-lg | Fallback: 12px 16px | 大尺寸按钮的组件级 padding override。 |
--one-input-color | Fallback: var(--one-color-text, #162018) | 输入框文本色的组件级 override。 |
--one-input-background | Fallback: var(--one-color-surface, #ffffff) | 输入框默认背景色的组件级 override。 |
--one-input-border-color | Fallback: var(--one-color-border, #d9e8d6) | 输入框默认边框色的组件级 override。 |
--one-input-disabled-background | Fallback: var(--one-color-surface, #ffffff) | 禁用输入框背景色的组件级 override。 |
--one-input-focus-border-color | Fallback: var(--one-color-focus, #2f7c39) | 输入框获得键盘焦点时的边框色 override。 |
--one-input-padding-sm | Fallback: 4px 8px | 小尺寸输入框的组件级 padding override。 |
--one-input-padding-md | Fallback: 8px 12px | 中尺寸输入框的组件级 padding override。 |
--one-input-padding-lg | Fallback: 12px 16px | 大尺寸输入框的组件级 padding override。 |
--one-card-color | Fallback: var(--one-color-text, #162018) | 卡片文本色的组件级 override。 |
--one-card-background | Fallback: var(--one-color-surface, #ffffff) | 卡片背景色的组件级 override。 |
--one-card-border-color | Fallback: var(--one-color-border, #d9e8d6) | 卡片外框及 header/footer 分隔线的组件级 override。 |
--one-card-radius | Fallback: var(--one-radius-lg, 8px) | 卡片圆角的组件级 override。 |
--one-card-shadow | Fallback: var(--one-shadow-card, 0 12px 30px rgba(32, 74, 38, 0.1)) | 卡片阴影的组件级 override。 |
--one-card-header-padding | Fallback: var(--one-space-lg, 16px) | 卡片 header 区域的组件级 padding override。 |
--one-card-body-padding | Fallback: var(--one-space-lg, 16px) | 卡片 body 区域的组件级 padding override。 |
--one-card-footer-padding | Fallback: var(--one-space-lg, 16px) | 卡片 footer 区域的组件级 padding override。 |
全局 CSS 变量覆盖
:root {
--one-color-primary: #326bff;
--one-radius-md: 12px;
}局部 CSS 变量覆盖
这只是现有 CSS 变量覆盖能力,不会创建可由 oneTheme 管理或切换的局部主题。
.checkout-panel {
--one-color-primary: #7c3aed;
--one-shadow-card: none;
}