oklab 在 css 渐变中完全不可用,因主流浏览器均未实现 oklab() 函数,声明会被整条丢弃;oklch 是唯一已支持的感知均匀颜色空间,但需手动分段处理色相断点并提供 fallback。

OKLAB 在 CSS 中不能用于渐变——oklab() 函数目前未被任何主流浏览器实现,写进 linear-gradient() 里会被直接忽略,连降级机会都没有。
为什么 oklab() 在渐变里根本不起作用
你查规范会看到 lab() 和 oklab() 都被定义在 CSS Color Level 4,但现实是:截至 2026 年 9 月,Chrome、Firefox、Safari 全部不支持 oklab() 作为颜色值出现在任何属性中(包括 background、color 或渐变色标)。写 linear-gradient(oklab(0.5 0.1 0.2), oklab(0.5 0.3 0.1)) 的结果是整条声明被丢弃,回退到上一条 background 声明(如果有的话),否则就是透明。
-
oklch()是唯一已落地的感知均匀颜色函数,Chrome 111+、Firefox 121+、Safari 17.4+ 支持 -
oklab()的 L/a/b 参数没有色相角,无法表达“从红到紫”的方向感,渐变插值逻辑天然缺失 - 所有声称“用 oklab 实现渐变”的文章,实际运行时 fallback 的都是 HSL 或 RGB,不是 oklab
oklch() 渐变必须手动拆分色相断点
OKLCH 渐变不是设好首尾就能平滑过渡。浏览器不做色相短弧优化,oklch(0.6 0.25 350) → oklch(0.6 0.25 10) 会走 350→360→0→10,中间经过低色度灰带。必须人工打断:
background: linear-gradient( to right, oklch(0.6 0.25 350), oklch(0.6 0.25 360), oklch(0.6 0.25 0), oklch(0.6 0.25 10) );
- 色相差 ≤180° 可直连;>180° 就得分段,每段跨角 ≤180°
- 不要依赖小数位“自动归一”,
360和0必须显式写出 - 分段后各 stop 位置建议用百分比锚定,比如
oklch(...) 25%,避免容器缩放导致过渡偏移
OKLCH 渐变的 fallback 不是可选项,是必填项
不提供 fallback,老浏览器或 WebView 里元素会变成透明或继承背景色,而不是“显示成旧颜色”。而且 fallback 必须写在 @supports 外面、上面:
button {
background: linear-gradient(to top, #ff9e3b, #7c3aed);
}
@supports (background: linear-gradient(oklch(0% 0 0), oklch(0% 0 0))) {
button {
background: linear-gradient(
to top,
oklch(0.75 0.22 45),
oklch(0.52 0.14 315),
oklch(0.35 0.08 280)
);
}
}
-
@supports检测值必须带单位:oklch(0% 0 0),不能写oklch(0 0 0) - 检测不能用
not,安卓 WebView 对@supports not解析不稳定 - fallback 渐变建议用
hsl()而非rgb(),更易保持暖→冷结构
真正难的不是写对 OKLCH,而是判断哪一段色相该拆、拆几段、每段用什么 L/C 值来维持视觉节奏——这些没法靠工具自动生成,得盯着预览反复调。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











