color-mix() 在旧浏览器中被静默忽略而非报错;@supports 必须用完整参数检测,如 @supports (background: color-mix(in srgb, red, blue));不支持变量、calc() 和动态伪类,且色彩空间需显式声明。

color-mix() 在旧浏览器里不是“解析失败”,而是被整个忽略
它根本不会触发语法错误,也不会报 warning——CSS 解析器遇到不认识的函数名,直接跳过整条声明。比如写 color: color-mix(in srgb, red, blue);,在 Safari 16.3 或 Chrome 110 里,这行等于不存在,最终取继承色或用户代理默认值(深色背景下文字常变黑不可读)。
@supports 检测 color-mix() 的写法很容易踩空
写成 @supports (color-mix: ) 或 @supports (color: color-mix()) 都不行:前者语法不合法,后者会被所有浏览器当解析错误丢弃。真正能用的只有带完整参数的字符串形式:
@supports (background: color-mix(in srgb, red, blue))- 更稳的是检测基础色函数:
@supports (color: oklch(0% 0 0))
注意:Firefox 直到 119+ 才支持 oklch(),且需开启 layout.css.color-mix.enabled 标志;Chrome 111+ 和 Safari 16.4+ 才默认启用。
color-mix() 输入不支持变量和 calc(),连预处理都救不了
PostCSS 插件如 postcss-color-mix 只能处理字面量颜色(如 red、#ff0000),一旦出现 var(--primary) 或 calc(50% + 10%),插件就无法展开,最终仍会静默失效。
- 权重必须是
<percentage></percentage>或<number></number>,不能省略(red 50%✅,red❌) - 色彩空间必须显式声明:
in srgb或in oklch,否则 Firefox 默认按srgb-linear,Chrome/Safari 按srgb,结果偏灰 - fallback 必须前置同一属性内:
color: #3a5fc7; color: oklch(0.6 0.2 240);—— 拆到不同媒体查询或 class 里就失效
别把它当 mix() 替代品,二者根本不在一个维度
mix()(Sass)是编译期确定值,输出静态 #xxx;color-mix() 是运行时计算,依赖浏览器引擎支持,且受色彩空间影响极大。用 in srgb 混合深色+亮色,极易明度塌陷;改用 in oklch 虽更符合人眼,但 fallback 的 hex 值还得手动校验视觉等效性——蓝紫/高饱和绿区域在 sRGB 下天然发灰。
真正容易被忽略的是:它不能用于 :hover 或动画中动态重算,部分 Safari 版本对伪类里的 color-mix() 有延迟或跳变,目前仍属实验性行为。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











