Skip to content

颜色转换器 — HEX、RGB、HSL 与 OKLCH

在浏览器中将 HEX 转 RGB、HSL、OKLCH、OKLAB 与 CMYK,一键复制任意格式。免费、免注册,您的颜色永远不会离开本页。

无追踪 浏览器中运行 免费
所有颜色转换都在您的浏览器本地完成。任何数据都不会发送到任何服务器。
色域: sRGB Display P3 Rec2020
对比度对照:
AA AA-Lg AAA AAA-Lg · APCA Lc
色盲模拟(8 种类型)
红色盲(protanopia)
绿色盲(deuteranopia)
蓝色盲(tritanopia)
全色盲(achromatopsia)
红色弱(protanomaly)
绿色弱(deuteranomaly)
蓝色弱(tritanomaly)
部分色弱(achromatomaly)
Tints / Shades / Tones / Harmonies

浅色

深色

灰调

和谐色

复制为代码
常见颜色参考
已审核以满足 CSS Color 4 规范一致性、OKLAB 矩阵正确性、WCAG 2.x + APCA Lc 准确性,以及与 Brettel + Machado 已发表数值的 8 种 CVD 模拟一致性。 — Go Tools 工程团队 · 2026年5月27日

什么是颜色转换器?

颜色转换器是一个小型工具,把同一个颜色值在您的工具链、设计系统和浏览器真正认识的格式之间互译 —— HEX、RGB、HSL、HSV、HWB、CMYK、OKLCH、OKLAB,以及 148 个 CSS 命名颜色。自 2000 年代初起,在线转换器就一直是 Web 工具箱里的常驻成员,那时答案几乎总是一个为 Geocities 时代样式表准备的简陋 HEX-转-RGB 文本框。现代转换器与那些遗老工具的差距在三件事上:统一字段的 UX —— 每个格式同时可编辑,而不是单向下拉;OKLCH 单一事实源 —— 内部持有规范值,使往返保持比特稳定;以及扎根于 W3C CSS Color 4 的感知数学,而非 2003 一代沿用至今的、被 gamma 纠缠的 HSL 算术。

不同色彩空间存在的原因是不同问题需要不同表示,没有任何一个空间在所有问题上都好用。RGB 是硬件原生 —— 它直接映射到 LCD 的红绿蓝子像素或 CRT 的荧光粉,每个通道编码为 0 到 255 的 8 位整数。HEX 不过是用 16 进制写的 RGB,压成 6 字符字符串以便在 CSS 和 Figma 之间简短地复制粘贴。HSL、HSV、HWB 是面向设计师的认知空间 —— 它们是 RGB 的圆柱形重排,让您可以用直观的滑块旋转色相、变亮或变暗。HSL 由 Alvy Ray Smith 于 1978 年与 HSV 一同发表;HWB 在 1996 年作为更清晰的心智模型加入(色相 + 多少白 + 多少黑)。CMYK 是印刷工艺抽象 —— 一种减色的油墨堆叠(青、品、黄、黑/Key),建模的是油墨在纸张上吸收光的方式,而非屏幕发光的方式。OKLCH 和 OKLAB 是感知空间 —— 它们的设计目标是让相等的数值距离对应相等的感知距离,这使它们成为设计系统色阶和无障碍数学不可或缺的工具。命名颜色是 CSS 历史遗产:每个浏览器都内置的 148 个 SVG/CSS3 名称,如 `tomato`、`rebeccapurple`、`slategray`。

二十多年来,sRGB 一直「够用」—— 它是 1996 年的 IEC 标准,围绕当时 CRT 显示器荧光粉的原色构建。它默默地定义了一个 Web 颜色所能表达的上限。然后广色域显示器打破了这个假设。Apple 的 Display P3 比 sRGB 多覆盖大约 50% 的可见光谱,如今出现在 2017 年以后的每一台 iPhone、iPad、MacBook 中。Rec2020 覆盖更多,是 HDR TV 的广播标准。HSL 把 sRGB 的 gamma 怪癖深深嵌进了自己的定义,这就是为什么 HSL 色阶在广色域显示器上看起来不均匀 —— L=50% 的绿色看上去比 L=50% 的蓝色更亮,因为 HSL 的 L 是几何的,不是感知的。2020 年,Björn Ottosson 发表了 OKLAB —— 一个从 CIE-LAB 派生而来的感知均匀色彩空间,修正了亮度响应,并在高饱和度区域表现得更干净。OKLCH 是它的极坐标形式(感知亮度 / chroma / 色相),与 HSL 形状相同,但感知数学是修过的。CSS Color 4 在 2022 年加入了 `oklch()` 和 `oklab()` 语法;Chrome 111 于 2023 年 3 月发布支持,Safari 15.4 早在 2022 年 3 月就已有支持,Firefox 113 在 2023 年 5 月跟进。2025 年发布的 Tailwind v4 把 OKLCH 设为默认颜色 token 格式;不久之后 shadcn/ui 也跟进。本工具反映了这一转变 —— 把 OKLCH 作为内部事实源,每一次转换都途径 OKLCH,因此 HEX → RGB → OKLAB → HEX 的往返绝不会累积浮点漂移,直接编辑 OKLCH 的 L 通道也会精确地更新其他每一个字段。

您该选哪个空间,完全取决于您要做什么。**HEX** 是 Web 嵌入、设计工具与代码之间复制粘贴,以及任何需要简短标识符的场景的正确选择 —— `#3b82f6` 能舒服地放进 CSS 变量,大多数前端开发者一眼就能认出来。专用的 hex 转 RGB 转换器一步搞定最常见的单向转换;反向的 RGB 转 hex 转换器覆盖您从设计师或图像像素数学管线那里拿到独立通道整数的场景。**RGB** 用于直接寻址硬件 —— 任何需要 0–255 整数的地方(canvas API、图像处理、硬件 LED 灯带、OpenGL 颜色属性)。**HSL** 是面向设计师的传统认知空间 —— 旋转色相、变亮、变暗 —— 在尚未迁移到 OKLCH 的项目里做一次 CSS 颜色快调时仍然有用。当您只需要这一种单向转换时,单向的 hex 转 HSL 转换器是合适的捷径。**HSV 和 HWB** 是设计师取色器空间。HSV(Hue、Saturation、Value)与大多数取色器 UI 绘制的饱和度-Value 方块对齐,因此 Photoshop、Figma、Sketch 点击吸管时报告的是它。HWB 是更清晰的心智模型 —— 选一个纯色相,然后加白变浅或加黑变深 —— CSS Color 4 在所有常青浏览器中加入了原生 `hwb()` 支持。**CMYK** 用于印刷准备工作。一段不留情面的免责声明:我们的 CMYK 输出是基于 sRGB 的朴素近似,采用标准公式 `K = 1 - max(R,G,B); C = (1-R-K)/(1-K)`。真正的印刷准确度需要针对具体印刷机、油墨、纸张的 ICC 配置文件转换 —— 通常是 US Web Coated SWOP v2 或 Fogra39 —— 可能让通道偏移 5–15%。请把我们的 CMYK 当作起点估算,不是交付物。单向的 hex 转 CMYK 转换器沿用同一公式,带同样的注意事项。**OKLCH** 是 2025 年以及更远未来新代码的默认选择 —— 现代设计系统、有无障碍意识的调色板生成,以及任何感知均匀性重要的地方。单向的 hex 转 OKLCH 转换器是为了快速进行遗留调色板迁移而存在。**OKLAB** 是用于调色板数学的直角坐标兄弟:两色之间的中点、距离计算、色盲模拟矩阵,以及其他需要线性轴算术的运算。**命名颜色**用于文档、代码注释、原型与文案 —— 148 个 CSS 命名颜色是一份固定字典,工具会通过 OKLAB 空间下的 ΔE 距离为任意输入找出最接近的命名颜色。

