主题
设计系统使用规范
本规范描述设计原则与参考值。实际 Token 变量名以项目设计系统为准,编写代码时应优先查找并使用项目中已定义的 Token/CSS 变量,而非硬编码具体数值。
一、Design Token 使用原则
- 颜色、字号、字重、行高、圆角、阴影、间距,优先使用项目设计系统中定义的 Token 变量
- 若当前项目有 Token 系统(CSS 变量、JS 常量、设计稿标注等),必须使用,禁止绕过 Token 硬编码数值
- 若项目尚无 Token 系统,直接写入本规范的参考色值/数值,并在注释中标注语义用途
css
/* ✅ 使用项目 Token(变量名以实际项目为准) */
color: var(--color-primary); /* 项目中的品牌主色 */
font-size: var(--font-size-body); /* 正文字号 */
/* ✅ 无 Token 系统时,写入参考值并加语义注释 */
color: #075AED; /* 品牌主色 */
font-size: 14px; /* 标准正文 */
/* ❌ 硬编码但无任何语义说明 */
color: #075AED;
font-size: 14px;- 主题切换(亮/暗)使用语义级 Token(如"主文字色"),不使用具体色值 Token(如"grey-9")
二、色彩规范
2.1 色彩结构
设计系统色彩分为四类,职能分明:
| 类型 | 说明 | 范例 |
|---|---|---|
| 品牌色 | 核心识别色,主按钮、导航高亮、核心入口 | 蓝色系主色 |
| 功能色 | 状态反馈,成功/警告/错误/信息 | 绿/橙/红/蓝 |
| 扩展色 | 数据可视化、标签、专题场景 | 全色域 12 色 |
| 中性色 | 文本、背景、边框、分割线 | 灰色阶 |
2.2 品牌主色参考值
| 用途 | 参考色值 | 说明 |
|---|---|---|
| 主色(默认态) | #075AED | 主按钮、导航高亮、核心入口、强调 |
| 悬停态 | #3A8AFF | 比主色亮一级 |
| 按下态 | #0542B3 | 比主色深两级 |
| 浅色填充背景 | #F2F7FF | 选中态背景、Tag 底色 |
| 浅色描边 | #B9D5FF | 选中框边框 |
2.3 功能色参考值
| 功能 | 参考色值 | 适用场景 |
|---|---|---|
| 成功 | #17B864 | 操作完成、审核通过、合规状态 |
| 告警 | #F78B3C | 待办、提醒、风险提示、中期状态 |
| 错误 | #E23F3F | 删除、驳回、高危操作、错误提示 |
| 信息/品牌 | #075AED | 强调、选中、信息提示 |
功能色浅色配套(用于 Tag/Badge 背景):
| 功能 | 背景参考值 | 描边参考值 |
|---|---|---|
| 成功 | #F2FFF7 | #AFF0D0 |
| 告警 | #FFF9F0 | #FFE1B9 |
| 错误 | #FFF6F6 | #FFCFCF |
| 信息 | #F2F7FF | #B9D5FF |
2.4 扩展色板参考值
共 12 色,每色 10 级色阶(0 最浅 → 9 最深),主色为第 5 级,色阶递增表示颜色加深。
| 色板 | 主色(5级) | 典型语义 |
|---|---|---|
| red(丹黎红) | #E23F3F | 错误、删除、高危 |
| coral(熔礁橙) | #E65C3C | 热度、活跃 |
| sunset(落日橙) | #F78B3C | 告警、提醒 |
| gold(自贸金) | #F5B800 | 价值标签、VIP |
| lime(清柠黄绿) | #C8E02F | 环保、生态辅助 |
| green(雨林绿) | #17B864 | 成功、通过、合规 |
| cyan(潮汐青) | #00C2A8 | 数据辅助 |
| sky(海岛蓝) | #00B4D8 | 信息辅助 |
| blue(自贸蓝) | #075AED | 品牌主色 |
| legacy(琼韵蓝) | #334BE4 | 政务、传统科技 |
| purple(科创紫) | #6B46D1 | 科技创新、AI |
| magenta(云境紫) | #B74FD1 | 高端、创意 |
完整色阶速查(部分色板):
| 色阶 | blue | red | green | sunset | cyan | purple |
|---|---|---|---|---|---|---|
| 0 | #F2F7FF | #FFF6F6 | #F2FFF7 | #FFF9F0 | #F0FFFB | #F8F5FF |
| 1 | #E0ECFF | #FFE8E8 | #D9F9E8 | #FFF0DC | #CFF9F0 | #EDE4FF |
| 2 | #B9D5FF | #FFCFCF | #AFF0D0 | #FFE1B9 | #9FF0E1 | #D3C2FF |
| 3 | #84B8FF | #FFB3B3 | #86E7B8 | #FFD296 | #6FE7D2 | #B9A0FF |
| 4 | #3A8AFF | #F47A7A | #4FD693 | #FFB35C | #1FD4B8 | #8D6AE7 |
| 5 | #075AED | #E23F3F | #17B864 | #F78B3C | #00C2A8 | #6B46D1 |
| 6 | #064ED0 | #B81B1B | #129E54 | #E67728 | #00A892 | #5A39B8 |
| 7 | #0542B3 | #901111 | #0D8444 | #CC6218 | #008E7C | #492C9F |
| 8 | #043696 | #660A0A | #086A34 | #A34D08 | #007466 | #311870 |
| 9 | #032A79 | #3D0404 | #035024 | #7A3800 | #005A50 | #23105A |
2.5 中性色参考值
| 语义 | 参考色值 | 典型用途 |
|---|---|---|
| 纯白 | #FFFFFF | 卡片/容器背景 |
| 页面底色 | #F7F7F7 | 页面背景、斑马纹 |
| 禁用背景 | #F2F2F2 | 输入框禁用态 |
| 分割线/描边 | #EBEBEB | 分割线、边框 |
| 骨架屏 | #E0E0E0 | 骨架屏、占位块 |
| 禁用边框 | #CCCCCC | 禁用态边框 |
| 占位文字 | #A6A6A6 | Placeholder、次要图标 |
| 辅助文字 | #858585 | 说明文字 |
| 次要文字 | #525252 | 辅助内容 |
| 主要文字 | #1A1A1A | 标题、正文(深色模式关键色) |
文字色——透明度色阶(亮暗双模式通用):
| 层级 | 参考色值 | 用途 | WCAG |
|---|---|---|---|
| 主要文字 | rgba(0, 0, 0, 0.90) | 正文内容、标题 | AA ✅ |
| 次要文字 | rgba(0, 0, 0, 0.68) | 辅助说明、描述 | AA ✅ |
| 辅助文字 | rgba(0, 0, 0, 0.48) | 提示信息、占位 | — |
| 禁用文字 | rgba(0, 0, 0, 0.35) | 禁用状态 | — |
透明度写法在暗色模式下将
rgba(0,0,0,N)替换为rgba(255,255,255,N)即可实现双模式适配。
2.6 色彩使用禁忌
- 禁止将告警色(橙)与错误色(红)互换使用
- 禁止仅凭颜色区分关键状态,需同时配合图标或文字(色盲友好)
- 禁止在白色背景上使用 0~3 级浅色作为独立文字色(对比度不足)
- 错误(红)与成功(绿)场景必须额外使用图标区分,支持红绿色盲用户
三、字体规范
3.1 字体家族
| 场景 | 字体栈 |
|---|---|
| 中文界面通用 | 'PingFang SC', 'Hiragino Sans GB', 'Segoe UI', 'Microsoft YaHei', 'OPPO Sans', sans-serif |
| 数字/金额/统计数值 | 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif |
数字、金额、时间、统计指标等场景必须切换为数字专用字体,提升可读性与排版精度。
css
body {
font-family: 'PingFang SC', 'Hiragino Sans GB', 'Segoe UI',
'Microsoft YaHei', 'OPPO Sans', sans-serif;
}
/* 数据面板、金额、统计数值 */
.data-number,
.amount,
.stat-value {
font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-weight: 700;
}3.2 字重
仅使用三段式字重,禁止使用 300、700、900 等其他字重。
| 字重值 | 语义 | 用途 |
|---|---|---|
400 | Regular(常规) | 正文、说明、描述 |
500 | Medium(中等) | 副标题、UI 标签、强调正文 |
600 | Semibold(半粗) | 标题、数据大字、重要提示 |
3.3 行高规则
行高递进以 8 为基数,公式:行高 = 字号 + 8(小字号)或 字号 + 8的倍数。
| 字号 | 行高 |
|---|---|
| 12px | 20px |
| 14px | 22px |
| 16px | 24px |
| 18px | 28px |
| 20px | 28px |
| 24px | 32px |
| 28px | 36px |
| 32px | 40px |
| 40px | 48px |
3.4 字阶参考
移动端
| 级别 | 字号 | 字重 | 行高 | 用途 |
|---|---|---|---|---|
| Display | 28px | 600 | 36px | 大标题 |
| H1 | 24px | 600 | 32px | 页面主标题 |
| H2 | 20px | 600 | 28px | 章节标题 |
| H3 | 18px | 500 | 28px | 卡片标题 |
| Body-L | 16px | 400 | 24px | 大号正文 |
| Body | 14px | 400 | 22px | 标准正文 |
| Caption | 12px | 400 | 20px | 辅助说明、标签 |
PC 端
| 级别 | 字号 | 字重 | 行高 | 用途 |
|---|---|---|---|---|
| Display | 40px | 600 | 48px | 大屏展示标题 |
| H1 | 32px | 600 | 40px | 页面主标题 |
| H2 | 28px | 600 | 36px | 章节标题 |
| H3 | 24px | 500 | 32px | 三级标题 |
| H4 | 20px | 500 | 28px | 卡片/面板标题 |
| Body-L | 16px | 400 | 24px | 大号正文 |
| Body | 14px | 400 | 22px | 标准正文(默认) |
| Caption | 12px | 400 | 20px | 辅助说明、提示 |
3.5 文字颜色选用
文字颜色优先使用透明度色阶(2.5节),保证亮暗双模式兼容:
css
/* 正文:主要文字 */
color: rgba(0, 0, 0, 0.90);
/* 辅助说明:次要文字 */
color: rgba(0, 0, 0, 0.68);
/* 提示/占位:辅助文字 */
color: rgba(0, 0, 0, 0.48);
/* 禁用态 */
color: rgba(0, 0, 0, 0.35);四、间距与圆角
4.1 间距系统
基础单位 8px,所有间距取 8 的倍数(或 4 的倍数作为补充)。
| 用途 | 推荐值 |
|---|---|
| 组件内元素间距(紧凑) | 4px / 8px |
| 组件内元素间距(标准) | 12px / 16px |
| 卡片内边距 | 16px / 24px |
| 区块间距 | 24px / 32px |
| 页面区段间距 | 48px / 64px / 96px |
4.2 圆角系统
| 级别 | 数值 | 适用场景 |
|---|---|---|
| 小圆角 | 4px | inline code、小 tag、tooltip |
| 中圆角 | 8px | 小按钮、下拉项、小容器 |
| 标准圆角 | 12px | 输入框、标准卡片、弹窗 |
| 大圆角 | 16px | 内容卡片、图片容器 |
| 特大圆角 | 24px | 大卡片、主要面板 |
| 胶囊/全圆 | 9999px | 按钮、Badge、搜索框 |
五、阴影与层级
遵循轻量化阴影原则,通过边框透明度实现层级分离,尽量减少阴影。
| 层级 | 样式 | 用途 |
|---|---|---|
| 无层级 | 无阴影、无边框 | 页面背景、文本块 |
| 轻边框 | 1px solid rgba(0,0,0,0.05) | 卡片、分割线 |
| 中边框 | 1px solid rgba(0,0,0,0.08) | 交互元素、输入框 |
| 轻浮起 | 0 2px 4px rgba(0,0,0,0.03) | 卡片悬浮 |
| 按钮深度 | 0 1px 2px rgba(0,0,0,0.06) | 按钮微投影 |
| 浮层/弹窗 | 0 8px 24px rgba(0,0,0,0.12) | Modal、Popover |
六、组件使用原则
- 优先使用项目设计系统/组件库中已有组件,不重复造轮子
- 通过 Props / Slots 定制外观,禁止直接修改组件库源码
- 需要扩展时,创建**包装组件(Wrapper)**而非 Fork 源码
- 样式覆盖必须通过组件暴露的 Token/CSS 变量实现,不写
!important强制覆盖
vue
<!-- ✅ 通过 Props 定制 -->
<Button type="primary" size="large">提交</Button>
<!-- ✅ 包装扩展 -->
<template>
<Button v-bind="$attrs"><slot /></Button>
</template>
<!-- ❌ 强制覆盖内部样式 -->
<style>
.btn { background: #075AED !important; }
</style>七、响应式设计
- Mobile First:先写移动端样式,再用媒体查询向上扩展
- 断点参考(可按项目调整):
| 断点 | 尺寸 | 说明 |
|---|---|---|
| xs | < 480px | 小屏手机 |
| sm | 480px | 手机横屏 |
| md | 768px | 平板 |
| lg | 1024px | 小桌面 |
| xl | 1280px | 标准桌面 |
| 2xl | 1600px | 大屏 |
- 避免固定宽高,优先用 Flexbox / Grid 弹性布局
- 卡片网格:移动单列 → 平板双列 → 桌面三列
css
.card-grid {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
}
@media (min-width: 768px) {
.card-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
.card-grid { grid-template-columns: repeat(3, 1fr); }
}八、暗黑模式
- 文字色使用透明度色阶(
rgba(0,0,0,N)),暗色模式替换为rgba(255,255,255,N)即可 - 背景色参考层级(亮色):页面底
#F7F7F7→ 卡片#FFFFFF→ 弹层#FFFFFF - 背景色参考层级(暗色):页面底
#0d0d0d→ 卡片#141414→ 弹层#1a1a1a - 禁止用
filter: invert()模拟暗黑模式 - 使用语义级 Token("主文字色")而非具体色阶 Token("grey-9")
九、无障碍(A11y)
- 正文/次要文字满足 WCAG 2.1 AA 级(对比度 ≥ 4.5:1)
- 大字号文字(≥ 18px 或加粗 ≥ 14px)满足 AA Large(对比度 ≥ 3:1)
- 禁止仅用颜色传递状态,必须同时配合图标或文字
- 纯图标按钮必须有
aria-label - 所有交互元素有明确的 focus 样式
css
:focus-visible {
outline: 2px solid currentColor; /* 或品牌主色 */
outline-offset: 2px;
}十、图标规范
- 统一使用项目约定的图标库,不混用多套
- 图标颜色继承父元素文字色(
color: inherit/currentColor),不单独硬编码色值 - 图标尺寸与文字配合:12px 文字配 12–14px 图标,14px 配 16px,16px 配 18–20px
- 常用固定尺寸:
16px / 20px / 24px / 32px
十一、数据可视化配色
图表多系列配色使用扩展色不同色系的主色(第5级),保证视觉区分度最大:
| 序号 | 色板 | 参考色值 |
|---|---|---|
| 1 | blue | #075AED |
| 2 | cyan | #00C2A8 |
| 3 | green | #17B864 |
| 4 | sunset | #F78B3C |
| 5 | purple | #6B46D1 |
| 6 | sky | #00B4D8 |
| 7 | gold | #F5B800 |
| 8 | legacy | #334BE4 |
- 相邻序号避免使用相近色相(如 blue 与 legacy 紧邻)
- 热力图、连续数据:同色系 0→9 渐变,不混用色系
- 语义色(成功/告警/错误)在图表中保持与界面功能色一致,不替换为其他颜色
