三角色颜色方案生成器

在色环上相隔 120 度取三个色相:H、(H+120)%360、(H+240)%360,再把每组 HSL 按标准公式转成 RGB 输出六位十六进制。默认 H=210、S=65%、L=50%,得 #2D7FD2、#D22D80、#80D22D 三色。页面同时给出每色的感知亮度与相对亮度,附二十行色相速查表与批量取色,全程本地计算不上传。

三个色相相隔 120 度,HSL 的 L 相同,但 Rec.709 感知亮度可以相差近一倍。

默认示例:基准色相 210°、饱和度 65%、明度 50%。批量框每行写一个六位色值,允许带或不带井号,三位缩写会被拒绝;清空后点「生成三角色」会填回示例。

使用方法

  1. 「基准色相 H」默认 210,单位度,范围 0 到 360,可用方向键按 0.1 度微调。改动任意一栏、或光标停在输入框里按回车,都会立刻重算。
  2. 「饱和度 S」默认 65、「明度 L」默认 50,都是百分比。三色共用同一组 S 与 L,只改 H,这是三角色与「随便挑三个色」的区别。
  3. 「亮度小数位」默认 4,只影响感知亮度与相对亮度的显示位数,不影响色值输出。
  4. 「批量取色」默认写好五行,每行一个六位十六进制色值。工具先把色值反解成 HSL,取出 H,再按同一个 120 度规则展开;按 Ctrl+Enter(Mac 上 Cmd+Enter)一次算完。
  5. 结果区先给基色与三个色相角度,再逐行列出三色的十六进制、RGB、感知亮度与相对亮度,最后一行是亮度极差——它告诉你这三个色里最亮和最暗差多少。
  6. 色块条把三色并排显示,方便直接比较明暗。三色按「主色 + 两个辅色」排列,第一个是基准色。
  7. 下方是二十行色相速查表,默认显示 12 行,点「加载更多」展开余下 8 行;「导出 CSV」把全部二十行存成带字节序标记的文件。
  8. 色相、饱和度、明度留空或不是数字、超出各自范围,小数位不是 0 到 4 的整数,批量行不是六位十六进制(三位缩写、缺井号以外的字符、位数不对),都会给出写明行号与原因的具体提示。

这个三角色颜色方案生成器能解决什么

配色最省事的一类方案就是三角色:在色环上均匀取三个点,彼此相隔 120 度。它比互补色多一个色,比随便挑三色多一层秩序,因此既够跳、又不至于失控。这一页做的就是把「选一个基色」这一步直接折成完整三色,并把每色的亮度一起摆出来。

第一类是给品牌或活动定主视觉。手头只有一个品牌色,比如 #3498DB,输入后立刻得到 #3498DB、#DB3498、#98DB34 三色,可以直接拿去做主色、强调色与辅助色。三色的 HSL 明度完全一致,所以放在一起不会有某一色特别突兀。

第二类是数据可视化取色。三个系列要保证彼此可区分,三角色天然满足:色相相距 120 度,人眼基本不会混淆。这一页顺带给出每色的感知亮度,三色分别是 135.5774、94.7242、192.6984,差距明显,即使转成灰度图也能靠明度区分。

第三类是排查「配色看着别扭」的原因。三角色最典型的毛病是三色亮度差太大:默认 H=210 这组,最亮 180.7886、最暗 85.8470,极差接近一倍。等面积平铺会显得吵,正确做法是保留一色为主、另两色降饱和或缩小面积点缀。

还有一类边界要说清:三角色只解决色相关系,不解决可读性。文字与背景的对比要按 WCAG 的相对亮度与对比度单独核算,那需要线性化而不是直接读 HSL 的 L;本页给出的相对亮度可以直接用于这类核算。

计算原理与变量说明

三角色的定义只有一句话:三个色相在色环上均匀三分,即 H、(H+120)%360、(H+240)%360。三组共用同一对 S 与 L,所以三色在 HSL 空间里只差一个坐标。这里的取模是真正的取模运算,H=280 时第三色是 (280+240)%360=160,而不是 520。

