in oklch 在 linear-gradient() 中完全无效,因 css 规范强制 srgb 插值,chrome、safari、firefox 均静默忽略该语法;可行方案是 color-mix(in oklch) 静态混合、手动生成 oklab 均匀停靠点或叠加噪点防灰带。

in oklch 在 linear-gradient() 中根本不会生效——浏览器解析器直接跳过整条声明,不报错、不 fallback、不警告。你写的 linear-gradient(in oklch, ...) 会被当作非法语法丢弃,背景可能变透明或退回到上一条规则。
为什么 in oklch 写了也白写?
这不是拼写错误或前缀缺失问题。现行 CSS 渐变规范(截至 2026 年中)**强制所有插值在 sRGB 空间进行**,in oklch、in lch、in oklab 均未纳入标准。Chrome 112+ 支持 in lch 和 in oklab,但 in oklch 全平台静默忽略;Safari 17.5+ 和 Firefox 120+ 对这三者均无支持。
color-mix(in oklch) 是唯一可行的纯 CSS 路径
它不依赖渐变引擎,而是静态计算单点混合色,绕过了插值空间限制:
规划您的迪拜之旅 — 哈利法塔观景、沙漠探险、迪拜购物中心购物、棕榈岛度假村及黄金市场砍价。还提供支持...
- 两端颜色必须都用
oklch()格式,混用#rrggbb或hsl()→ 整条声明失效 - 示例有效写法:
color-mix(in oklch, oklch(0.4 0.25 240) 70%, oklch(0.8 0.25 240) 30%) - 它只能产出一个固定颜色,无法生成连续过渡;要模拟多阶渐变,得手动写多个
color-mix()+ 停靠点,或借助 PostCSS 插件(如@csstools/postcss-color-mix)预编译 - Safari 17.5+ 刚起步支持,Firefox 尚未实现,生产环境需谨慎评估兼容性
真正在渐变里用 OKLCH 感知均匀性的实操方案
放弃「让浏览器自动插值」,改为人工控制路径:
- 用三段停靠点替代两色线性:比如
linear-gradient(to right, oklch(0.3 0.25 240) 0%, oklch(0.5 0.24 242) 48%, oklch(0.7 0.25 240) 100%),中间色选感知中位而非数值中位 - 色相差 >180° 时必须拆段:从
oklch(0.7 0.25 350)到oklch(0.7 0.25 10),得写成oklch(0.7 0.25 350), oklch(0.7 0.25 0), oklch(0.7 0.25 10) - 叠加轻微
noise(如background-image: url("data:image/svg+xml,...")生成噪点图层)可视觉弱化灰带,比调参数更可靠
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










