颜色格式与色彩理论入门:HEX / RGB / HSL / HSV / CMYK 原理与配色方案

颜色是什么

在物理层面,颜色是人眼对可见光(波长约 380-740nm)的感知。不同波长的光刺激视网膜上三种视锥细胞(分别对长波、中波、短波敏感),大脑将其组合为颜色知觉。

但在数字世界里,颜色是一组数值。同一种「红色」在不同软件、不同设备上可能用不同的数值表示,理解这些数值与转换关系,是设计师与前端工程师的基本功。

主流的颜色表示法有 5 种:HEX、RGB、HSL、HSV、CMYK。每种都有自己的适用场景与局限,本文配套的在线颜色格式转换工具可让你边读边试。

HEX:网页最常用的十六进制

HEX 是十六进制颜色表示法,网页标准格式为 #RRGGBB,6 位字符按红、绿、蓝顺序,每两位 00-FF 表示该通道强度(0-255)。例如:

#FF0000  纯红
#00FF00  纯绿
#0000FF  纯蓝
#FFFFFF  纯白
#000000  纯黑
#2B6CFF  品牌蓝

也支持简写 #RGB,每位重复一次:#F00 = #FF0000。CSS 还支持 8 位带透明度 #RRGGBBAA,但兼容性不如 rgba() 函数。

优点:紧凑、URL 友好、设计师与开发者都熟悉。 缺点:人眼难以直接读出「这是什么颜色」,调整明暗不如 HSL 直观。

RGB:加色模型

RGB(Red, Green, Blue)是加色模型——三色光相加为白光。这是屏幕显示的物理基础:每个像素由红绿蓝三个发光点组成,分别控制强度合成任意颜色。

CSS 标准格式:

color: rgb(43, 108, 255);       /* 整数 0-255 */
color: rgb(17%, 42%, 100%);     /* 百分比 0-100% */
color: rgba(43, 108, 255, 0.5); /* 带 alpha 透明度 */

新语法用斜杠分隔透明度:rgb(43 108 255 / 50%),更符合现代 CSS 规范。

优点:与硬件直接对应,转换无歧义。 缺点:调整明暗时三个值要同步变化,不直观。

HSL:人眼直觉的色彩模型

HSL(Hue, Saturation, Lightness)是面向人的颜色表示法:

  • H(色相 Hue):0-360°,色环角度。0=红,60=黄,120=绿,180=青,240=蓝,300=品红
  • S(饱和度 Saturation):0-100%,0% 灰色,100% 纯色
  • L(亮度 Lightness):0-100%,0% 黑,50% 纯色,100% 白

CSS 支持 HSL:

color: hsl(220, 100%, 58%);       /* 品牌蓝 */
color: hsla(220, 100%, 58%, 0.5); /* 带透明度 */

新语法:hsl(220 100% 58% / 50%)

优点:调色直觉——保持 H 不变,调 S 控制鲜艳度,调 L 控制明暗。同一个 H 下,不同 S/L 的颜色看起来仍是「同一个色相」。CSS 现代设计系统(如 Tailwind)大量使用 HSL。 缺点:HSL 的 L=50% 并不等于物理上的「中等亮度」,不同色相的视觉亮度差异很大(黄色看起来比蓝色亮)。

HSV:Photoshop 取色器的模型