HSL 转 RGB 走标准分段式。先算 q = L < 0.5 ? L×(1+S) : L+S−L×S 与 p = 2L − q,再对每个通道按 t 落在 [0,1/6)、[1/2,2/3)、[2/3,1) 等区间分段求值,其中 t 分别取 H/360+1/3、H/360、H/360−1/3。最后把 0~1 的值乘 255 并四舍五入,拼成六位十六进制。先转 RGB 再转十六进制是必须的,反过来无法保证位深一致。

量符号算式默认值
基准色相H输入,0 ~ 360 度210°
三色相H1..3H、(H+120)%360、(H+240)%360210°/330°/90°
饱和度S输入,0 ~ 100 百分比65%
明度L输入,0 ~ 100 百分比50%
感知亮度Y0.2126R + 0.7152G + 0.0722B115.8643
相对亮度Lw先线性化再按同系数加权0.2052950078
亮度极差ΔYmax(Y) − min(Y)94.9416

同样的 L,感知亮度可以差一倍。这是本页真正的技术内核。HSL 的 L 只是 (max+min)/2,与人的明度感受无关;真正贴近视觉的是 Rec.709 加权 Y = 0.2126R + 0.7152G + 0.0722B,绿色权重是蓝色的近十倍。所以 L 同为 50% 时,黄绿色 #80D22D 的 Y 是 180.7886,而品红 #D22D80 只有 85.8470——在色环上转 120 度,亮度就翻了一倍多。这也解释了为什么三角色直接等面积平铺会显得吵。

相对亮度必须先线性化。WCAG 的相对亮度不能直接用 0~255 的数值加权,因为 sRGB 是 gamma 约 2.2 的非线性编码。先把通道归一化到 0~1,再按 c ≤ 0.04045 取 c/12.92,否则取 ((c+0.055)/1.055)^2.4 还原成线性光,最后加权。中灰 (128,128,128) 归一化是 0.502,线性化后只有 0.2158605001,差了一半多——这个落差就是 gamma 的体现。

反向取色只取 H。给一个色值反解 HSL 时,S 与 L 沿用色值自身的取值,不套用上方滑块。这样 #3498DB 反解出的 H=204.1、S=69.87%、L=53.14%,展开后第一个色必然回到 #3498DB 本身,可以当作自检。

色相是圆周量。H=0 与 H=360 是同一个色,所以取模后不需要再归一化;但浮点数取模可能给出 359.99999 这样的值,本页在显示时统一保留一位小数,避免出现 360.0 与 0.0 两个写法。

完整示例(数值仅作演示)

默认一组:H=210、S=65%、L=50%,三个色相是 210.0°、330.0°、90.0°,输出 #2D7FD2 #D22D80 #80D22D。对应的 RGB 依次是 (45,127,210)、(210,45,128)、(128,210,45),感知亮度 115.8643、85.8470、180.7886,极差 94.9416。

H=210, S=0.65, L=0.50
q = 0.50 + 0.65 − 0.50×0.65 = 0.8250
p = 2×0.50 − 0.8250 = 0.1750
R 通道 t = 210/360 + 1/3 = 0.9167 → 落在 [2/3,1) → 取 p = 0.1750 → 45
G 通道 t = 210/360 = 0.5833 → 落在 [1/2,2/3) → p+(q−p)(2/3−t)×6 = 0.5000 → 127
B 通道 t = 210/360 − 1/3 = 0.2500 → 落在 [1/6,1/2) → 取 q = 0.8250 → 210
⇒ #2D7FD2

批量五行:#3498DB 反解 H=204.1 得 #3498DB #DB3498 #98DB34;#E74C3C 反解 H=5.6 得 #E74C3C #3CE74C #4C3CE7;#2ECC71 反解 H=145.4 得 #2ECC71 #712ECC #CC712E;#2D7FD2 反解 H=210.2 得 #2D7FD2 #D22D7F #7FD22D;#9B2DD2 反解 H=280.0 得 #9B2DD2 #D29B2D #2DD29B。每行的 S 与 L 都取自该色值自身。

