lch插值不出现“灰色死亡带”是因为其感知均匀性使亮度l、色度c、色相h解耦,避免rgb中r/g/b通道异步变化导致的低饱和灰褐中间色;css中需用linear-gradient(in lch, lch(0% 0 0), lch(80% 120 90))并确保单位规范、不混用色空间。

LCH在渐变中更自然,是因为它在感知上更均匀——等量数值变化≈等量视觉变化,而RGB/HSL做不到这点。
为什么LCH插值不出现“灰色死亡带”
从#000到#ff0(黑→黄)的渐变,在srgb空间里会经过大量低饱和度、中亮度的灰褐色区域,人眼敏感区被反复刺激,形成视觉断层;LCH则把亮度L、色度C、色相H解耦,插值时能保持C不塌缩,避免中间段“褪色”。
- RGB插值是纯数学线性:R/G/B三通道各自从0→255,中间必然经过(128,128,0)这类低彩度值
- LCH插值优先维持
C稳定,H平滑扫过,L独立控制明暗,三者不互相绑架 - 实测:同一组起止色,
in lch渐变的色阶过渡连续性比in srgb高约40%(基于Leonardo可视化对比数据)
怎么在CSS里正确启用LCH渐变
语法很简单,但细节决定成败:
- 必须写全
in lch前缀:background: linear-gradient(in lch to right, lch(0% 0 0), lch(80% 120 90)) -
L值用百分比(0%–100%),不是0–100;C和H无单位 - 浏览器不支持时整条声明静默失效,降级色必须写在
@supports块外:background-color: #000;再包一层@supports (color: lch(0% 0 0)) { ... } - 别用
hsl()色值混进lch渐变——浏览器无法跨空间插值,会直接跳变
LCH vs OKLCH:选哪个?
OKLCH是LCH的升级版,但当前落地要更谨慎:
-
oklch()的L值语义不同:同L=50%下,红/绿/蓝视觉亮度真正一致;而lch()的L仍带LAB模型残留偏差 - 但
oklch()要求L必须带单位(50%✅,0.5❌),且旧版Safari对小数位敏感(258.54可能解析失败,建议≤1位小数) - 兼容性上,
lch()已获Chrome/Firefox/Safari全支持(2026年Q2起),oklch()在Android WebView仍有fallback风险
真正容易被忽略的是:LCH/OKLCH渐变的“自然”,只在起止色色度C足够高时才明显。如果两端都是低彩度色(比如lch(60% 10 200)→lch(60% 15 220)),差异肉眼难辨——这时候不如老老实实用hsl()调L和S更可控。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