所有这些背后的转换图定义清晰,而且出乎意料地干净。sRGB 和线性 sRGB 通过一条 W3C CSS Color 4 §11.2 规定的分段 gamma 曲线相连(大致是 2.4 指数,在接近 0 处带一段小的线性段)。线性 sRGB 与 CIE XYZ D65 通过 CSS Color 4 §15.1 中的固定 3×3 矩阵相连。XYZ D65 与 OKLAB 通过两个矩阵与一次立方根步骤相连(LMS 视锥响应阶段,按 Ottosson 2020 的方式)。OKLAB 与 OKLCH 之间是笛卡尔到极坐标的变换 —— `C = sqrt(a² + b²); H = atan2(b, a)`。HEX 不过是把 sRGB 序列化为 16 进制的 `#RRGGBB`。RGB ↔ HSL、RGB ↔ HSV、RGB ↔ HWB 都是 sRGB 内的直接几何变换,定义在 CSS Color 4 §5–7。CMYK 是上面那种基于 sRGB 的朴素公式。整条流水线在内部是一张以 OKLCH 为根的有向图;其他每一种格式都在每次按键时由它计算得出。

除了核心转换,本工具还提供了上一代工具没有的特性。**Display P3 与 Rec2020 色域检测** —— 三枚徽章标示当前颜色是否落在每个空间的可再现范围内,一键 **Snap to sRGB** 按钮使用二分 chroma 缩减(遵循 CSS Color 4 的信息性算法)把颜色收缩到合身。**WCAG 2 + APCA Lc 双对比度徽章** —— 两种指标并排显示,让您今天满足监管标准,同时用前瞻性的感知指标做 sanity check。**8 种色盲模拟** —— 红色盲、绿色盲、蓝色盲通过 Brettel-Viénot-Mollon 1997 二色觉矩阵实现;红色弱、绿色弱、蓝色弱通过 Machado-Oliveira-Fernandes 2009 异常三色觉矩阵(严重度 0.66)实现;全色盲与部分色弱通过 rec601 亮度权重实现。**OKLCH 感知均匀的调色板生成** —— 浅色(tints)、深色(shades)、灰调(tones)、和谐色(harmonies)通过在保持 C 与 H 不变的前提下,对 L 通道做等步长递增构建(与 Tailwind v4 默认调色板构造方式相同)。**CSS / Tailwind v4 / SwiftUI / Compose / Flutter 代码片段** —— 为跨团队团队最常瞄准的五个平台输出可粘贴格式。**EyeDropper API 集成** —— 在 Chromium 系浏览器(Chrome、Edge、Brave、Opera)上可在屏幕任意位置(包括浏览器之外)取色。**URL 哈希状态** —— 当前颜色以 `#hex=...` 或 `#oklch=...` 编码进 URL,可一键复制并分享指向同一颜色的实时链接。

本工具中的一切都在浏览器中本地运行。您的颜色值绝不会上传、绝不会被记录、绝不会被分析、绝不会被持久化到服务器。键入时零网络请求 —— 打开浏览器 DevTools 的 Network 标签亲眼看看:在任意字段中输入,完全没有任何流量。这让本工具可以放心用于尚未公布的品牌调色板、内部设计 token 系统、草稿稿件,以及任何其他保密的颜色工作。没有 cookie 记录您粘贴了什么;颜色变更不会触发任何分析。同样的姿态延伸到 URL 哈希:`#hex=...` 片段只活在您的地址栏里,永远不会传到服务器(浏览器不会把片段放进 HTTP 请求),因此即便共享链接,颜色也不会泄露给您发送对象之外的任何第三方。对于处理上线前品牌工作、禁运期营销活动或 NDA 下客户调色板的团队来说,这件事比便利性的卖点更重要。 想深入了解 OKLCH 为何在 2024–2026 年成为设计系统标准,请阅读配套指南:OKLCH 色彩空间详解 —— Tailwind v4 为什么采用它

// sRGB → linear → XYZ D65 → OKLAB → OKLCH
// References: W3C CSS Color 4 §11-15, Ottosson 2020 (https://bottosson.github.io/posts/oklab/)
// Worked example: #3b82f6 (Tailwind blue-500)

const srgb = [0x3b, 0x82, 0xf6].map(v => v / 255); // [0.231, 0.510, 0.965]

const toLinear = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
const lin = srgb.map(toLinear); // gamma-decoded linear-sRGB

// linear-sRGB → XYZ D65 (CSS Color 4 §15.1 matrix)
const [lr, lg, lb] = lin;
const x = 0.4124564 * lr + 0.3575761 * lg + 0.1804375 * lb;
const y = 0.2126729 * lr + 0.7151522 * lg + 0.0721750 * lb;
const z = 0.0193339 * lr + 0.1191920 * lg + 0.9503041 * lb;

// XYZ D65 → LMS (Ottosson 2020 matrix), cube-root, → OKLAB
const l_ = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z);
const m_ = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z);
const s_ = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.6338517070 * z);
const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;
const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;
const b = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;

// OKLAB → OKLCH (Cartesian to polar)
const C = Math.sqrt(a * a + b * b);
const H = (Math.atan2(b, a) * 180 / Math.PI + 360) % 360;
console.log(`oklch(${L.toFixed(3)} ${C.toFixed(3)} ${H.toFixed(1)})`);
// → oklch(0.629 0.193 263.4)

核心特性

9 种可同时编辑的色彩空间

每一种格式 —— HEX、RGB、HSL、HSV、HWB、CMYK、OKLCH、OKLAB,以及 CSS 命名颜色 —— 都是直接可编辑的字段,而不是单向下拉。键入 `oklch()` 值,HEX、RGB、HSL 全部更新;从 Figma 粘贴 hex,OKLCH 用匹配的感知坐标同步更新。您正在编辑的字段光标位置保持不动 —— 每次按键时只重渲染另外八个字段,因此编辑过程自然流畅。

OKLCH 单一事实源 —— 比特精确的往返

内部规范表示是 OKLCH —— OKLAB 的感知均匀极坐标形式(Ottosson 2020)。其他每一种格式都在每次按键时由它派生。这意味着 HEX → RGB → HSL → OKLAB → HEX 的往返不会浮点漂移 —— 原始 hex 原样回来。把转换走 HSL 或 sRGB 作枢轴的老式转换器会逐步累积舍入误差;本工具不会。

Display P3 + Rec2020 色域警告

