主题定制
NUR 使用 CSS Variables(CSS 自定义属性)构建主题系统。覆盖这些变量即可全局改变组件外观,无需修改组件源码或重写样式。
快速覆盖
在你的全局 CSS 文件中覆盖变量:
css
:root {
--my-color-primary: #ff6b35;
--my-border-radius-base: 8px;
--my-font-size-default: 16px;
}所有使用这些变量的组件会自动应用新值。
暗色主题
在 <html> 上添加 data-theme="dark" 属性,或为容器添加 .dark 类名:
html
<html data-theme="dark">
<body>
<!-- 所有组件自动切换为暗色主题 -->
</body>
</html>css
/* 自定义暗色主题变量 */
.dark {
--my-bg-color: #1a1a2e;
--my-bg-color-page: #16213e;
--my-color-text-primary: #e0e0e0;
--my-color-text-regular: #b0b0b0;
--my-border-color-base: #333;
}完整 Token 列表
品牌色
| 色值 | Token | 说明 | 默认值 |
|---|---|---|---|
--my-color-primary | 主题色 | #409eff | |
--my-color-primary-light-3 | 主题色 3 级浅色 | #79bbff | |
--my-color-primary-light-5 | 主题色 5 级浅色 | #a0cfff | |
--my-color-primary-light-7 | 主题色 7 级浅色 | #c6e2ff | |
--my-color-primary-light-9 | 主题色 9 级浅色 | #ecf5ff | |
--my-color-primary-dark-2 | 主题色深色 | #337ecc |
功能色
| 色值 | Token | 说明 | 默认值 |
|---|---|---|---|
--my-color-success | 成功色 | #67c23a | |
--my-color-success-light-3 | 成功色浅色 | #95d475 | |
--my-color-success-light-5 | 成功色浅色 | #b3e19d | |
--my-color-success-light-7 | 成功色浅色 | #d1edc4 | |
--my-color-success-light-9 | 成功色浅色 | #f0f9eb | |
--my-color-warning | 警告色 | #e6a23c | |
--my-color-warning-light-3 | 警告色浅色 | #eebe77 | |
--my-color-warning-light-5 | 警告色浅色 | #f3d19e | |
--my-color-warning-light-7 | 警告色浅色 | #f8e3c5 | |
--my-color-warning-light-9 | 警告色浅色 | #fdf6ec | |
--my-color-danger | 危险色 | #f56c6c | |
--my-color-danger-light-3 | 危险色浅色 | #f89898 | |
--my-color-danger-light-5 | 危险色浅色 | #fab6b6 | |
--my-color-danger-light-7 | 危险色浅色 | #fcd3d3 | |
--my-color-danger-light-9 | 危险色浅色 | #fef0f0 | |
--my-color-info | 信息色 | #909399 | |
--my-color-info-light-3 | 信息色浅色 | #b1b3b8 | |
--my-color-info-light-5 | 信息色浅色 | #c8c9cc | |
--my-color-info-light-7 | 信息色浅色 | #dedfe0 | |
--my-color-info-light-9 | 信息色浅色 | #f4f4f5 |
文字颜色
| 色值 | Token | 说明 | 默认值 |
|---|---|---|---|
--my-color-text-primary | 主要文字 | #303133 | |
--my-color-text-regular | 常规文字 | #606266 | |
--my-color-text-secondary | 次要文字 | #909399 | |
--my-color-text-placeholder | 占位文字 | #c0c4cc | |
--my-color-text-disabled | 禁用文字 | #c0c4cc |
边框
| 色值 | Token | 说明 | 默认值 |
|---|---|---|---|
--my-border-color-base | 基础边框色 | #dcdfe6 | |
--my-border-color-light | 浅边框色 | #e4e7ed | |
--my-border-color-lighter | 更浅边框色 | #ebeef5 | |
--my-border-color-extra-light | 极浅边框色 | #f2f6fc | |
--my-border-width-base | 边框宽度 | 1px |
背景
| 色值 | Token | 说明 | 默认值 |
|---|---|---|---|
--my-bg-color | 组件背景色 | #ffffff | |
--my-bg-color-page | 页面背景色 | #f2f3f5 | |
--my-bg-color-overlay | 浮层背景色 | #ffffff |
字号
| Token | 说明 | 默认值 |
|---|---|---|
--my-font-size-extra-large | 特大号 | 20px |
--my-font-size-large | 大号 | 16px |
--my-font-size-default | 默认 | 14px |
--my-font-size-small | 小号 | 12px |
字重
| Token | 说明 | 默认值 |
|---|---|---|
--my-font-weight-primary | 主要字重 | 500 |
--my-font-weight-normal | 正常字重 | 400 |
--my-font-weight-bold | 加粗字重 | 700 |
字体族
| Token | 说明 | 默认值 |
|---|---|---|
--my-font-family | 默认字体 | 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif |
--my-font-family-code | 代码字体 | Menlo, Monaco, Consolas, 'Courier New', monospace |
--my-line-height-base | 基础行高 | 1.5 |
间距
| Token | 说明 | 默认值 |
|---|---|---|
--my-spacing-extra-large | 超大间距 | 24px |
--my-spacing-large | 大间距 | 16px |
--my-spacing-default | 默认间距 | 12px |
--my-spacing-small | 小间距 | 8px |
--my-spacing-extra-small | 超小间距 | 4px |
圆角
| Token | 说明 | 默认值 |
|---|---|---|
--my-border-radius-base | 基础圆角 | 18px |
--my-border-radius-small | 小圆角 | 10px |
--my-border-radius-round | 胶囊圆角 | 999px |
--my-border-radius-circle | 正圆 | 50% |
阴影
| Token | 说明 | 默认值 |
|---|---|---|
--my-box-shadow-base | 基础阴影 | 0px 2px 4px rgba(0,0,0,0.12), 0px 0px 6px rgba(0,0,0,0.04) |
--my-box-shadow-light | 浅阴影 | 0px 2px 12px 1px rgba(0,0,0,0.1) |
--my-box-shadow-lighter | 更浅阴影 | 0px 2px 12px 1px rgba(0,0,0,0.06) |
--my-box-shadow-dark | 深阴影 | 0px 2px 4px rgba(0,0,0,0.12), 0px 0px 6px rgba(0,0,0,0.12) |
运行时切换主题
ts
// 切换暗色主题
document.documentElement.setAttribute('data-theme', 'dark')
// 切换亮色主题
document.documentElement.removeAttribute('data-theme')
// 动态修改某个 token
document.documentElement.style.setProperty('--my-color-primary', '#ff6b35')