CSS color-mix() 预览 (插值空间对比)
现代 CSS 允许你用 `color-mix(in <space>, A <p>, B)` 混合两种颜色,选择的插值空间会极大改变结果。红色和蓝色在 `srgb` 中混合得到浑浊的紫灰;同样的混合在 `oklch` 中产生鲜艳的洋红;在 `hsl` 中则会扫过青色,因为色相沿色环短弧插值。该工具将同样的混合并排显示在 8 个常用空间 (`srgb`, `srgb-linear`, `hsl`, `hwb`, `lab`, `lch`, `oklab`, `oklch`) 中 — 使用浏览器原生 `color-mix()`,所见即所得。每张卡片显示当前比例的大色块、解析得到的 sRGB hex (通过将颜色画到 1×1 canvas 并读取像素计算)、以及显示从 A 到 B 完整路径的 11 步渐变条。拖动比例滑块,8 条路径同时动起来。点击任意卡片即可复制对应的 CSS 声明。
关于插值空间
color-mix() 在你指定的空间内对两种颜色做线性插值。sRGB 经过去饱和的灰色。srgb-linear 与物理光线相加 (照片合成) 一致。HSL/HWB/LCH/OKLCH 在色环上插值色相 — 默认走短弧。OKLab/OKLCH (Björn Ottosson, 2020) 感知均匀 — 数值上等距的步长看起来视觉间距也相等。每个色块下方的 hex 是浏览器解析混合后从 1×1 canvas 中读出的,所以与 getComputedStyle() 一致。
使用方法
- 用拾色器选定颜色 A 和颜色 B,或粘贴 hex。
- 拖动百分比滑块 — 这是混合中 A 的比例 (30% 表示 30% A + 70% B)。
- 对比 8 张卡片:色块是当前比例的结果,渐变条显示该空间下 A→B 的完整渐变。
- 点击任意卡片的复制图标,获取 `background: color-mix(in <space>, ...);` 声明。
- 试试预设 — 红↔蓝、黄↔蓝是 'srgb 为什么看起来很脏' 的经典案例。
常见问题
- 为什么每个空间的结果差这么多?
- color-mix() 做的线性插值,是在你选的坐标系中走一条直线。在 sRGB 里这条直线穿过去饱和的灰色,因为 sRGB 立方体的主对角线就是灰色。在 OKLCH 里同样的直线保持感知明度不变只旋转色相,所以保持鲜艳。在 HSL 里直线沿色相环最短路径走,可能经过 A 和 B 之间根本没有的颜色。哪个都不算错,只是几何结构不同。
- 应该用哪个空间?
- 大多数 UI 工作中,`oklch` 或 `oklab` 在感知上最佳 — 渐变亮度均匀、混合后仍鲜艳、没有浑浊的中间点。`srgb-linear` 对物理光线叠加 (照片合成) 正确。`srgb` 与旧工具和 2023 年前的 CSS 行为一致。`hsl` 仅在 A 和 B 饱和度·明度相同时适合做基于色相的调色板。除非特意要哑光效果,否则鲜艳色对避免直接用 `srgb`。
- 显示的 hex 准确吗?
- 正是浏览器计算出的值。颜色表达式被设为 canvas 的 `fillStyle`,渲染 1×1 像素,然后 `getImageData()` 读出真实的 sRGB 字节。所以你看到的 hex 与 `getComputedStyle()` 对该混合的解析值一致 — 在 8 位 canvas 量化误差 (每通道 ±1) 范围内。
- hue-shortest 与 hue-longest 呢?
- CSS 为色相相关空间 (hsl, hwb, lch, oklch) 支持 `longer hue` / `shorter hue` / `increasing hue` / `decreasing hue` 修饰符。本工具默认使用 (shorter hue) 以保持卡片简洁。如果需要长弧色相插值,自己加上修饰符: `color-mix(in oklch longer hue, A 50%, B)` — 同样的颜色,色环相反方向。
- 浏览器支持?
- color-mix() 在 Chrome/Edge 111+ (2023 年 3 月)、Safari 16.2+ (2022 年 12 月)、Firefox 113+ (2023 年 5 月) 推出。2023 年起的所有主流浏览器都支持这里列出的全部空间。如果出现不支持横幅,说明浏览器更旧 — CSS 仍能解析,但不会产生正确颜色。
相关工具
OKLCH 颜色选择器
在感知均匀的 OKLCH 空间(明度 · 色度 · 色相)中选色 —— 并查看每个选择是否落在 sRGB 显示色域内。
CSS 混合模式模拟器
把 W3C 合成规范的 16 种 mix-blend-mode(multiply·screen·overlay·soft-light·hue·color·luminosity 等)应用到两种颜色上,一览查看每种模式的混合结果与可复制的 CSS 片段。
颜色混合器
在 RGB、HSL 或 CIELAB 空间中插值两种颜色。查看中间过渡的 11 步渐变条。
颜色格式转换器
在 HEX、RGB、HSL、HSV、OKLCH 与 CSS 变量之间互转任何颜色。
颜色插值 / 渐变步进
选择两个 hex 颜色,获取 N 个离散中间步进 —— 在 sRGB、linear RGB、OKLab 或 HSL 中 —— 带可选缓动。
波长转颜色(nm → sRGB)
把光的波长(380–780 nm,可见光)转换为近似的 sRGB 颜色,附可点击的彩虹渐变条,以及来自真实太阳光谱的 Fraunhofer 吸收线参考表。