Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

色彩系统

色彩基础

色彩模型

模型说明用途
RGB红绿蓝(加色混合)屏幕显示、CSS
HSL色相、饱和度、亮度设计直觉友好
HSV/HSB色相、饱和度、明度取色器常用
CMYK青、品红、黄、黑(减色混合)印刷
LAB明度、a(绿-红)、b(蓝-黄)感知均匀、色彩校正
LCH / OKLCH基于 LAB 的圆柱坐标现代 CSS、设计系统

CSS 颜色格式

/* 命名色 */
color: red;

/* 十六进制 */
color: #FF5733;
color: #F53;           /* 简写 */

/* RGB / RGBA */
color: rgb(255 87 51);
color: rgb(255 87 51 / 0.8);  /* 带透明度 */

/* HSL / HSLA */
color: hsl(14 100% 60%);
color: hsl(14 100% 60% / 0.8);

/* OKLCH(推荐用于设计系统) */
color: oklch(70% 0.15 30);

/* color-mix(CSS 原生混合) */
color: color-mix(in oklch, #FF5733 50%, #3366FF);

色彩理论

色轮与配色方案

              0° 红
             /    \
        330° 紫    30° 橙
           |        |
        270° 蓝    90° 黄
           \        /
        210° 青    150° 绿
             \    /
             180°
方案定义效果示例
单色 (Monochromatic)同一色相,不同明度/饱和度和谐、统一蓝的深浅变化
互补 (Complementary)色轮对面 180°高对比、活力蓝 + 橙
类似 (Analogous)相邻 30° 范围柔和、自然蓝 + 青 + 绿
三元 (Triadic)等距 120°丰富、平衡红 + 黄 + 蓝
分裂互补 (Split-Comp.)互补色两侧各 30°对比但不刺眼蓝 + 黄橙 + 红橙
四元 (Tetradic)两对互补色丰富但需谨慎红 + 蓝 + 黄 + 绿

设计系统色彩架构

典型结构

Design Token
├── Primitive(原始色)
│   ├── blue-50, blue-100, ... blue-900
│   ├── red-50 ... red-900
│   └── neutral-50 ... neutral-900
├── Semantic(语义色)
│   ├── primary / secondary / tertiary
│   ├── success / warning / error / info
│   ├── background / surface / card
│   └── text-primary / text-secondary / text-disabled
└── Component(组件色)
    ├── button-primary-bg
    ├── input-border
    └── navbar-bg

Tailwind CSS 色阶系统

色阶用途对应关系
50极浅背景hover/selected 背景
100浅背景标签、徽章背景
200边框、分隔线输入框边框
300禁用态、占位符placeholder
400次要图标、文本说明文字
500默认态主要强调色
600hover 态交互反馈
700active/pressed 态按下状态
800深色文本深色模式文本
900极深/标题标题、强调
950黑色深色模式背景

无障碍 (WCAG)

对比度要求

等级普通文本大文本 (≥18pt/14pt bold)用途
AA≥ 4.5:1≥ 3:1最低标准
AAA≥ 7:1≥ 4.5:1增强标准

常见对比度参考

黑 #000000 on 白 #FFFFFF — 21:1 ✓ AAA
灰 #767676 on 白 #FFFFFF — 4.5:1 ✓ AA
蓝 #0066CC on 白 #FFFFFF — 5.9:1 ✓ AA
红 #D32F2F on 白 #FFFFFF — 5.6:1 ✓ AA

实用工具

  • WebAIM Contrast Checker
  • Chrome DevTools → Rendering → Emulate vision deficiencies
  • Figma 插件:Stark、A11y

主流设计系统色彩对比

Material Design 3 (Google)

Primary:     oklch(0.55 0.20 265)  — 从 dynamic color 提取
On Primary:  oklch(0.98 0.00 0)
Primary Container: oklch(0.85 0.12 265)
Surface:     oklch(0.98 0.00 0)

特点:dynamic color(壁纸/图片提取品牌色)、tonal palette(13 级色调)

Fluent UI 2 (Microsoft)

Brand Primary:   #0078D4
Neutral Primary: #242424
Stroke 1:        #D1D1D1
Surface:         #FFFFFF

特点:中性为主、品牌色克制使用、强调可访问性

Apple HIG

System Blue:    #007AFF
Label:          #000000
Secondary Label: #3C3C4399
Separator:      #3C3C4349
System Gray:    #8E8E93

特点:语义色命名、不强调品牌色、依赖系统自动适配深浅模式


深色模式设计

核心原则

  1. 不要简单反转:白底黑字反转成黑底白字会太刺眼
  2. 降低饱和度:深色背景上高饱和色会“发光“
  3. 使用灰色层级:#121212 → #1E1E1E → #2C2C2C → #383838
  4. 阴影变光晕:深色模式用发光(glow)替代阴影(shadow)

色彩调整策略

场景浅色模式深色模式调整
背景#FFFFFF#121212
表面#F5F5F5#1E1E1E
主色blue-500blue-300提高亮度
强调red-600red-400降低饱和度
文本#1A1A1A#E0E0E0
次要文本#666666#9E9E9E

CSS 色彩工具函数

/* oklch — 感知均匀,最适合设计系统 */
:root {
  --primary: oklch(0.55 0.20 265);
  --primary-hover: oklch(0.48 0.22 265);  /* 更暗 */
  --primary-light: oklch(0.85 0.12 265);  /* 更亮 */
}

/* color-mix — 原生混合,无需预计算 */
.btn-primary:hover {
  background: color-mix(in oklch, var(--primary) 80%, black);
}

/* light-dark() — 浅深模式自动切换 */
:root {
  color-scheme: light dark;
}
body {
  color: light-dark(#1a1a1a, #e0e0e0);
  background: light-dark(#ffffff, #121212);
}

/* relative color syntax — 相对色彩变换 */
:root {
  --primary-h: oklch(from var(--primary) h s l);
  --primary-saturate: oklch(from var(--primary) h calc(s * 1.2) l);
}

调色工具

工具用途链接
Realtime Colors实时预览配色在真实 UI 上的效果realtimecolors.com
HuemintAI 生成配色方案huemint.com
ColorBox (Lyft)色阶生成器colorbox.io
Tints.devTailwind 色阶生成tints.dev
Pigment (StackBlitz)AI 配色 + 代码导出pigment.supply
Leonardo (Adobe)基于对比度的调色leonardocolor.io

配色实践

快速建立品牌色

1. 选定一个主色(Primary)
2. 基于主色生成 10 级色阶(50–950)
3. 选择互补或类似色作为 Secondary
4. 灰色中性色(Neutral)用于文本和背景
5. 语义色:Success (绿)、Warning (橙)、Error (红)、Info (蓝)
6. 验证对比度(WCAG AA 最低)
7. 测试深色模式

常见错误

错误正确做法
纯黑 #000 作为文本色使用 #1A1A1A 或 #212121
深色模式直接反转颜色降低饱和度、提高亮度
只用一个主色至少准备 primary + neutral
忽略无障碍对比度至少满足 WCAG AA
硬编码颜色值使用 CSS 变量 / Design Token

参考资料