颜色转换器 — HEX、RGB、HSL 与 OKLCH
在浏览器中将 HEX 转 RGB、HSL、OKLCH、OKLAB 与 CMYK,一键复制任意格式。免费、免注册,您的颜色永远不会离开本页。
色盲模拟(8 种类型)
Tints / Shades / Tones / Harmonies
浅色
深色
灰调
和谐色
复制为代码
— — — — — 常见颜色参考
什么是颜色转换器?
颜色转换器是一个小型工具,把同一个颜色值在您的工具链、设计系统和浏览器真正认识的格式之间互译 —— 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
用任意格式粘贴或键入颜色
全部 9 个格式字段(HEX、RGB、HSL、HSV、HWB、CMYK、OKLCH、OKLAB、Named)都可以直接编辑 —— 没有需要点击的「转换」按钮。从 Figma 粘贴 hex、从 Tailwind 配置中键入 `oklch()` 值、把旧样式表里的 `hsl()` 丢进来,甚至键入像 `tomato` 这样的 CSS 命名颜色都行。工具会随键入逐步解析,所以一个写到一半的值不会在您提交合法格式之前抹掉其他字段。非法输入会在行内静默提示错误;合法输入则会刷新整个网格。
- 2
9 种格式即时同步
内部的事实源是 OKLCH(感知均匀、色域无界),其他每一种格式都在每次按键时由它派生。您正在键入的那个字段保持光标位置不动 —— 只有*其他*八个字段重新渲染。这意味着您可以直接编辑 OKLCH 的 L 通道,实时看到 hex、RGB、HSL、CMYK 全部跟着变,而不会丢失光标。转换数学完全在 JavaScript 中运行,使用与现代浏览器内置一致的 OKLAB 原语。
- 3
用取色器做可视化探索
格式网格下方是一个饱和度-亮度方块(在当前色相下,拖动任意位置设置 S+L)、一个色相滑块(拖动可绕色轮旋转)和一个 alpha 滑块(拖动设置透明度)。在 Chromium 系浏览器(Chrome、Edge、Brave)上,**Eyedropper** 按钮会激活原生 `EyeDropper` API —— 在屏幕任意位置点击(包括浏览器窗口之外)以取样该像素的颜色。Safari 和 Firefox 尚未提供该 API,因此按钮在这些浏览器中会隐藏,SL 方块 + 色相滑块仍然是主要的取色器。
- 4
一眼掌握色域与对比度
三枚色域徽章(**sRGB**、**Display P3**、**Rec2020**)会显示当前颜色是否落在每个空间的可再现范围内 —— 在您用 OKLCH 工作、想知道哪些显示器能准确渲染该值时非常有用。对比度行会显示对白与对黑的 WCAG 2.1 比率,以及 APCA Lc 分数(前瞻性的 WCAG 3 指标)。通过 / 未通过徽章(AA、AAA)会行内显示。如果颜色超出 sRGB 色域,**Snap to sRGB** 按钮会缩减 chroma 直到合身。
- 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?
hex 和 RGB 是同一个东西吗?
怎么读一个 hex 颜色代码?
hex 转 RGB 的公式是什么?
为什么要用 hex 而不是 RGB?
hex 代码可以包含 alpha / 透明度吗?
hex 可以表示多少种颜色?
什么是 OKLCH 颜色?
OKLCH 比 HSL 更好吗?
哪些浏览器支持 oklch()?
为什么要在 Tailwind v4 中使用 OKLCH?
OKLCH 是感知均匀的吗?
怎么读一个 OKLCH 值?
色域(gamut)和色彩空间(color space)有什么区别?
为什么我的 OKLCH 颜色超出 sRGB 色域?
对比度该用 WCAG 2 还是 APCA?
HSV 和 HWB 有什么区别?
相关工具
查看所有工具 →进制转换器 — 二进制、十六进制、十进制、八进制互转
转换工具
在线免费进制转换工具,支持二进制、八进制、十进制、十六进制及 2-36 任意进制互转。无需注册,数据不离开浏览器,即时获取结果。
HEX 转 CMYK 转换器
转换工具
在浏览器中把 HEX 颜色转成 CMYK。基于 sRGB 的朴素近似,适合印前预览。免费、免注册,您的颜色始终保留在本地。
HEX 转 HSL 转换器
转换工具
在浏览器中把任意 HEX 颜色转成 HSL —— 3 位、6 位以及带 alpha 的 8 位全部支持。免费、即时、免注册,您的颜色永远不会离开本页。
HEX 转 OKLCH 转换器
转换工具
把 HEX 转成 OKLCH,直接喂给 Tailwind v4 设计 token。实时输出感知均匀的三元组,带 Display P3 色域提醒。免费,纯浏览器运行。
HEX 转 RGB 转换器
转换工具
在浏览器中把任意 HEX 颜色代码转成 RGB —— 3 位、6 位以及带 alpha 的 8 位 HEX 全部支持。免费、即时、免注册,您的颜色永远不会离开本页。
在线压缩 JPEG、PNG、WebP 图片 — 免费批量处理
转换工具
免费在线压缩 JPEG、PNG、WebP 图片,体积缩小高达 80%。浏览器本地处理、图片不上传服务器。支持批量压缩 20 张、质量调节、前后对比预览。无需注册。