HEX 和 RGB 都是对同一个颜色空间的两种记法,信息量完全相同;HSL 换了个角度,把颜色拆成色相、饱和度、明度三个可独立调节的维度。差别不在精度,在可操作性。

什么时候用 HEX

复制粘贴、设计稿交付、写死一个品牌色。它的优点是短、无歧义、能直接塞进任何地方。#RRGGBB 每两位一个通道,#RGB 是简写形式(#f00 等于 #ff0000)。

8 位写法 #RRGGBBAA 带透明度,但可读性差,团队协作里不如 rgb(0 0 0 / 50%) 直观。

什么时候用 RGB

需要按通道微调的时候,比如「蓝色通道再压一点让阴影偏暖」。以及做半透明叠加时,现代语法更清楚:

background: rgb(43 89 255 / 12%);

这个写法比 rgba(43,89,255,0.12) 短,也比 8 位 HEX 好读。

什么时候用 HSL

生成色阶、做 hover 态、构建主题变量。因为调色时人脑想的是「同一个色相,再深一点」,而不是「把 R 减 20」。

--brand:        hsl(227 100% 58%);
--brand-hover:  hsl(227 100% 50%);   /* 只改明度 */
--brand-subtle: hsl(227 100% 96%);   /* 只改明度,做浅底 */

同理,做禁用态通常是降饱和:hsl(227 20% 70%),比手动调灰更不容易跑偏。

HSL 的局限:感知亮度不均匀

HSL 的 L 是数学上的亮度,不是人眼感知的亮度。同样 L=50%,黄色看起来比蓝色亮得多。所以严格做设计系统时,HSL 生成的多色阶会显得参差不齐。

更现代的选择是 OKLCH:它的 L 接近感知亮度,同样 L 值下不同色相看起来明度一致。浏览器支持已经不错,降级方案是保留 HSL 变量作为 fallback。做小项目时用 HSL 足够,做多主题系统才值得引入。

一个实用检查

文字和背景的对比度是否达标,跟用什么格式无关,但调的时候容易忘。正文对比度至少 4.5:1,大号标题 3:1。用 HSL 微调时,把 L 拉开 40 个百分点以上通常才安全——浅灰字配白底是最常见的翻车点。

选择顺序:固定品牌色用 HEX,做透明度用 rgb 斜杠语法,做色阶和状态用 HSL。三种格式在颜色转换里可以互转,附色阶预览。