deerflow-code/frontend-web/docs/ui规范-浅蓝/浅蓝色ui规范.md
2026-09-07 18:24:55 +08:00

15 KiB
Raw Blame History

浅蓝色 UI 规范

本文档由设计稿截图(1.1 全局样式-色彩、1.2 全局样式-色彩附录)识别整理而成。 全部色值已与"色彩附录"编号表逐一核对,保证准确。


1.1 色彩体系总览

调色体系分为 主色 与 辅色 两大类。每个色相按用途分为若干阶梯:

阶梯 数量 用途
浅色 3 用于大面积底色
中亮色 6 用于标签、图表、提示等
深色 4(+基准色,共 5 个深阶) 用于小面积按钮、图标等
线性渐变色 1 用于特殊装饰性小面积底色
径向渐变色 1 用于特殊装饰性小面积底色

中性色(灰阶)略有不同:浅色用于背景 / 白色文字及分割线,中亮色用于备注文字及图标,深色用于正文,且无渐变色。


主色

主色 - 红(基准 #CF1322)

用途 色值
浅色 #FEFAFA · #FEF6F6 · #FEEDED
中亮色 #FDDADC · #FCB5B9 · #FA9196 · #F86C73 · #F74750 · #F5222D
深色 #CF1322 · #BC0D1E · #A8071A · #820014 · #5C0011
线性渐变色 #F5222D → #A8071A
径向渐变色 #F86C73 → #F5222D

主色 - 蓝(基准 #0062D9)

用途 色值
浅色 #F9FCFF · #F4F9FF · #EAF4FF
中亮色 #D4E9FF · #AAD2FF · #80BCFF · #55A6FE · #2B8FFE · #0079FE
深色 #0062D9 · #0056C6 · #004AB3 · #00368C · #002466
线性渐变色 #0079FE → #004AB3
径向渐变色 #55A6FE → #0079FE

辅色

辅色 - 橙(基准 #D97B00)

用途 色值
浅色 #FFFCF9 · #FFFAF4 · #FFF6EA
中亮色 #FFEED4 · #FFDDAA · #FFCC80 · #FFBB55 · #FFAA2B · #FF9900
深色 #D97B00 · #C66D00 · #B35F00 · #8C4600 · #663000
线性渐变色 #FF9900 → #B35F00
径向渐变色 #FFBB55 → #FF9900

辅色 - 绿(基准 #1EB07F)

用途 色值
浅色 #FAFEFD · #F6FDFB · #EEFCF7
中亮色 #DCF8EE · #BAF1DD · #97EBCD · #74E4BC · #52DDAB · #2FD69A
深色 #1EB07F · #189D72 · #118A65 · #07634B · #043D30
线性渐变色 #2FD69A → #118A65
径向渐变色 #74E4BC → #2FD69A

辅色 - 青蓝(基准 #2F9ACC)

用途 色值
浅色 #FBFDFE · #F7FCFE · #EFFAFE
中亮色 #E0F5FD · #C1EBFB · #A2E1F9 · #83D7F7 · #64CDF5 · #45C3F3
深色 #2F9ACC · #2788B9 · #1E76A6 · #115580 · #0B3959
线性渐变色 #45C3F3 → #1E76A6
径向渐变色 #83D7F7 → #45C3F3

中性色 - 灰(基准 #222222)

用途 色值
浅色(背景、白色文字及分割线) #FFFFFF · #FAFAFA · #F5F5F5
中亮色(备注文字及图标) #E8E8E8 · #DBDBDB · #C1C1C1 · #A6A6A6 · #7F7F7F · #575757
深色(正文) #3D3D3D · #222222

1.2 色彩附录(编号对照表)

编号规则:ZS = 主色(主色调),FS = 辅色 / 中性色。-01~-03 为浅色,-04~-09 为中亮色,-10~-13 为深色,-14 为线性渐变色,-15 为径向渐变色;不带后缀的为该色相基准深色。

主色 ZS

编号 红 (ZS-001) 编号 蓝 (ZS-002)
ZS-001 #CF1322 ZS-002 #0062D9
ZS-001-01 #FEFAFA ZS-002-01 #F9FCFF
ZS-001-02 #FEF6F6 ZS-002-02 #F4F9FF
ZS-001-03 #FEEDED ZS-002-03 #EAF4FF
ZS-001-04 #FDDADC ZS-002-04 #D4E9FF
ZS-001-05 #FCB5B9 ZS-002-05 #AAD2FF
ZS-001-06 #FA9196 ZS-002-06 #80BCFF
ZS-001-07 #F86C73 ZS-002-07 #55A6FE
ZS-001-08 #F74750 ZS-002-08 #2B8FFE
ZS-001-09 #F5222D ZS-002-09 #0079FE
ZS-001-10 #BC0D1E ZS-002-10 #0056C6
ZS-001-11 #A8071A ZS-002-11 #004AB3
ZS-001-12 #820014 ZS-002-12 #00368C
ZS-001-13 #5C0011 ZS-002-13 #002466
ZS-001-14 #F5222D → #A8071A ZS-002-14 #0079FE → #004AB3
ZS-001-15 #F86C73 → #F5222D ZS-002-15 #55A6FE → #0079FE

辅色 / 中性色 FS

编号 橙 (FS-001) 绿 (FS-002) 青蓝 (FS-003) 中性灰 (FS-004)
FS-00n #D97B00 #1EB07F #2F9ACC #222222
-01 #FFFCF9 #FAFEFD #FBFDFE #FFFFFF
-02 #FFFAF4 #F6FDFB #F7FCFE #FAFAFA
-03 #FFF6EA #EEFCF7 #EFFAFE #F5F5F5
-04 #FFEED4 #DCF8EE #E0F5FD #E8E8E8
-05 #FFDDAA #BAF1DD #C1EBFB #DBDBDB
-06 #FFCC80 #97EBCD #A2E1F9 #C1C1C1
-07 #FFBB55 #74E4BC #83D7F7 #A6A6A6
-08 #FFAA2B #52DDAB #64CDF5 #7F7F7F
-09 #FF9900 #2FD69A #45C3F3 #575757
-10 #C66D00 #189D72 #2788B9 #3D3D3D
-11 #B35F00 #118A65 #1E76A6 —
-12 #8C4600 #07634B #115580 —
-13 #663000 #043D30 #0B3959 —
-14 #FF9900 → #B35F00 #2FD69A → #118A65 #45C3F3 → #1E76A6 —
-15 #FFBB55 → #FF9900 #74E4BC → #2FD69A #83D7F7 → #45C3F3 —

注:中性灰(FS-004)无渐变阶,最深至 #222222(基准)/#3D3D3D(FS-004-10),用于正文文字。


组件规范

以下为各组件的视觉规范与实现方式。颜色统一引用上文色值,建议在项目中先抽取为 CSS 变量 / Tailwind token,组件只引用语义化变量。

语义化 Token 建议

把色彩体系映射成语义变量,组件层只用语义名,便于换肤与维护:

:root {
  /* 品牌 / 主色(蓝) */
  --color-primary:        #0062D9; /* 主按钮、实底选中:ZS-002 深色基准 */
  --color-primary-hover:  #0079FE; /* 悬浮态:ZS-002-09 */
  --color-primary-active: #0056C6; /* 按下态:ZS-002-10 */
  --color-primary-bg:     #EAF4FF; /* 浅底选中底色:ZS-002-03 */
  --color-primary-border: #0079FE; /* 描边选中边框 */

  /* 中性 */
  --color-text:           #3D3D3D; /* 正文:FS-004-10 */
  --color-text-secondary: #A6A6A6; /* 次要 / 占位符:FS-004-07 */
  --color-border:         #DBDBDB; /* 默认边框:FS-004-05 */
  --color-bg-disabled:    #F5F5F5; /* 失效底色:FS-004-03 */
  --color-fill-disabled:  #A6A6A6; /* 主按钮失效底色:FS-004-07 */
  --color-surface:        #FFFFFF; /* 卡片 / 控件底 */
}

项目使用 Tailwind v4 + shadcn,可在 @theme 中声明这些变量后用 bg-primary / text-primary 等使用;下文示例同时给出等价的 Tailwind 写法。


2.1 基础 - 按钮(Button)

按钮尺寸

规格 高度 圆角 用途
小 28px 4px 空间小的板块内部,如表格中、卡片标题等
正常 32px 4px 常用按钮(默认尺寸)

水平内边距约 12–16px,字号 14px,图标与文字间距 4–8px。

常用按钮类型

类型 视觉 用途
主按钮 实底 --color-primary,白字 一个操作区域只能有一个主按钮
主按钮·失效 实底灰 --color-fill-disabled,白字 主按钮禁用态
次要按钮 白底 + --color-primary 边框 + 蓝字 重要度低于主按钮,高于默认按钮
默认按钮 白底 + --color-border 边框 + --color-text 默认动作(取消等)
默认·失效 --color-bg-disabled 底 + 浅边框 + --color-text-secondary 次要/默认按钮禁用态
文本按钮 无边框无底,蓝字(可加下划线) 表格操作、文件下载等
图标按钮 仅图标,可选 描边/实底/浅底 × 方形/圆形 增强辨识度或节省空间

实现(Tailwind 示意):

// 主按钮
<button className="h-8 px-4 rounded text-sm text-white bg-[#0062D9]
                   hover:bg-[#0079FE] active:bg-[#0056C6]
                   disabled:bg-[#A6A6A6] disabled:cursor-not-allowed">确定</button>

// 次要按钮(次按钮)
<button className="h-8 px-4 rounded text-sm text-[#0062D9] bg-white
                   border border-[#0062D9] hover:bg-[#EAF4FF]">点击</button>

// 默认按钮
<button className="h-8 px-4 rounded text-sm text-[#3D3D3D] bg-white
                   border border-[#DBDBDB] hover:border-[#0079FE] hover:text-[#0079FE]
                   disabled:bg-[#F5F5F5] disabled:text-[#A6A6A6] disabled:border-[#DBDBDB]">取消</button>

// 文本按钮
<button className="text-sm text-[#0062D9] hover:underline">文本按钮样式</button>

// 图标按钮(实底圆形)
<button className="size-7 grid place-items-center rounded-full text-white bg-[#0062D9]
                   hover:bg-[#0079FE]"><TrashIcon className="size-4" /></button>

图标按钮三种底 × 两种形状:

  • 描边:白底 + --color-border 边框,图标用 --color-text
  • 实底:--color-primary 底 + 白图标
  • 浅底:--color-primary-bg(#EAF4FF)底 + 蓝图标
  • 形状:方形 rounded(4px)/ 圆形 rounded-full

按钮组合

组合 说明
文字 + 下拉按钮 按钮右侧带 ⌄ 箭头;有 默认 / 主按钮 两种变体
图标 + 文字按钮 + 正常,前置图标;有 描边 / 实底 两种变体
文本按钮 + 图标 蓝色文本链按钮:更多 » 展开 ⌄ `下一页 »
主按钮 + 默认按钮 确定(主) 取消(默认) 返回(默认) 并排,间距 8–12px

其他状态

  • 悬浮状态(hover):主按钮悬浮时底色变亮(--color-primary-hover #0079FE),用于 Banner / 登录 / 视觉冲击强的场景。
  • 加载中(loading):按钮内前置旋转图标 ⟳ 加载中,期间 disabled 并降低交互;用于异步操作等待反馈。
<button className="h-8 px-4 rounded text-sm text-white bg-[#0062D9] inline-flex items-center gap-1.5" disabled>
  <Spinner className="size-4 animate-spin" /> 加载中
</button>

5.9 输入 - 单选框(选择按钮 / Segmented Radio)

一组互斥选项,外观为按钮组。两种排布 × 三种选中样式。

排布方式

排布 说明
拼接式 选项首尾相连,仅最外侧两角圆角,相邻共用 1px 边框
分离式 选项之间留间距(约 8px),每个独立 4px 圆角,各自带完整边框

选中(已选)样式 × 三种

样式 已选 未选
描边式 白底 + 蓝边框 --color-primary + 蓝字 白底 + --color-border 边框 + --color-text
浅底式 --color-primary-bg(#EAF4FF) 底 + 蓝字 + 蓝边框 同上
实底式 --color-primary 实底 + 白字 同上
  • 带统计:选项文字后追加计数,如 已选(230) / 未选(230),计数用次要色 --color-text-secondary。

实现(拼接式 + 描边选中):

<div className="inline-flex rounded overflow-hidden border border-[#DBDBDB] divide-x divide-[#DBDBDB]">
  {options.map((o) => (
    <button key={o.value}
      className={cn(
        "h-8 px-4 text-sm bg-white",
        value === o.value
          ? "text-[#0062D9] ring-1 ring-inset ring-[#0079FE] z-10" // 描边选中
          : "text-[#3D3D3D] hover:text-[#0079FE]"
      )}>
      {o.label}{o.count != null && <span className="text-[#A6A6A6]">({o.count})</span>}
    </button>
  ))}
</div>

浅底式把选中态换成 bg-[#EAF4FF] text-[#0062D9];实底式换成 bg-[#0062D9] text-white。 分离式去掉 divide-x / overflow-hidden,外层用 gap-2,每个按钮单独 rounded border。

按钮式页签(Tab as Button)

图标 + 文字的页签型按钮:

  • 激活 两种:描边(白底 + 蓝边框 + 蓝字)/ 实底(--color-primary 底 + 白字)
  • 正常:白底 + --color-border 边框 + --color-text,前置图标
  • 结构与拼接式选择按钮一致,区别在每项前置一个功能图标。

5.11 输入 - 选择器(Select / Dropdown)

单项输入选择,下拉单选。

状态

状态 触发框
占位 请选择 占位文字用 --color-text-secondary,灰边框 --color-border,右侧 ⌄
展开/聚焦 边框变 --color-primary,箭头翻转为 ⌃
已选 显示选中项文字(正文色),保持聚焦时蓝边框

下拉面板

  • 白底、圆角 4px、投影(如 shadow-lg),最大高度后出现滚动条
  • 选项默认 --color-text;hover / 选中 项:--color-primary-bg(#EAF4FF) 底 + --color-primary 文字
  • 分组:分组标题用小号灰字 --color-text-secondary,组之间用 1px 分割线 --color-border

实现示意:

// 触发框
<button className="h-8 w-full px-3 inline-flex items-center justify-between rounded
                   border border-[#DBDBDB] bg-white text-sm
                   data-[state=open]:border-[#0062D9]">
  <span className={selected ? "text-[#3D3D3D]" : "text-[#A6A6A6]"}>{selected ?? "请选择"}</span>
  <ChevronDown className="size-4 text-[#A6A6A6] transition-transform data-[state=open]:rotate-180" />
</button>

// 下拉项
<li className={cn(
  "h-9 px-3 flex items-center text-sm cursor-pointer rounded-sm",
  active ? "bg-[#EAF4FF] text-[#0062D9]" : "text-[#3D3D3D] hover:bg-[#EAF4FF]"
)}>{label}</li>

// 分组标题
<div className="px-3 py-1.5 text-xs text-[#A6A6A6]">分组标题1</div>

推荐直接基于 Radix Select(项目已有 shadcn 封装)改这些类名落地。


5.14 输入 - 开关(Switch)

两种形态:

1. 滑块开关(多用于表单、表格中)

  • 开:胶囊底 --color-primary,白色圆形滑块在右,左侧白字「开」
  • 关:胶囊底灰 --color-text-secondary/#C1C1C1,滑块在左,右侧灰字「关」
  • 切换时滑块带左右过渡动画
<button role="switch" aria-checked={on}
  className={cn(
    "relative h-6 w-12 rounded-full transition-colors text-[11px] text-white",
    on ? "bg-[#0062D9]" : "bg-[#C1C1C1]"
  )}>
  <span className={cn("absolute top-0.5 size-5 rounded-full bg-white transition-all",
                       on ? "left-[26px]" : "left-0.5")} />
  <span className={cn("absolute top-1/2 -translate-y-1/2", on ? "left-2" : "right-2 text-[#7F7F7F]")}>
    {on ? "开" : "关"}
  </span>
</button>

2. 单选框作为开关(分段式)

  • 开 | 关 两段式:激活段 --color-primary 实底白字,未激活段白底灰字 + --color-border 边框
  • 即 5.9 拼接式「实底选择按钮」的两选项特例
<div className="inline-flex rounded overflow-hidden border border-[#DBDBDB]">
  <button className={cn("h-7 px-4 text-sm", on  ? "bg-[#0062D9] text-white" : "bg-white text-[#3D3D3D]")}>开</button>
  <button className={cn("h-7 px-4 text-sm border-l border-[#DBDBDB]", !on ? "bg-[#0062D9] text-white" : "bg-white text-[#3D3D3D]")}>关</button>
</div>