三枚实时徽章(sRGB、Display P3、Rec2020)显示当前颜色是否落在每个空间的可再现范围内。当您用 OKLCH 工作、想知道哪些显示器能准确渲染该值时很有用 —— 许多 Tailwind v4 的 OKLCH 颜色超出 sRGB 但落在 P3 内,而 2017 年以后的大多数 Apple 设备都能渲染 P3。Snap to sRGB 按钮使用 CSS Color 4 的二分 chroma 缩减算法把颜色收缩到合身。

WCAG 2 + APCA 对比度并排显示

对白与对黑的对比度通过两个指标并排显示:用于当下监管合规的 WCAG 2.1 比率(4.5:1 = AA 正文文本,7:1 = AAA),以及前瞻性 WCAG 3 感知对比度算法的 APCA Lc 分数。APCA 对极性敏感(亮底深字与深底亮字加权不同),而 WCAG 2 的对称公式会算错。两者都用:WCAG 用于审计,APCA 用于真正的可读性。

覆盖 8 种缺陷类型的色盲模拟

三种二色觉(红色盲、绿色盲、蓝色盲)通过 Brettel-Viénot-Mollon 1997 矩阵实时预览;三种异常三色觉(红色弱、绿色弱、蓝色弱)通过 Machado-Oliveira-Fernandes 2009 矩阵在严重度 0.66 下实时预览;另加全色盲与部分色弱,使用 rec601 亮度权重。覆盖大约 8% 的男性与 0.5% 的女性 —— 您的设计需要保持可访问的目标人群。

OKLCH 感知均匀的浅色、深色、灰调与和谐色

调色板色阶通过在保持 chroma 和色相不变的前提下,对 L 通道做等量 OKLCH 递增生成 —— 与 Tailwind v4 使用的构造方式相同。结果在感知上均匀:400 与 500 节点之间的视觉间距与 500 到 600 之间一样,而 HSL 色阶无法保证。和谐色(补色、三分色、四分色、分裂补色)按精确角度旋转色相并保留 L+C。

复制为 CSS / Tailwind v4 / SwiftUI / Compose / Flutter

一键为跨团队团队最常交付的五个平台生成代码:CSS 自定义属性(`--color-brand: oklch(0.629 0.193 263.4)`)、Tailwind v4 `@theme` token、SwiftUI `Color(red:green:blue:)` 字面量、Jetpack Compose `Color(0xFF3B82F6)` 常量、Flutter `Color(0xFF3B82F6)`。每个平台所需的精确语法,可直接粘贴到品牌样式表、iOS 资源目录或 Android 主题中。

手工实现的 OKLCH 取色器(零依赖)

SL 方块 + 色相滑块 + alpha 滑块用纯 canvas + JavaScript 编写,没有任何外部取色器库。色相滑块上的 OKLCH 渐变由真实的 OKLCH 数学计算得出,而不是用 HSL 近似,因此拖动滑块产生的是感知均匀的色相旋转。整个交互层的打包重量不到 10 KB;即便冷加载首屏也很快。

100% 在浏览器中 —— 不上传、不跟踪

所有转换数学、调色板生成、对比度评分与色域检测都在您的浏览器本地运行。您的颜色值绝不会被传输、绝不会存储在服务器、绝不会被记录、绝不会被分析。键入时零网络请求 —— 可在 DevTools 中亲自验证。可放心用于尚未公布的品牌调色板、内部设计 token、草稿稿件以及任何其他保密的颜色工作。

颜色转换器替代品对比

ColorHexa

浏览器工具

