lch()在Safari 16.4+原生支持,但漏任一单位(L/C缺%、H缺deg)即整条声明被静默忽略,回退至上一条颜色;且CSS用D65白点,而Figma等工具输出D50值,青绿区色相偏移3–5°。

lch() 声明被 Safari 完全跳过,大概率是单位写错了
lch() 在 Safari 16.4+ 是原生支持的,但只要漏掉任一单位,整条声明就会被静默忽略——不是变灰,是彻底不生效。设计师给的数值(比如 lch(70 80 240))常省略单位,直接塞进 CSS 就失效。
-
L和C必须带%(70%✅,70❌) -
H必须带deg(240deg✅,240❌) - 任意一项缺单位 → 整条
color: lch(...)被跳过,回退到上一条有效颜色(比如color: #333)
Safari 用 D65 白点,Figma 给的是 D50,青绿区色相偏移 3–5°
Figma、Sketch 等设计工具默认导出 LCH 值基于 D50 白点,而 CSS 的 lch() 强制使用 D65。两者在蓝青到绿黄过渡带差异最明显,直接套用会导致按钮或图标看起来“偏紫”或“发闷”。
- 典型现象:Figma 里调好的
lch(60% 70 220deg),贴进 CSS 后在 Safari 中偏蓝,在 Chrome 中更接近预期 - 没有自动转换;需手动校准——可用 Björn’s OKLCH Picker 或 culori 库做 D50→D65 映射
- 若只用于装饰性元素(如背景、边框),偏差可容忍;用于品牌主色或文字时,必须重采样
@supports 检测在旧 Safari 上误报,别用它控制关键颜色
@supports (color: lch(0% 0 0deg)) 在 Safari 15.x 及部分 16.0–16.3 版本中会错误返回 true,导致现代语法被启用,但实际渲染失败,最终颜色丢失(继承黑色或透明)。
规划您的迪拜之旅 — 哈利法塔观景、沙漠探险、迪拜购物中心购物、棕榈岛度假村及黄金市场砍价。还提供支持...
- 这不是 bug,是解析器对未完全实现语法的宽松判断
- 仅建议用于非关键装饰色(如 hover 边框、阴影),绝不用于正文文字、按钮填充等核心 UI 元素
- 真正稳妥的 fallback 是在同一选择器内前置传统值:
color: #4a6fa5; color: lch(60% 18 250deg);
混用 lch() 和 rgb() 在渐变里会触发 sRGB 回退
哪怕只在一个 linear-gradient() 停靠点用了 lch(),其余用 rgb() 或 #hex,整个渐变仍走 sRGB 插值——中间必然发灰,和没用 LCH 一样。
立即学习“前端免费学习笔记(深入)”;
- 错误写法:
linear-gradient(to right, lch(60% 70 240deg), #0066cc)→ 第二个色被转成 sRGB,插值崩坏 - 正确做法:全部停靠点统一为
lch(),且用color-mix(in lch, ...)手动插入中间点 - 注意:
color-mix()两端也必须同为lch(),混用即整条失效

















