HEX 转 OKLCH 转换器是一个小型工具,把 HEX 颜色代码(`#3b82f6`)转成在 OKLCH 空间中编码同一颜色的感知均匀的 感知亮度 / 色度 / 色相 三元组(`oklch(0.629 0.193 263.4)`)。HEX 代码是设计师与开发者在 Figma、Sketch、Photoshop、品牌指南 PDF 与 CSS 样式表之间复制粘贴的简短 16 进制字符串 —— 三个 8 位通道打包进 6 字符 `#RRGGBB` 形式,锚定在 IEC 61966-2-1(1996)定义的 sRGB 色彩空间。OKLCH 是 OKLAB 的极坐标形式,OKLAB 是 Björn Ottosson 在 2020 年提出的感知均匀色彩空间,通过 CSS Color 4 中的 `oklch()` 语法加入 CSS(自 2022 年起为 W3C 候选推荐)。三个通道是:感知亮度 Lightness(0–1,也可写成 0–100%)、色度 Chroma(0 到 sRGB 最饱和颜色的约 0.4,广色域颜色可超过此值)、色相 Hue(0–360°,与 HSL 使用同一角度轴)。浏览器支持在 2022 年 3 月(Safari 15.4)与 2023 年 5 月(Firefox 113)之间陆续落地到所有常青浏览器,中间是 Chrome 111(2023 年 3 月) —— caniuse 综合覆盖率超过 94%。示例:Tailwind blue-500 即 `oklch(0.629 0.193 263.4)`。
**感知均匀 —— 为什么重要。** 在 OKLCH(以及它的直角坐标兄弟 OKLAB)中,L 通道上相等的数值距离对应相等的感知亮度距离 —— 在每一种色相、每一种色度层级、空间的每一个区域上都成立。在 HSL 中,相等的 L 值在不同色相上看起来亮度不均,因为 HSL 继承了 sRGB 的 gamma 怪癖:`hsl(120 100% 50%)` 上的绿色在视觉上明显比 `hsl(240 100% 50%)` 上的蓝色更亮,即便两者都报 L=50%。结构性原因在于 HSL 是在 gamma 编码的 sRGB 中以几何方式派生 L(通道最大值与最小值取平均),而 OKLCH 的 L 是从一个感知锚定的模型派生,先做线性化再走 LMS 锥响应阶段。实际影响是:在 OKLCH 中跨色相把 L 固定不变,得到的就是视觉等价的亮度 —— `oklch(0.7 0.2 130)` 的绿与 `oklch(0.7 0.2 250)` 的蓝在屏幕上看起来一样亮。这就是 Tailwind v4 在 2025 年把默认调色板迁到基于 OKLCH 色阶生成的原因 —— 每一档(50、100、200、…、900、950)都达到同样的感知亮度差,品牌色在不同色相间感觉一致,无需逐色手工微调。
**Tailwind v4 与设计 token 革命。** Tailwind v4(2025 年 1 月发布)把基于 HSL 的颜色生成替换为基于 OKLCH 的系统。shadcn/ui 紧随其后,把它的 CSS 变量主题改为 OKLCH;Radix Colors v3 也跟进。为什么是现在:设计系统需要在整个调色板上看起来均匀间隔的色阶,并且需要这一性质随着调色板的扩展自动成立。在 HSL 下,设计师不得不手工修正每一档颜色 —— 把蓝色色阶深端的 L 多上调 5% 以匹配绿色色阶的深端,品牌演进时再重新调一遍。在 OKLCH 下,一个简单公式(L 等步长扫,C 与 H 固定)就能自动产出一致的色阶。真实案例:在 Tailwind v3 中,`red-500` 与 `blue-500` 在 HSL L% 相同的情况下感知权重明显不同;在 v4 中,`red-500` 与 `blue-500` 看起来均衡,因为两者坐在同一个 OKLCH L 上。这对无障碍(对共享背景一致的对比度,意味着组件状态在整个调色板上感觉统一)、品牌一致性(视觉层级跨调色板成立 —— 在同一个 L 上的 `primary` 按钮与 `accent` 按钮感觉是同一个层级)与开发者体验(一个心智模型,而不是埋在设计 token 规范里的几十个手工微调例外)都很重要。
**广色域的含义。** OKLCH 无上界 —— 可以表示 sRGB 之外的颜色,包括 Display P3 与 Rec.2020 能再现的一切。这让它成为现代广色域显示设备的自然选择。多数 Apple 设备自 2017 年起(iPhone 7 及以后、2016 年及以后的 MacBook Pro、每一台 iPad Pro)原生渲染 Display P3,许多现代 Android 设备与笔电屏幕也是。代价是:并非每一个 OKLCH 三元组都能映射到合法的 sRGB 颜色。工具显示三个色域徽章 —— sRGB、Display P3、Rec.2020 —— 您可以立刻看到当前 OKLCH 在某一目标上能否正确显示。当颜色仅 sRGB 时,**Snap to sRGB** 按钮使用二分色度收缩(按 CSS Color 4 §13 的非规范性色域映射算法)在保留 L 与 H 的同时把颜色收缩进色域 —— 给您一个 HEX 兜底,可经由 `@supports not (color: oklch(0 0 0))` 与原始 OKLCH 值一并交付,广色域客户端拿到广色域版本。
**HEX → OKLCH 转换数学。** 流水线定义良好,基于两个主要来源:W3C CSS Color 4 提供 sRGB 与 XYZ 阶段,Ottosson 2020 提供 OKLAB 阶段。第一步:把 `#RRGGBB` 解析成三个 8 位整数 sRGB 通道,每通道用 `parseInt(hex.slice(1, 3), 16)` 等。第二步:每通道除以 255 归一化到 0–1。第三步:通过 CSS Color 4 §11.2 分段函数 gamma 解码到线性 sRGB(`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`)。第四步:乘以 §15.1 3×3 矩阵得到 CIE XYZ D65 坐标。第五步:乘以 Ottosson 的 LMS 矩阵(取自他 2020 年的参考实现)并对每通道取立方根。第六步:乘以 Ottosson 的 OKLAB 矩阵得到 L / a / b。第七步:笛卡尔到极坐标 —— `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`,把 H 包到 0–360°。整套流水线在微秒级运行 —— 每一次按键都即时重渲染 OKLCH 输出,无防抖。
本工具的 HEX → OKLCH 工作流是 5 个辐条家族中的一个方向,它们共享同一个底层统一颜色转换器。专用的 统一颜色转换器是中枢 —— 它同时显示全部 9 种格式且都可编辑,当您的工作流需要的不只是 HEX 与 OKLCH 时,这才是合适的工具。各个单向辐条针对特定的 Google 搜索意图:HEX 转 RGB 转换器对应面向 canvas 与硬件的方向;RGB 转 HEX 转换器处理反方向;HEX 转 HSL 转换器对应许多 Tailwind v3 代码库仍在使用的传统设计师圆柱空间;HEX 转 CMYK 转换器用于印刷准备近似。这 5 个辐条与中枢内部共享同一份 OKLCH 事实源与同一套 Ottosson 2020 矩阵,因此结果在整个家族中可保证完全一致。每一次转换都在浏览器中本地运行 —— 您的 HEX 代码绝不会上传、绝不会被记录,键入时零网络请求。可在 DevTools 中亲自验证。 想深入了解 OKLCH 为何在 2024–2026 年成为设计系统标准,请阅读配套指南:OKLCH 色彩空间详解 —— Tailwind v4 为什么采用它。