HSV(Hue, Saturation, Value)也叫 HSB(Brightness),与 HSL 仅差第三维:

  • H、S 与 HSL 相同
  • V(明度 Value):0-100%,0% 黑,100% 纯色(不是白

关键差异:HSL 的纯白在 L=100% 但 S 可任意;HSV 的纯白在 V=100% 但 S=0。

颜色HSLHSV
纯红hsl(0, 100%, 50%)hsv(0, 100%, 100%)
白色hsl(0, 0%, 100%)hsv(0, 0%, 100%)
黑色hsl(0, 0%, 0%)hsv(0, 0%, 0%)
浅红(加白)hsl(0, 100%, 75%)hsv(0, 33%, 100%)
暗红(加黑)hsl(0, 100%, 25%)hsv(0, 100%, 50%)

「加白」与「加黑」在两种模型中调整的字段不同:HSL 改 L(亮度),HSV 改 S(饱和度)或 V(明度)。

CSS 不支持 HSV,但 Photoshop / Figma 的取色器使用 HSV。设计师在软件里调好的 HSV 数值,前端用 CSS 时需转为 HSL 或 RGB。

CMYK:印刷四色减色模型

CMYK(Cyan 青、Magenta 品红、Yellow 黄、Key 黑)是减色模型——油墨吸收光线,三色相加接近黑(实际是浊褐色,故加纯黑 K 提升对比)。

CMYK 是百分比格式:cmyk(83%, 58%, 0%, 0%) 表示青 83%、品红 58%、黄 0%、黑 0%。

优点:直接对应印刷油墨配比。 缺点:色域比 RGB 小,许多亮色无法印刷;网页设计几乎不用 CMYK。

RGB 与 CMYK 不能完全互转:数学上可以转换,但实际印刷前需做色域映射(gamut mapping)+ ICC 配置文件,否则亮色失真变浊。本工具的转换是数学等价,未做色彩管理,仅作参考。

五种格式的转换关系

所有转换以 RGB 为中介:

HEX  ⇄  RGB  ⇄  HSL

          HSV, CMYK

核心算法(简化版):

// HEX → RGB:每两位解析为 0-255
function hexToRgb(hex) {
  const h = hex.replace('#', '');
  return {
    r: parseInt(h.slice(0, 2), 16),
    g: parseInt(h.slice(2, 4), 16),
    b: parseInt(h.slice(4, 6), 16),
  };
}

// RGB → HSL:归一化后求最大/最小值,按公式计算
function rgbToHsl({ r, g, b }) {
  const rN = r / 255, gN = g / 255, bN = b / 255;
  const max = Math.max(rN, gN, bN);
  const min = Math.min(rN, gN, bN);
  const d = max - min;
  let h = 0;
  if (d !== 0) {
    if (max === rN) h = ((gN - bN) / d) % 6;
    else if (max === gN) h = (bN - rN) / d + 2;
    else h = (rN - gN) / d + 4;
    h *= 60;
    if (h < 0) h += 360;
  }
  const l = (max + min) / 2;
  const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
  return { h: Math.round(h), s: Math.round(s * 100), l: Math.round(l * 100) };
}

// RGB → CMYK:先求 K = 1 - max(rN, gN, bN),再按比例计算
function rgbToCmyk({ r, g, b }) {
  const rN = r / 255, gN = g / 255, bN = b / 255;
  const k = 1 - Math.max(rN, gN, bN);
  if (k === 1) return { c: 0, m: 0, y: 0, k: 100 }; // 纯黑
  return {
    c: Math.round((1 - rN - k) / (1 - k) * 100),
    m: Math.round((1 - gN - k) / (1 - k) * 100),
    y: Math.round((1 - bN - k) / (1 - k) * 100),
    k: Math.round(k * 100),
  };
}

HSL → RGB、HSV → RGB 涉及 6 个色相区间分段函数,代码较长,本文从略。完整实现可参考配套工具的源码(DevTools 即可查看)。

五种和谐配色方案

选定主色后,如何延伸出整套配色?色彩理论给出了 5 种标准方案,对应色相的不同旋转角度:

1. 互补色(Complementary)— ±180°

主色 + 对角色,2 色。对比最强烈,适合「主色 + 强调色」组合。例如蓝色背景配橙色 CTA 按钮,转化率最高的经典搭配。

2. 类似色(Analogous)— ±30°

主色 + 邻近色,3 色。和谐统一,适合背景渐变、数据图表系列。例如品牌主色用蓝紫色,辅助色用蓝色与紫色,过渡自然。

3. 三角色(Triadic)— ±120°

主色 + 两个等距色,3 色。平衡又活泼,适合多区域布局。例如红 / 黄 / 蓝三色,儿童网站常用。

4. 分割互补(Split-Complementary)— 180° ± 30°

主色 + 互补色两侧 30°,3 色。比互补色柔和,对比但不刺眼。例如蓝色 + 黄橙色 + 红橙色,丰富又不冲突。

5. 四角色(Tetradic / Rectangle)— ±90° / ±180°

主色 + 三个等距色,4 色。丰富多样,适合多主题配色。例如红 / 黄 / 绿 / 蓝四色,数据可视化多系列。

所有方案保持当前颜色的饱和度与亮度,仅旋转色相,保证整体明暗一致。

实战建议

网页设计

  • 主色(Primary)选 1 个,对应品牌识别
  • 强调色(Accent)选互补色或分割互补色,用于 CTA 按钮
  • 中性色(Neutral)用灰色系,不参与色相旋转
  • 暗色模式:保持 H 不变,L 调到 20-30% 之间

配色生成流程

  1. 颜色转换工具中输入主色 HEX(或用拾色器选色)
  2. 查看下方 5 种和谐方案,选最契合产品调性的
  3. 点击色块设为当前色,再生成下一级配色
  4. 复制 HEX 到 CSS 变量 / Figma / Sketch

前端实现

:root {
  --color-primary: hsl(220, 100%, 58%);       /* 品牌蓝 */
  --color-primary-hover: hsl(220, 100%, 48%);  /* L 降 10% */
  --color-accent: hsl(40, 100%, 58%);         /* 互补色 */
  --color-bg: hsl(220, 20%, 98%);             /* 同色相浅背景 */
  --color-text: hsl(220, 20%, 20%);           /* 同色相深文字 */
}

用 HSL 而不是 HEX 的好处:调明暗只改 L,调色相只改 H,调饱和度只改 S,互不干扰。

常见陷阱速查

陷阱原因解决
设计软件颜色和网页不一致用了 Display P3 / Adobe RGB 色域网页用 sRGB,导出前转换色彩空间
HSL 数值和 Photoshop 取色器对不上Photoshop 用 HSV,不是 HSL用本工具对照转换
CMYK 印刷出来颜色变浊RGB 亮色超出 CMYK 色域印刷前用专业软件做色域映射
互补色对比太刺眼互补色饱和度过高降低互补色饱和度或用分割互补
暗色模式颜色看起来「灰」直接调低 L 会让 S 也变化保持 S 不变,L 调到 20-30%
文字在彩色背景上看不清没考虑相对亮度用 WCAG 标准,亮背景配黑,暗背景配白
配色方案看起来杂乱用了过多色相限制在 1 主色 + 1 强调色 + 中性灰

小结

  • HEX 是网页最常用格式,紧凑但难调;RGB 是硬件原生格式;HSL 面向人直觉调色
  • HSL 与 HSV 仅差第三维(L vs V),Photoshop 用 HSV,CSS 用 HSL,数值不能直接互换
  • CMYK 是印刷四色,色域比 RGB 小,互转需色彩管理
  • 五种格式可通过 RGB 中介互转,本工具已实现完整转换链
  • 五种和谐配色方案基于色相旋转:互补(180°)、类似(30°)、三角(120°)、分割互补(150°/210°)、四角(90°/180°/270°)
  • 网页设计用 HSL 调色最方便,调明暗只改 L,调色相只改 H

读完本文,可用配套的在线颜色格式转换工具实操:输入一个品牌色,观察五种格式互转,挑选合适的配色方案,复制 HEX 到 CSS 即可。