极端值有两个:S=0 时三色全部退化成同一个灰,因为没有色度可转;L=0 或 L=100 时三色也全部退化成纯黑或纯白。这两组输入不算错误,但输出没有配色意义。

三角色相速查表

下表固定取 S=65%、L=50%,每 18 度取一个基准色相,共二十行。后三列由本页同一套公式算出:三色的感知亮度取最大值、最小值与两者之差。整行扫下来可以看出亮度极差随基色相起伏,最小的一组是 H=216 附近。

基色相 H三色十六进制最亮 Y最暗 Y亮度差
0°#D22D2D #2DD22D #2D2DD2163.169456.5922106.5772
18°#D25E2D #2DD25E #5E2DD2166.759567.163799.5959
36°#D2902D #2DD290 #902DD2170.349777.735292.6145
54°#D2C22D #2DD2C2 #C22DD2186.553488.306898.2467
72°#B1D22D #2DB1D2 #D22DB1191.360289.4372101.9230
90°#80D22D #2D7FD2 #D22D80180.788685.847094.9416
108°#4ED22D #2D4ED2 #D22D4E170.217180.301089.9161
126°#2DD23D #3D2DD2 #D23D2D164.366160.1160104.2501
144°#2DD26F #6F2DD2 #D26F2D167.956370.687597.2687
162°#2DD2A1 #A12DD2 #D2A12D171.546481.259190.2873
180°#2DD2D2 #D22DD2 #D2D22D198.407891.8306106.5772
198°#2DA1D2 #D22DA1 #A1D22D187.836388.240599.5959

第二张表把三角色与几类相邻方案摆在一起,便于确认自己要的到底是哪一个。它们的差别全部落在第二个与第三个色相的偏移角上。

方案第二个色相第三个色相视觉特征
三角色+120°+240°对比强、三色平权
互补色+180°—两色对撞,最强
分裂互补+150°+210°比互补缓和
四方色+90°+270°四色环绕,最难控

结果边界、舍入与适用说明

常见问题

三角色具体是哪三个角?

色相 H、(H+120)%360、(H+240)%360。也就是把 360 度的色环三等分,相邻两色相差 120 度。取模保证结果落在 0 到 360 之间。

为什么三个色的 L 相同,看起来却一个比一个亮?

因为 HSL 的 L 只是 (max+min)/2,不含人眼的光谱敏感度。贴近视觉的是 Rec.709 加权亮度,绿色权重 0.7152、蓝色只有 0.0722。默认 H=210 这组三色的感知亮度分别是 115.8643、85.8470、180.7886,最亮的是黄绿色。

从已有色值出发怎么算?

把六位十六进制拆成 R、G、B 三个 0~255 的值,反解出 HSL 的色相 H,再按 +120、+240 展开。反解时 S 与 L 沿用该色自身的取值,所以第一个输出色一定等于输入色。

三角色和互补色、分裂互补有什么不同?

互补色是 H 与 H+180,只有两个色;分裂互补是 H+150 与 H+210,是对互补色的缓和;四方色是每 90 度取一个。三角色是每 120 度取一个,共三个色,对比强度介于互补与分裂互补之间。

三色怎么用才不刺眼?

不要等面积平铺。常见做法是选一色作主色占大面积,第二色作强调色占少量,第三色只用于点缀;或者把两个辅色的饱和度下调。本页给出的亮度极差可以作为参考:极差越大,越需要拉开面积比例。

输出的十六进制是几位的?

六位,不带井号前缀以外的短写形式。每个通道先四舍五入到 0~255 的整数,再转成两位大写十六进制,不足两位前面补零。

饱和度或明度调到 0 或 100 会怎样?

S=0 时三色全部退化成同一个灰;L=0 全部是纯黑,L=100 全部是纯白。这些输入不会被判为错误,但输出没有配色意义。

输入的数据会上传到服务器吗?

不会。HSL 与 RGB 的互转、亮度计算、查表与导出全部在本页的 JavaScript 里完成,没有发起任何网络请求,也不写入浏览器存储。

相关工具