长期存在的竞品,具有深度的逐颜色信息页 —— 为每个 hex 生成包含转换、调色板、和谐色与渐变的完整 SEO 页面。UI 显得陈旧(2010 年代初的审美),没有 OKLCH 支持,没有 APCA 对比度,没有广色域处理。对于通过搜索具体颜色(以「#FF5733」为搜索词)做 SEO 发现很强;在主动设计工作中表现较弱,那里统一字段 UX 才重要。

RapidTables

浏览器工具

提供广泛的单向转换器(HEX 转 RGB、RGB 转 HEX、HEX 转 HSL 等)外加其他单位工具。每个转换都是一个独立页面,带单向表单 —— 没有实时统一字段体验。没有 OKLCH 支持,没有色域警告,没有对比度检查。在您从 Google 搜索过来做一次性快速转换时有用;对于任何包含多步转换的工作流,本工具更快。

HTMLColorCodes

浏览器工具

界面干净、取色器与调色板生成器很强。取色器 UX 适合做可视化探索。转换器一侧较基础 —— 只有 HEX、RGB、HSL、HSV、CMYK;没有 OKLCH、没有 OKLAB、没有色域检测。当您需要可视化探索一个颜色的变化时最合适;本工具在您需要现代色彩空间或精确转换数学时胜出。

OKLCH.com

浏览器工具

由 Andrey Sitnik(postcss-oklab-function polyfill 作者)精心打造的 OKLCH 专用工具。在 OKLCH 专项探索上一流,具备广色域感知的取色器与调色板生成。不把 HEX/RGB/HSL/CMYK 转换作为主要输出 —— 专注 OKLCH 本身。当您在做纯 OKLCH 设计工作时选 OKLCH.com;当您需要跨空间转换时选本工具。

ConvertingColors

浏览器工具

覆盖多种色彩空间(HEX、RGB、HSL、HSV、CMYK、XYZ、CIELAB 以及若干其他),采用类似 ColorHexa 的逐颜色 SEO 内容页模式。缺乏现代 OKLCH 支持,没有 APCA 对比度,没有广色域处理,自动生成的内容页有内容农场气息。适合扒单个颜色的元数据;本工具在主动设计与无障碍工作上更快。

IT-Tools

开源浏览器工具

干净的、可自托管的 Vue 3 开发者工具集,颜色转换器是众多工具中的一个。整套套件的 UX 一致。颜色转换器覆盖 HEX、RGB、HSL、HSV、CMYK;没有 OKLCH、没有色域警告、没有对比度检查、没有色盲模拟。如果您想要一个自托管的多工具集合,值得本地运行;本工具是专注、深入、仅做颜色的方案。

W3Schools Color Converter

浏览器工具

在一个适合初学者的页面上做基本的 HEX/RGB/HSL 切换,在颜色转换器搜索中无处不在。没有 OKLCH,没有高级特性。作为教学参考、与 W3Schools 的讲解内容并排很有用。本工具在所有其他维度上都胜出:更多空间、感知数学、色域 + 对比度 + CVD 特性,以及现代 Tailwind v4 / SwiftUI / Compose / Flutter 代码导出。

颜色转换示例

Tailwind v4 品牌色 → OKLCH

#3b82f6

OKLCH 输出:`oklch(0.629 0.193 263.4)`。把它直接放进 Tailwind v4 的 `@theme` 块,写成 `--color-brand-500: oklch(0.629 0.193 263.4);`,色阶其余部分就会在感知上自动对齐。Tailwind v4 在 2024 年专门把默认调色板切到了 OKLCH,正是因为 L 通道能让不同色相的感知亮度保持一致 —— green-500 和 blue-500 看起来一样亮,而 HSL/RGB 色阶无法保证这一点。如果您还需要为老旧浏览器留一份回退值,原 hex 也会被原样保留。

Web hex → SwiftUI Color 字面量

#FF5733

SwiftUI 输出(在「复制为代码 → SwiftUI」下):`Color(red: 255/255, green: 87/255, blue: 51/255)`。这是经典的 iOS / macOS 工作流:设计师把 hex 投放到 Figma 的品牌面板中,您在这里粘贴,然后把 SwiftUI 字面量复制到 `View` 里。这种带显式 `/255` 除法的表达式形式是有意为之 —— 它比不透明的 `Color(red: 1.0, green: 0.341, blue: 0.2)` 更容易通过 code review,因为源代码里仍然能直接看到品牌原始 hex。

设计师调色板色卡 → 印刷用 CMYK 近似值

#FF6347

CMYK 输出:大约 `cmyk(0%, 61%, 72%, 0%)`。这是用标准公式 `K = 1 − max(R,G,B); C = (1−R−K)/(1−K)` 做的朴素 sRGB → CMYK 转换 —— 用作印刷报价时的快速起点估算尚可,但不能替代真正的转换。印刷厂会用针对具体印刷机、油墨与纸张调校好的 ICC 配置文件(通常是 US Web Coated SWOP v2 或 Fogra39)来跑一遍文件,通道可能偏移 5–15%。请把这个数字当成 sanity check,不要当成交付物。

OKLCH 广色域颜色 → sRGB 回退

oklch(0.7 0.25 30)

色域行会立即标出这个颜色**超出 sRGB**(Display P3 覆盖、Rec2020 覆盖)。在普通显示器上它会被渲染为去饱和的近似值;在支持 P3 的显示器上(2017 年之后出厂的大多数笔记本)则呈现饱和效果。点击 **Snap to sRGB** 通过二分缩减 chroma 直到颜色落入 sRGB 立方体,然后复制得到的 hex(约为 `#ef6b50`)作为回退。把 OKLCH 作为单一事实源,您可以在设计 token 中保留广色域值,并把 snap 后的 hex 作为 `@supports not (color: oklch(...))` 回退一起交付。

为正文文本校验 WCAG 对比度

#767676

对白色(`#ffffff`)的 WCAG 2.1 对比度约为 **4.54:1** —— 刚好越过正文文本 AA 级的 4.5:1 门槛。把末位再砍一位变成 `#777777`,比率掉到 4.48:1,就不再通过 AA。APCA Lc 值会作为前瞻性指标(WCAG 3 草案)并列显示 —— APCA 把这对组合打到约 `Lc 60`,略低于 APCA 建议的正文文本 `Lc 75`。两个都用上:WCAG 用来通过当下的审计,APCA 用来确保结果真的好读。

找出最接近品牌 hex 的 CSS 命名颜色

#FF6347

**Named** 字段会返回 `tomato (exact)`,因为 CSS 规范把 `tomato` 定义为字面上的 `#FF6347` —— 这是每个浏览器都内置的 148 个命名颜色之一。试一个相近值,比如 `#FF6348`,该字段会返回 `tomato (nearest, ΔE 0.02)`,告诉您最接近的命名颜色以及差距有多远 —— 用 OKLAB 空间下的 CIE ΔE 衡量。当您写文案或注释、希望用人类可读的颜色名而不是 hex 代码时非常实用。

把旧的 HSL 值转成现代 OKLCH

hsl(220 70% 50%)

OKLCH 输出:大约 `oklch(0.5 0.187 263)`。HSL 的 L=50% **并不**等于感知上的 50% —— 蓝色在 L=50% 时看起来比黄色在 L=50% 时暗得多,因为 HSL 只是 sRGB 的圆柱形重排,不是均匀空间。OKLCH 的 L=0.5 才真正对应您眼睛感知到的中性灰亮度。把 HSL 设计系统迁移到 OKLCH 时,要预期 L 值会漂移(蓝色上调、黄色下调) —— 这是系统在自我校正,不是 bug。

从品牌色生成 5 个浅色 + 5 个深色调色板

#3b82f6

**Tints / Shades / Tones / Harmonies** 区段会通过对 OKLCH L 通道做等步长递增、同时保持 C 与 H 不变,生成 5 个更亮和 5 个更暗的变体。结果是感知上均匀的色阶 —— `500` 与 `600` 之间的视觉间距和 `600` 与 `700` 之间一样,这正是设计系统所需的。点击任意色卡即可将其载入为当前颜色,然后复制其 hex/OKLCH。与 Tailwind v4 默认调色板生成器的构造方式完全相同。

如何使用颜色转换器

  1. 1

    用任意格式粘贴或键入颜色

    全部 9 个格式字段(HEX、RGB、HSL、HSV、HWB、CMYK、OKLCH、OKLAB、Named)都可以直接编辑 —— 没有需要点击的「转换」按钮。从 Figma 粘贴 hex、从 Tailwind 配置中键入 `oklch()` 值、把旧样式表里的 `hsl()` 丢进来,甚至键入像 `tomato` 这样的 CSS 命名颜色都行。工具会随键入逐步解析,所以一个写到一半的值不会在您提交合法格式之前抹掉其他字段。非法输入会在行内静默提示错误;合法输入则会刷新整个网格。

  2. 2

    9 种格式即时同步

    内部的事实源是 OKLCH(感知均匀、色域无界),其他每一种格式都在每次按键时由它派生。您正在键入的那个字段保持光标位置不动 —— 只有*其他*八个字段重新渲染。这意味着您可以直接编辑 OKLCH 的 L 通道,实时看到 hex、RGB、HSL、CMYK 全部跟着变,而不会丢失光标。转换数学完全在 JavaScript 中运行,使用与现代浏览器内置一致的 OKLAB 原语。

  3. 3

    用取色器做可视化探索

    格式网格下方是一个饱和度-亮度方块(在当前色相下,拖动任意位置设置 S+L)、一个色相滑块(拖动可绕色轮旋转)和一个 alpha 滑块(拖动设置透明度)。在 Chromium 系浏览器(Chrome、Edge、Brave)上,**Eyedropper** 按钮会激活原生 `EyeDropper` API —— 在屏幕任意位置点击(包括浏览器窗口之外)以取样该像素的颜色。Safari 和 Firefox 尚未提供该 API,因此按钮在这些浏览器中会隐藏,SL 方块 + 色相滑块仍然是主要的取色器。

  4. 4

    一眼掌握色域与对比度

    三枚色域徽章(**sRGB**、**Display P3**、**Rec2020**)会显示当前颜色是否落在每个空间的可再现范围内 —— 在您用 OKLCH 工作、想知道哪些显示器能准确渲染该值时非常有用。对比度行会显示对白与对黑的 WCAG 2.1 比率,以及 APCA Lc 分数(前瞻性的 WCAG 3 指标)。通过 / 未通过徽章(AA、AAA)会行内显示。如果颜色超出 sRGB 色域,**Snap to sRGB** 按钮会缩减 chroma 直到合身。

  5. 5

    用您所在平台的原生语法复制

    9 个格式字段各自都有自己的**复制**按钮 —— 一键即可把值送到剪贴板,标签短暂切换为「Copied!」以便您知道。取色器下方的**复制为代码**区段会为五个平台生成可粘贴的代码片段:CSS 自定义属性、Tailwind v4 `@theme` token、SwiftUI `Color(red:green:blue:)` 字面量、Jetpack Compose `Color(0xFF...)` 常量,以及 Flutter `Color(0xFF...)`。URL 哈希(`#hex=...` 或 `#oklch=...`)也会同步更新,这样您就能分享一条实时链接,指向那一确切的颜色。

颜色转换常见错误

把 HSL 与 OKLCH 混为一谈

两个空间共享相同的色相 / 亮度 / (saturation 或 chroma) 圆柱形形状,使它们在纸面上看起来可以互换。其实不行。HSL 的 L 是几何的 —— 由 RGB 通道最大值和最小值的平均派生 —— 嵌入了 sRGB 的 gamma 曲线。OKLCH 的 L 是感知的,锚定在 OKLAB 模型上。L 恒定的 HSL 色阶在跨色相时视觉上看得见不均匀;L 恒定的 OKLCH 色阶则保持均匀。在做设计系统迁移时,不要在不重新调校的情况下用一个替换另一个。

✗ 错误
假设 HSL 调色板感知均匀:
hsl(220 50% 30%) → hsl(220 50% 60%) → hsl(220 50% 90%)
屏幕上这几个值看上去间距不均。
✓ 正确
使用 OKLCH 做感知均匀的色阶:
oklch(0.30 0.10 220) → oklch(0.60 0.10 220) → oklch(0.90 0.10 220)
屏幕上这几个值看上去间距均匀。

相信朴素 CMYK 用于印刷

这里的 CMYK 输出来自施加在 sRGB 上的标准 `K = 1 - max(R,G,B)` 教科书公式。作为粗略估算有用,但不能替代真正的转换。印刷厂会用针对具体印刷机、油墨、纸张调校的 ICC 配置文件(US Web Coated SWOP v2、Fogra39、Japan Color 2011 等)跑文件。ICC 转换后的 CMYK 可能与朴素公式每通道差 5–15%。请把原始 sRGB hex 发给印刷厂,让他们做正确的转换。

✗ 错误
把我们的 CMYK 输出直接发去印刷:
hex #FF6347 → cmyk(0%, 61%, 72%, 0%)
印出来可能浑浊或过饱和。
✓ 正确
把原始 hex 发给印刷供应商:
hex #FF6347 → 让印刷厂针对其印刷机做 ICC 转换
印出来与屏幕颜色匹配得多。

把 APCA Lc 当作与 WCAG 2 兼容的数字

APCA Lc 和 WCAG 2 比率是衡量不同事物的不同尺度。WCAG 2 给出从 1:1(无对比)到 21:1(最大对比)的比率,4.5:1 是正文文本的 AA 法律下限。APCA 给出 0 到 ±108 的 Lc,符号表示极性(正值为亮底深字,负值为深底亮字)。Lc 60 并不等于 WCAG 4.5:1;两者关系非线性且方向相关。两个指标并用、并排展示,而不是把一个当作另一个的翻译。

✗ 错误
假装 Lc 60 = WCAG 4.5:1:
APCA Lc 60 → 「通过 AA」
同一对组合的 WCAG 2 比率可能是 3.8:1(不过 AA)。
✓ 正确
独立检查两个指标:
WCAG 2 比率 ≥ 4.5:1 满足 AA 正文文本合规,且
APCA |Lc| ≥ 75 满足现实可读性。
两者都必须通过,不能用一个替代另一个。

用 HSL 生成设计系统的深色色阶

通过对 HSL 的 L 通道做等步长递增来生成 50/100/200/…/900 色阶,产生的是视觉上不均匀的色阶,因为 HSL 的 L 不是感知意义上的。深色节点显得过深,浅色节点显得过浅,中间节点被压缩。设计师通过逐节点手动调校来修这件事,每个品牌色都要花数小时。OKLCH 在构造上就能解决问题 —— 相等的 L 步看起来相等 —— 因此色阶一次成型。

✗ 错误
对 HSL L 做色阶递增:
hsl(220 50% 30%) / hsl(220 50% 60%) / hsl(220 50% 90%)
90% 看上去发白;30% 比 60% 的间距看上去暗得多。
✓ 正确
对 OKLCH L 做色阶递增:
oklch(0.30 0.10 220) / oklch(0.60 0.10 220) / oklch(0.90 0.10 220)
每一步看起来都是相同的视觉间距。

复制 HEX 时忘了 alpha

8 位 hex(`#RRGGBBAA`)和 4 位简写(`#RGBA`)在最后一对编码 alpha 透明度。CSS 都支持;老旧解析器(包括一些 2018 年以前的 CSS 预处理器与设计工具)只认识 6 位 hex 并静默截断 alpha。结果:您以为 50% 透明的颜色被渲染成完全不透明。在复制带 alpha 的值之前,请先核验目标语法是否接受 8 位 hex;对于遗留目标,回退到 `rgba()`。

✗ 错误
把 8 位 hex 复制到老旧解析器:
#FF573380 → 解析器截断 → #FF5733(无 alpha)
50% 的透明度被静默丢失。
✓ 正确
核验目标支持 8 位 hex,或使用 rgba():
现代 CSS:#FF573380(8 位 hex)
旧版兼容:rgba(255, 87, 51, 0.5)(始终支持)
显式 alpha 语法避免静默截断。

不考虑 Display P3 就 Snap 到 sRGB

Snap to sRGB 在遗留场景下是有用的安全网,但无差别地施加它会浪费您可能正在为之设计的广色域显示器。2017 年以后的大多数 Apple 设备能原生渲染 Display P3;许多现代 Android 设备和笔记本屏幕也能。一个超出 sRGB 但落在 P3 内的广色域 OKLCH 颜色,在 P3 硬件上比 snap 后的 sRGB 近似明显更饱和。先看 P3 色域徽章;仅在瞄准仅 sRGB 的遗留场景时再 snap。

✗ 错误
默认把每个 OKLCH 颜色 snap 到 sRGB:
oklch(0.7 0.25 30) → snap → oklch(0.7 0.18 30)
P3 显示器无端损失 30%+ 饱和度。
✓ 正确
先看 Display P3 徽章:
若落在 P3 内:保留广色域值,通过 @supports 加 sRGB 回退
若超出 P3:再 snap 到 sRGB
让广色域硬件干它该干的活。

谁在使用这款工具

前端开发者迁移到 Tailwind v4 OKLCH token
Tailwind v4 在 2024 年把默认调色板标准化到了 OKLCH。把基于 HSL 或 hex 的旧设计系统迁移过来意味着要把数百个品牌色转成 OKLCH。粘贴每一个 hex,复制 OKLCH 输出,丢进 `@theme` 块里。实时色域徽章会标出任何超出 sRGB 的颜色,让您能决定是否为 Display P3 显示器保留更广色域的值。
设计师把 Figma 颜色翻译给 iOS / Android
Figma 默认导出 hex,而 iOS 想要 SwiftUI `Color(red:green:blue:)` 字面量,Android 想要 Jetpack Compose `Color(0xFF...)` 常量。Figma hex 粘贴一次,复制 SwiftUI 片段给 iOS 工程师、Compose 片段给 Android 工程师 —— 两者都已经是各平台所需的精确语法,原 hex 保留在注释里以便追溯。
设计师准备印刷打样(CMYK 近似)
当一种品牌色必须出现在印刷名片上时,CMYK 近似值可以给印刷厂在做正式 ICC 转换前共享一个快速估算。粘贴品牌 hex,复制 CMYK 百分比,发给印刷厂获取一份快速报价 —— 然后把最终颜色匹配交给印刷厂自己针对具体印刷机做的 ICC 配置文件感知的转换。
无障碍工程师核验 WCAG 和 APCA
WCAG 2.1 是当下的监管标准(ADA、EAA、Section 508);APCA Lc 是拟议中的 WCAG 3 继任者。两个指标并排显示意味着设计师可以在一屏内验证一个正文文本颜色对白色达到 4.5:1 的 WCAG,然后再做 sanity check 看是否也通过 APCA Lc 75 —— 无需在两个独立计算器之间来回切换。
教育者讲解色彩空间概念
同时显示 9 个字段的视图让色彩空间关系一目了然。键入一个 OKLCH 值,看 HSL 漂移,因为 L 在不同空间里含义不同。拖动色相滑块,看 hex、RGB、CMYK 全部更新。把 chroma 推到 sRGB 之外,看色域徽章变红。这款工具本身就是大学图形学或 HCI 课程的现成课堂演示。
品牌经理找出最接近的 CSS 命名颜色
当营销文案说「番茄色点缀」而实际品牌 hex 是 `#FF6347` 时,Named 字段会返回 `tomato (exact)`,因为在 CSS 规范里 `tomato` 就是这个值。对于相近的 hex,该字段会用 OKLAB 中的 ΔE 距离返回最接近的命名颜色 —— 对文档、文案、口语化的颜色命名很有用。
Web 开发者把遗留 HEX 调色板转为 OKLCH
老旧站点可能在 CSS 自定义属性中用 hex 代码定义了 50 种颜色的品牌调色板。现代化到 OKLCH 让品牌团队可以用感知均匀空间表达相同的色阶。粘贴每个 hex,复制 OKLCH 输出,替换到变量定义中。下方的 Tints/Shades 面板能在交付前核验得到的色阶视觉均匀。
开源维护者编写设计 token 文档
设计 token 文档通常需要用多种语法展示同一种颜色 —— CSS 代码块用 hex、规范表用 OKLCH、文案部分用命名颜色。同时显示字段的视图让维护者一次复制全部,而不必跑三次单独的转换。可共享的 URL 哈希还让贡献者能在 GitHub issue 中链接到所讨论的精确颜色。

颜色转换的数学与算法

OKLCH 作为内部单一事实源
工具在内部把规范颜色值以 OKLCH 三元组形式持有。每个可编辑字段在每次按键时从这个三元组派生显示值;每次用户编辑先更新三元组,再触发其他八个字段的重渲染。这消除了把 HSL 或 sRGB 当作枢轴的转换器在每一步都会累积的浮点漂移。选择 OKLCH 而不是 OKLAB 是有意为之 —— 极坐标形式把色相保留为稳定的轴,因此拖动色相滑块不会意外地穿过灰色淡入淡出。按照 Björn Ottosson 2020 年的论文,OKLAB 的感知均匀性是把它视作现代颜色数学通用语的最有力理由。
矩阵来源(W3C CSS Color 4 + Ottosson 2020)
代码库中的每一个转换矩阵都标注到了原始来源。sRGB ↔ 线性 sRGB 的分段 gamma 函数来自 W3C CSS Color 4 §11.2(`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`)。线性 sRGB ↔ CIE XYZ D65 的 3×3 矩阵来自 CSS Color 4 §15.1。XYZ D65 ↔ LMS 矩阵和 OKLAB 的立方根步骤来自 Ottosson 在 `https://bottosson.github.io/posts/oklab/` 发布的参考实现,完全照搬。没有矩阵被重新计算或重新推导 —— 原样复制能保证输出与规范的参考向量完全一致。
朴素 CMYK 公式与 ICC 注意事项
我们的 CMYK 输出采用标准教科书公式:`K = 1 - max(R, G, B); C = (1-R-K)/(1-K); M = (1-G-K)/(1-K); Y = (1-B-K)/(1-K)`,作用在归一化的 sRGB 值上。这是有意为之的近似。真正的印刷准确度需要针对具体印刷机、油墨(如 US Web Coated SWOP v2、Fogra39、Japan Color 2011)和纸张的 ICC 配置文件转换,可能让通道偏移 5–15%。我们带可见的免责声明显示 CMYK 字段,以免用户把我们的值直接送进印刷机。请把输出当作报价用的 sanity check,不是交付物。
通过通道范围检查实现的色域检测
一个颜色被认定落在目标空间(sRGB、Display P3、Rec2020)的色域内,当其转换到该空间的原色后每个通道都落在 `[-ε, 1 + ε]` 区间内,其中 `ε = 1e-7` 用于吸收边界附近的浮点精度噪声。任一通道超出范围时,对应空间的色域徽章会变红。这能捕获常见情况 —— 像 `oklch(0.7 0.4 30)` 这样的广色域 OKLCH 颜色会被判为超出 sRGB 但在 P3 内,告诉您哪些显示器能准确渲染。检查在每次按键时运行。
Chroma 缩减 Snap 算法
Snap to sRGB 在 chroma 轴上做二分:固定当前的 L 和 H,在 C ∈ [0, currentC] 中搜索最大的 C,使其 sRGB 转换保持在色域内。搜索最多运行 30 次迭代(精度约 10⁻⁹),足以达到视觉上的精确。这与 CSS Color 4 §13 中描述的信息性色域映射算法一致 —— 保留亮度和色相、只缩减 chroma,可以让 snap 后的颜色仍可辨认地属于同一色相系。我们不直接裁剪 RGB 通道,因为那样会明显扭曲色相(尤其是蓝色)。
Brettel + Machado CVD 矩阵
色盲模拟使用两套已发表的矩阵家族。三种二色觉 —— 红色盲、绿色盲、蓝色盲 —— 使用 Brettel-Viénot-Mollon 1997 矩阵,在线性 RGB 上运算(先 gamma 解码、应用矩阵、再 gamma 编码回)。三种异常三色觉 —— 红色弱、绿色弱、蓝色弱 —— 使用 Machado-Oliveira-Fernandes 2009 矩阵,在严重度 0.66 下运算,对应一名典型的异常三色觉患者。全色盲与部分色弱使用 rec601 亮度权重(`0.299R + 0.587G + 0.114B`)做灰度投影。所有 8 种模拟在每次颜色变更时都会渲染。
WCAG 2 vs APCA:何时该用哪个
WCAG 2.x(当下标准)从相对亮度计算对称对比度比率:`(L1 + 0.05) / (L2 + 0.05)`,正文文本目标 4.5:1,AAA 目标 7:1。它是 2026 年无障碍审计的法律合规下限。APCA(Accessible Perceptual Contrast Algorithm)是拟议中的 WCAG 3 继任者 —— 对极性敏感(亮底深字与深底亮字得分不同)、更贴合人类感知的可读性,正文文本目标 `|Lc| ≥ 75`。两者并排显示,让设计师同时达到合规的 WCAG 2 和现实可读性的 APCA,无需在两个独立计算器之间切换。

颜色转换的最佳实践

新设计系统优先 OKLCH,遗留系统保留 HEX
对任何在 2025 年或以后交付的新设计系统,用 OKLCH 定义品牌色与调色板色阶。L 轴自动得到感知均匀的色阶;chroma 轴可以表达 hex 无法编码的广色域颜色。可以通过 `@supports not (color: oklch(0 0 0))` 或构建期 PostCSS 为老旧浏览器保留 hex 回退,但请把 OKLCH 设为 token 仓库里的规范值。已经有数千个 hex 变量的遗留系统可以保留 hex,直到有计划的迁移 —— 不要为变而变。
把 CMYK 输出视作近似,并与印刷供应商确认
本工具呈现的 CMYK 数字来自基于 sRGB 的朴素公式,不是 ICC 配置文件转换。把它们用于粗略报价和内部对比稿。在任何真正的印刷之前,请把原始 hex(不是 CMYK 近似)发给印刷供应商,让他们针对具体印刷机、油墨、纸张运行自己的 ICC 转换。正规转换带来的 5–15% 通道偏移很可能把一个鲜艳的红色变成浑浊的橙色,如果近似值被直接交付出去的话。
用 APCA Lc 做前瞻性的无障碍工作
WCAG 2.x 在未来数年内仍将是监管下限,但 APCA 是标准发展的方向。对新设计,在 WCAG 2.1 下限的基础上,正文文本同时命中 `|Lc| ≥ 75`,大字号文本命中 `|Lc| ≥ 60`。APCA 能捕获 WCAG 2 对称比率会漏掉的可读性问题 —— 尤其是亮背景上的细笔画文字,WCAG 比率看起来没问题,但文字在正常阅读距离上实际会消失。
让广色域颜色过一遍 Display P3 色域检查
如果您在瞄准现代 Apple 硬件(2017 年以后的 iPhone、iPad、MacBook),或交付 HDR 感知内容,请用 OKLCH 定义品牌色,并用 Display P3 徽章核验它们即便超出 sRGB 也落在 P3 内。更广色域的颜色在 P3 显示器上明显更饱和,在仅 sRGB 屏幕上则通过浏览器自带的 chroma 压缩优雅退化。除非您确定整个受众都在使用老旧显示器,否则不要预先把颜色 snap 到 sRGB。
用 OKLCH Tones 挑选感知均匀的色阶
为品牌色生成 50/100/200/…/900 色阶时,使用 Tones 面板:它在保持 C 与 H 不变的前提下对 L 做等步长递增。结果是感知均匀的色阶,400 与 500 之间的视觉间距和 500 到 600 之间完全一致。手动调 HSL 色阶以达到同样的均匀度,每个颜色都是数小时的工作;OKLCH 免费送您。
谨慎使用吸管做跨标签颜色匹配
EyeDropper API(截至 2026 年仍是 Chromium 独占)让您在屏幕任意位置点击 —— 包括浏览器之外 —— 以取样该像素的颜色。在匹配截图、视频帧或另一应用 UI 中的颜色时很有用。把结果当作起点,而不是最终值 —— 屏幕渲染会施加可能与源文件不同的颜色管理。对于规范的品牌色,请始终从设计源(Figma、Sketch、品牌指南 PDF)拿 hex,而不是从截图吸色。
用 `#hex=...` 链接为可共享的调色板决策加书签
当前颜色会自动以 `#hex=...` 或 `#oklch=...` 的形式编码进 URL 哈希。复制 URL,粘贴到 Slack 线程或 GitHub issue 里,打开的人会落在完全相同的颜色上。在「品牌蓝」需要指向某一具体 OKLCH 三元组的设计评审讨论中很有用。哈希在每次变更时更新,因此您地址栏中的 URL 始终是当前实时颜色 —— 给它加个书签,以便日后回到某个特定调色板。

常见问题

怎么把 hex 代码转成 RGB?
把 6 位 hex 拆成三组 2 位,然后把每组当作 0–255 的 16 进制数读取。`#FF5733` 变成 R=`FF`=255、G=`57`=87、B=`33`=51,得到 `rgb(255, 87, 51)`。3 位简写(`#F73`)通过把每一位重复一遍展开:`#F73` → `#FF7733`。本工具在您输入时实时完成转换 —— 粘贴任意 hex(带或不带 `#`、3 位或 6 位、4 位或带 alpha 的 8 位),RGB 字段就会即时更新。
hex 和 RGB 是同一个东西吗?
它们以不同的写法编码同一份信息。两者都把颜色描述为三个通道(红、绿、蓝)、0–255 区间、锚定在 sRGB 色彩空间。Hex 把三个通道打包成 6 字符的 16 进制字符串(`#FF5733`);`rgb()` 函数把它们以十进制展开(`rgb(255, 87, 51)`)。互转无损。差别在实用性:hex 更短、能舒服地放进 CSS 变量;`rgb()` 通过 `rgba()` 接受独立的 alpha 通道,也支持 CSS Color 4 的百分比语法。
怎么读一个 hex 颜色代码?
hex 颜色在 `#` 之后有 6 个十六进制数字,按 **RR GG BB** 分组。每对编码一个通道,范围从 `00`(无)到 `FF`(满,十进制 255)。`#FF0000` 是纯红,`#00FF00` 是纯绿,`#0000FF` 是纯蓝。8 位 hex(`#FF5733CC`)在末尾再加一对 alpha —— `CC` = 204/255 ≈ 80% 不透明度。3 位简写(`#F73`)将每位重复一次展开:`#F73` 与 `#FF7733` 等价。
hex 转 RGB 的公式是什么?
对每一对 2 位 hex,把第一位乘以 16 再加上第二位:`FF` = 15×16 + 15 = 255、`57` = 5×16 + 7 = 87、`33` = 3×16 + 3 = 51。JavaScript 里:`parseInt('FF', 16)` 返回 255。CSS 里反方向已经内置到解析器中 —— `rgb(255 87 51)` 与 `#FF5733` 在任何接受 `` 的地方都可以互换。没有舍入损失:16² = 256,正好覆盖每个通道占用的 0–255 字节区间。
为什么要用 hex 而不是 RGB?
三个理由:它更短(`#FF5733` vs `rgb(255, 87, 51)`);它是每个设计工具(Figma、Sketch、Photoshop)默认导出的格式;它是您的眼睛会逐渐学会一眼辨认的格式 —— 大多数前端开发者能直接看出 `#3b82f6` 是 Tailwind blue-500。当您需要 alpha、要从 JavaScript 算颜色,或希望使用 CSS Color 4 提供的显式百分比语法以提高可读性时,请用 `rgb()`(或现代的空格分隔 `rgb(R G B / A)` 语法)。
hex 代码可以包含 alpha / 透明度吗?
可以 —— 使用 8 位 hex(`#RRGGBBAA`)或 4 位简写(`#RGBA`)。alpha 那一对遵循同样的 0–`FF` 比例:`#FF573300` 完全透明,`#FF5733FF` 完全不透明,`#FF573380` 大约 50%。带 alpha 的 4 位 CSS hex 在 2018 年已经登陆所有常青浏览器:Safari、Chrome、Firefox、Edge 全部支持。如果您需要兼容非常古老的浏览器,可以回退到 `rgba()`,自 IE 9 起就一直支持。
hex 可以表示多少种颜色?
6 位 hex 正好可以表示 **16,777,216** 种颜色 —— 每通道 256 个值的三次方(256³)。带 alpha 的 8 位 hex 可寻址空间是 256⁴ ≈ 43 亿,但颜色内容仍是 1670 万;多出的那一维是透明度。人眼大约能区分 1000 万种颜色,所以自 1990 年代起 24 位 sRGB 就被称作「真彩色(truecolor)」。现代广色域显示器(Display P3、Rec2020)覆盖更多可见光谱,但 hex 本身被绑死在 sRGB —— 要寻址广色域值,请用 OKLCH 或 `color(display-p3 ...)`。
什么是 OKLCH 颜色?
OKLCH 是一种感知均匀的色彩空间,通过把 OKLAB 的 a/b 色度轴转为极坐标得到。通道分别为**感知亮度**(0–1)、**色度(chroma,OKLCH 的 C 通道)**(从 0 到约 0.4,取决于色相)、**色相**(0–360°)。与 HSL 不同,相等的 L 在所有色相下看起来一样亮,因此设计系统色阶在感知上能保持一致。CSS Color 4 在 2022 年加入了 `oklch()` 函数;Chrome 111、Safari 15.4、Firefox 113 均提供原生支持。Tailwind v4 与 shadcn 都把 OKLCH 作为默认调色板的基础。
OKLCH 比 HSL 更好吗?
对设计系统而言,是的 —— 而且差别可以量化。HSL 的 L(亮度)是几何意义上的,不是感知意义上的:`hsl(60, 100%, 50%)`(黄)看上去明显比 `hsl(240, 100%, 50%)`(蓝)更亮,即便两者都报 L=50%。OKLCH 的 L 锚定在 Björn Ottosson(2020)的 OKLAB 感知模型上,所以相等的 L 意味着相等的感知亮度。实战收益:OKLCH 色阶自动产生视觉上均匀的台阶;HSL 色阶则需要按色相手动调整 lightness 才能看起来对。
哪些浏览器支持 oklch()?
截至 2023 年中,所有常青浏览器都支持:**Chrome/Edge 111**(2023 年 3 月)、**Safari 15.4**(2022 年 3 月,最早)、**Firefox 113**(2023 年 5 月)。caniuse 综合覆盖率超过 94%。对于剩余的 IE 11 / 旧版 Safari 长尾用户,可以用 `@supports (color: oklch(0 0 0))` 查询提供 hex 回退,或在构建时用 PostCSS `postcss-oklab-function` 把 sRGB 近似值与 OKLCH 值并排内联。
为什么要在 Tailwind v4 中使用 OKLCH?
Tailwind v4 把默认调色板从基于 HSL 切换到基于 OKLCH 生成,因为 OKLCH 能自动得到感知上均匀的色阶。如今 `blue-500` 和 `red-500` 色卡看起来真的一样亮 —— 在 v3 的 HSL 体系下做不到这一点,这迫使设计师不得不手动微调每一个色阶节点。OKLCH 也解锁了现代显示器上的更广色域:像 `oklch(0.65 0.25 30)` 这样的 Tailwind v4 token 可以指向任何 hex 代码都无法触及的 Display P3 红色。构建过程仍会为旧浏览器输出 hex 回退。
OKLCH 是感知均匀的吗?
是的 —— 这正是它存在的意义。OKLCH 从 OKLAB 继承了感知均匀性,后者是 Björn Ottosson 在 2020 年专门为修复 CIELAB(此前最佳的感知均匀空间)非均匀性而设计的色彩空间。L 通道上一个固定步长对应一个固定的感知亮度步长;C 上一个固定步长对应一个固定的感知色度步长。这就是 OKLCH 色阶看上去顺滑的原因 —— 数学契合人类视觉。CIELAB 近似在非常饱和的颜色附近会失准;OKLAB/OKLCH 在整个色域内都保持准确。
怎么读一个 OKLCH 值?
`oklch(L C H)` —— 三个数,可选附加 `/ A` 表示 alpha。**L** 是感知亮度,从 0(黑)到 1(白);可以写成数字也可以写成百分比(`0.6` 与 `60%` 等价)。**C** 是 chroma,从 0(灰)起,最饱和的 sRGB 颜色约到 0.4;没有上界,广色域颜色可以超出。**H** 是色相,以度为单位 0–360,和 HSL 相同(0/360 = 红,120 = 绿,240 = 蓝)。示例:`oklch(0.629 0.193 263.4)` 是 Tailwind 的 blue-500。
色域(gamut)和色彩空间(color space)有什么区别?
**色彩空间**是一套坐标系,给每个颜色一个唯一地址 —— sRGB、Display P3、Rec2020、OKLCH 都是色彩空间。**色域**是一个具体空间(或一台设备)能够真正再现的可见颜色子集。sRGB 与 Display P3 使用相似的坐标系,但 P3 多覆盖约 50% 的可见光谱。OKLCH 无界 —— 它的坐标系可以寻址任何颜色,但您的屏幕能否显示取决于屏幕自身的色域。本工具中的色域徽章会告诉您哪些设备家族能准确渲染当前颜色。
为什么我的 OKLCH 颜色超出 sRGB 色域?
OKLCH 色域无界 —— 您可以写 `oklch(0.7 0.4 30)`,它是合法颜色,但其 chroma 超过了 sRGB 每通道 256 字节空间能编码的范围。在 sRGB 显示器上,该颜色会被截到色域内最接近的近似值(通常是去饱和版本)。在 Display P3 显示器上(大多数现代笔记本、iPhone、MacBook)则能正确渲染。点击 **Snap to sRGB** 缩减 chroma 直到颜色合身,然后把 snap 后的 hex 作为回退,与原始 OKLCH 一起交付给广色域显示器。
对比度该用 WCAG 2 还是 APCA?
如今请用 **WCAG 2.1** —— 它是监管标准(ADA、EAA、Section 508),也是审计工具检查的对象。正文文本 4.5:1 的比率和大字号文本 3:1 是法律下限。**APCA**(Accessible Perceptual Contrast Algorithm)是拟议中的 WCAG 3 继任者,设计目标是更贴合感知 —— 它对亮底深字和深底亮字加权不同,而 WCAG 2 的对称公式会算错。APCA 仍是草案。最佳实践:用 WCAG 2 满足合规,然后用 APCA 做 sanity check(正文文本目标 `Lc 75`+)以确保结果真的可读。
HSV 和 HWB 有什么区别?
两者都是 RGB 的圆柱形重排,共享同一条色相通道。**HSV**(Hue、Saturation、Value)由 Smith 在 1978 年提出 —— Saturation 是色彩浓度,Value 是亮度。纯红是 `hsv(0, 100%, 100%)`。**HWB**(Hue、Whiteness、Blackness)由 Smith 在 1996 年再次提出,是面向画家的更直觉化替代方案 —— 先挑一个纯色相,然后加白变浅或加黑变深。CSS Color 4 加入了 `hwb()` 语法,所有常青浏览器都支持。HWB 更好教(「加白」),但 HSV 在 Photoshop、Figma 等图形软件里仍然更常见。