
lch 本身不比 rgb “更丰富”,它只是把 sRGB 色域里已有的颜色,用更符合人眼感知的方式重新组织;真正“更丰富”的是 display-p3 或 rec2020 这类广色域空间——而 lch 可以无缝适配它们。
lch() 的“丰富感”来自感知均匀性,不是色域扩张
很多人看到 lch(50% 100 240) 就以为能表达比 rgb(100, 150, 255) 更多的颜色,其实不是。sRGB 色域边界没变,lch 只是把同一块色域里的点,从立方体坐标(RGB)映射到柱面坐标(LCH),让 L(明度)、C(色度)、H(色相)三者近似正交。这意味着:
- 调整
C值时,视觉饱和度变化更线性——C: 30 → 60看起来确实是“更饱和”,而不是 RGB 里G: 100 → 200那种忽快忽慢的感知跳跃 - 做渐变时固定
L和C、只扫H,得到的是视觉上均匀的色相过渡;而rgb()插值会经过灰区,尤其在青→蓝→紫段容易发脏 -
lch()的数值和 WCAG 对比度计算中的相对亮度(luminance)强相关,L值约等于感知明度,但rgb()的 R/G/B 值完全不能直接反映这个
display-p3 才是真·更丰富:绿色/红色覆盖提升 15–20%
sRGB 是 1996 年定的老标准,而 display-p3(苹果设备默认、Chrome on macOS 支持)的色域三角形更大,尤其在绿色和红色区域。实测 ColorChecker 图卡:
- 同一组
lch(60% 80 120),在 sRGB 下可能被裁剪为lch(60% 72 120)(色度压低),但在 display-p3 下能完整渲染出饱满的翠绿 - 浏览器不会自动升格色域——你得显式声明:
color: color(display-p3 0.3 0.8 0.2);或color: lch(70% 95 140 / 1);(后者隐式依赖当前 color profile) - 没声明色域时,
lch()仍按 sRGB 解释;只有配合color(display-p3 ...)或现代 CSS 的 color-profile-aware 渲染链,才真正释放广色域能力
在 CSS 中安全使用 lch + display-p3 的关键条件
不是写了 lch() 就能用上 P3,必须满足三个前提:
- 目标设备支持 display-p3(MacBook Pro、iPhone X 及更新机型、部分高端 Windows 笔记本)
- CSS 中启用对应色域:
color: color(display-p3 0.2 0.9 0.4);或color: lch(65% 102 210);(后者需浏览器已知上下文 profile) - HTML 文档声明色彩管理:
<meta name="color-scheme" content="light dark">不够,要确保没被强制降级为 sRGB(如某些 CMS 自动插入image-rendering: -webkit-optimize-contrast会干扰) - 渐变或动画中混合 lch 和 rgb 会导致隐式色域回退——
background: linear-gradient(lch(50% 80 0), rgb(255, 0, 0));整条渐变都会 fallback 到 sRGB
真正容易被忽略的点:lch 的“丰富”是感知维度的,不是数据维度的;而 display-p3 的“丰富”是物理维度的。两者叠加才有意义,但叠加失败时,你连 sRGB 都不一定能稳稳守住——比如在旧版 Safari 里,lch() 会被静默忽略,直接回退到继承色。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











