Skip to content

RGB 转 HEX 转换器

在浏览器中把 RGB 转成 HEX —— 整数、百分比通道以及 rgba alpha 全部支持。免费、即时、免注册,您的颜色永远不会离开本页。

无追踪 浏览器中运行 免费
所有颜色转换都在您的浏览器本地完成。任何数据都不会发送到任何服务器。
色域: 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 一致性、整数 + 百分比 + alpha RGB 输入支持、8 位 HEX alpha 输出正确性,以及 RGB 与 HEX 在 0–255 区间内的往返比特精确性完成评审。 — Go Tools 工程团队 · 2026年5月27日

什么是 RGB 转 HEX 转换器?

RGB 转 HEX 转换器是一个小型工具,把三个 0–255 整数通道值(`rgb(255 87 51)`)转成编码同一颜色的 6 字符 HEX 代码(`#FF5733`)。自 1990 年代末以来,RGB 与 HEX 就是每一份 Web 样式表、每一个设计工具、每一条图像-像素流水线所围绕构建的两种格式,而它们之间的转换也是颜色工具中最常见的单一操作 —— 与其反向兄弟一起,这套精确的变换每天在 Web 上的每一个 Figma 插件、CSS 预处理器、设计 token 构建与取色器 UI 中要跑上百万次。RGB 是面向通道地址的格式,硬件 API、canvas 绘制调用、图像缓冲区操作、OpenGL 颜色属性,以及大多数图形 SDK 都原生这样报告 —— 三个独立的 0–255 整数,直接映射到 LCD 的红、绿、蓝子像素或 CRT 的荧光粉。HEX 是 Figma、Sketch、Photoshop 以及每一份品牌指南 PDF 期望的简短复制粘贴格式 —— 一个 6 字符的 16 进制字符串,能舒服地放进 CSS 自定义属性,等您的眼睛学会这些模式之后一眼就能读出来。两者之间的转换是机械的:把每个整数转成 2 位 16 进制对,前置 `#` 拼接。本工具在您输入时实时跑这套转换,无需点击「转换」按钮,同时免费在 HEX 输出旁同屏展示其他每一种常见颜色格式(HSL、OKLCH、OKLAB、HSV、HWB、CMYK,加上 148 个 CSS 命名颜色)。

**HEX 格式本身值得仔细看一眼。** 标准 CSS HEX 有四种合法形态。规范的 6 位形式 `#RRGGBB` 把三个 8 位通道打包成 6 个 16 进制数字 —— 合计 16,777,216 种颜色(256³)。3 位简写 `#RGB` 是一种压缩形式,每一位复制一次形成 6 位等价值:`#F73` 展开为 `#FF7733`,**而不是** `#000F73`(这是 CSS 颜色语法最常被搞错的规则之一)。带 alpha 的 8 位形式 `#RRGGBBAA` 在末尾附加一对 2 位 alpha,在 0–`FF` 比例上,`00` 完全透明、`FF` 完全不透明。4 位 alpha 简写 `#RGBA` 通过对每一位(包括 alpha 那一位)复制一次,与 3 位简写镜像。HEX 大小写无关 —— `#ff5733` 与 `#FF5733` 解析结果相同,尽管大多数品牌指南都会挑一种大小写约定并保持一致。选 16 进制是因为方便:一个 HEX 数字 = 半字节 = 4 位,两个数字 = 字节 = 0–255,所以一个 2 位对正好对应一个 8 位通道,不会浪费填充。

转换数学在两个方向上都很干净。**RGB 转 HEX**:对每个通道,调用 `value.toString(16).padStart(2, '0')` 得到 2 位 HEX 对(`padStart` 很关键 —— 没有它,通道值 5 会被序列化为 `'5'` 而不是 `'05'`,生成非法 HEX),然后拼接。对于带 alpha 的 RGB(`rgb(R G B / A)` 或 `rgba(R, G, B, A)`),把 0–1 的 alpha 浮点数乘以 255、舍入到最近的整数、HEX 编码为第 4 个对、输出 8 位形式。**HEX 转 RGB** 是其逆运算:用 `parseInt(hex.slice(1, 3), 16)` 等把 6 位 HEX `#RRGGBB` 解析成三个 2 位 16 进制数。两个方向都是比特精确的:16² = 256,正好对应每个通道占用的 0–255 字节区间,因此 RGB → HEX → RGB 往返产出原始整数逐字一致、无浮点漂移。

**CSS 中为什么用 HEX 而不是 RGB?** 三个理由。HEX 更短 —— `#FF5733` 是 7 个字符,而 `rgb(255, 87, 51)` 是 16 个字符;在 CSS 自定义属性或 Tailwind 配置对象里被密集打包时,这一差别就很有意义。HEX 没有空白字符的烦恼 —— CSS 压缩器、JSON 序列化器以及命令行工具处理一个 7 字符字符串都很干净,不必担心圆括号匹配或逗号转义。HEX 是整个设计工具生态原生说的格式 —— Figma 的颜色面板、Sketch 的色卡、Photoshop 的取色器、每一份品牌指南 PDF、每一张 Dribbble 截图的颜色注解 —— 全部默认导出 HEX。从设计师到开发者的复制粘贴通道是 HEX 形状的,这就是 RGB 转 HEX 这一转换之所以如此频繁的原因:开发者从非设计工具(canvas 调用、截图吸管、硬件传感器)拿到 RGB,需要把它变成栈中其他部分期望的 HEX 形式。

本工具的 RGB → HEX 工作流是 5 个辐条家族中的一个方向,它们共享同一个底层统一颜色转换器。专用的 统一颜色转换器是中枢 —— 它同时显示全部 9 种格式且都可编辑,当您的工作流需要的不只是 RGB 与 HEX 时,这才是合适的工具。各个单向辐条针对特定的 Google 搜索意图:反向的 HEX 转 RGB 转换器处理反方向(从 Figma 拿一个 HEX、读出 0–255 整数);HEX 转 HSL 转换器对应面向设计师的传统认知空间;HEX 转 OKLCH 转换器对应现代感知均匀设计系统(Tailwind v4 与 shadcn 现在都默认 OKLCH);以及 HEX 转 CMYK 转换器用于印刷准备近似。这 5 个辐条和中枢共享同一套解析引擎与同一套转换数学,因此结果在整个家族中可保证完全一致。每一次转换都在浏览器中本地运行 —— 您的 RGB 值绝不会上传、绝不会被记录,键入时零网络请求。可在 DevTools 中亲自验证。

// Serialize {r, g, b, alpha} → canonical hex string
// Emits 6-digit #RRGGBB when alpha === 1, 8-digit #RRGGBBAA otherwise.
function formatHex({ r, g, b, alpha = 1 }) {
  const pair = (v) => Math.round(v).toString(16).padStart(2, '0').toUpperCase();
  const rgb = pair(r) + pair(g) + pair(b);
  if (alpha >= 1) return `#${rgb}`;
  const a = pair(alpha * 255);
  return `#${rgb}${a}`;
}

console.log(formatHex({ r: 255, g: 87, b: 51 }));              // '#FF5733'
console.log(formatHex({ r: 59, g: 130, b: 246 }));             // '#3B82F6'
console.log(formatHex({ r: 255, g: 87, b: 51, alpha: 0.5 })); // '#FF573380'
console.log(formatHex({ r: 5, g: 0, b: 0 }));                  // '#050000' — padStart matters

核心特性

全部 RGB 输入形态统一解析

现代空格分隔 `rgb(255 87 51)`、遗留逗号分隔 `rgb(255, 87, 51)`、百分比通道 `rgb(100% 34% 20%)`、现代斜线表 alpha `rgb(255 87 51 / 0.5)`,以及遗留 `rgba(255, 87, 51, 0.5)` 都按相同方式解析。解析器在 HEX 序列化之前把所有输入形态归一到同一个内部 RGB 三元组,因此无论您的来源用哪种形态 —— Photoshop 的整数三元组、样式表里的 `rgba()`、一段 Canvas API 三元组 —— 都可以直接粘贴,无需手动重排。

大写 6 位或 8 位形式的 HEX 输出

HEX 字段把值显示为不透明颜色的 `#FF5733`,以及带 alpha 颜色的 `#FF573380`(8 位形式)。默认大写以与大多数品牌指南保持一致;如果您的风格指南要求,一次机械替换就能切到小写。两种形式都是合法 CSS,在所有常青浏览器中通用。带 alpha 的 8 位形式在 2018 年登陆所有主流浏览器;对于 IE 11 回退,遗留的 `rgba()` 形式仍然就在 RGB 字段里。

比特精确,无浮点漂移

RGB → HEX 是整数到字符串的运算:`value.toString(16).padStart(2, '0')` 产出规范的 2 位 HEX 对,完全不涉及浮点。反方向(`parseInt(pair, 16)`)同样精确。一次 RGB → HEX → RGB → HEX 往返会无限循环产出原始输入逐字一致。OKLCH 作为内部事实源,意味着即便更长的链路 RGB → HSL → OKLAB → HEX 也保持比特稳定,而把转换走 HSL 作枢轴的老式转换器无法保证这一点。

alpha 通道干净编码

带 alpha 的 RGB(`rgb(255 87 51 / 0.5)` 或 `rgba(255, 87, 51, 0.5)`)会自动输出 8 位 HEX 形式(`#FF573380`)。alpha 浮点数先乘以 255、舍入到最近的整数,再做 HEX 编码:`0.5 × 255 = 128 = 0x80`。当 alpha 等于 1 时,输出回退到 6 位 HEX,避免把多余的 `FF` 对漏进样式表。对设计 token 迁移很有用,当 `rgba()` 中的 alpha 值需要往返进现代 8 位 HEX 形式时尤为合适。

另外 8 种格式同屏可见

您粘贴的同一个 RGB 也会驱动 HSL、HSV、HWB、OKLCH、OKLAB、CMYK,以及最接近的 CSS 命名颜色 —— 全部在同一页上一眼可见。您绝不会被锁死在仅 RGB → HEX。如果队友需要 OKLCH 三元组用于 Tailwind v4 token、最接近的命名颜色用于文档文案,或者 CMYK 近似值用于印刷报价,这些值都已经在那里,带各自的复制按钮。

内置 WCAG + APCA 对比度

把一个 RGB 三元组喂进来,对比度行会立即用 WCAG 2.1(监管下限:正文文本 4.5:1,AAA 7:1)和 APCA Lc(拟议的 WCAG 3 继任者:正文文本目标 `|Lc| ≥ 75`)对白与对黑评分。当您刚把一个 RGB 三元组转成 HEX,想在发布前验证这一品牌色作为正文文本颜色是否真的可读时非常有用。

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

取色器下方,「复制为代码」区段会把当前颜色变成 5 个平台的可粘贴片段:CSS 自定义属性(`--color-brand: #FF5733`)、Tailwind v4 `@theme` token、SwiftUI `Color(red:green:blue:)` 字面量、Jetpack Compose `Color(0xFFFF5733)` 常量、Flutter `Color(0xFFFF5733)`。每个平台所期望的精确语法,可直接拖进 iOS 资源目录、Android 主题文件或 Flutter `ThemeData`。

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

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

可分享的 URL 哈希指向那一确切颜色

当前颜色会在每次变更时自动以 `#hex=ff5733` 的形式编码进 URL 哈希。复制 URL,粘贴到 Slack 线程或 GitHub issue 里,打开它的人会落在同样的 RGB 三元组、同样的 HEX 结果上。哈希只活在您的地址栏中,绝不会传到服务器(浏览器不会把 URL 片段放进 HTTP 请求),因此即便分享链接,颜色也不会泄露给任何第三方。

RGB 转 HEX 转换器替代品对比

RapidTables RGB to Hex

browser tool

Google 搜「rgb to hex」时的默认结果 —— 一个单向表单,三个 RGB 数字框进、HEX 出,看不到其他格式。从搜索点进来做一次性查询时还行。缺少 OKLCH、对比度检查、色域检测、alpha 处理,以及多格式同屏视图。除了最朴素的单次转换场景,本工具在每一个维度上都更胜一筹。

ColorHexa

browser tool

围绕每个颜色构建的长期 SEO 页面,带深度元数据:对您查询的任意 RGB,都会给出转换、调色板、和谐色、渐变。UI 已显陈旧(2010 年代初风格),不支持 OKLCH,无 APCA 对比度,无广色域处理。从 Google 发现某个具体颜色时比较强;在主动转换工作流中较弱,直接键入统一字段 UX 更快。

W3Schools RGB 计算器

browser tool

面向初学者、放在一份以教学为主的页面上的 HEX/RGB/HSL 切换器,在搜索结果中无处不在。无 OKLCH,除 rgba 外不处理 alpha,无高级特性。作为 W3Schools 讲解内容旁的参考工具有用。本工具在其他每个方面都更优:更多格式、感知数学、色域 + 对比度 + 色盲特性,以及面向 Tailwind v4 / SwiftUI / Compose / Flutter 的现代代码导出。

浏览器 DevTools 取色器

built-in browser feature

Chrome、Firefox 与 Safari 的 DevTools 都自带取色器,当您在 CSS 面板里点击颜色色卡时会内联把 RGB 转成 HEX。免费、免安装、随时可用。缺少 OKLCH、缺少可分享 URL、缺少面向非 Web 平台(SwiftUI、Compose)的代码导出。已经在调试 CSS 时用 DevTools;需要跨平台输出时用本工具。

macOS Digital Color Meter

native macOS app

自 OS X 起每台 Mac 都自带 —— 把指针悬停在任意像素上即可读出 RGB / HEX / 线性值。从屏幕任意应用取样像素颜色时非常出色。它不接受您粘贴的 RGB 三元组做转换;它是屏幕采样器,不是转换器。要在浏览器中获得同样的屏幕采样能力,可以用本工具取色器中的 EyeDropper 按钮(仅 Chromium 系浏览器)。

ConvertingColors

browser tool

覆盖多种色彩空间的每色 SEO 页面(HEX、RGB、HSL、HSV、CMYK、XYZ、CIELAB)。缺少现代 OKLCH 支持,以及统一字段编辑 UX。自动生成的内容页面有些内容农场气息,但转换数据是正确的。通过 Google 翻找单个颜色的元数据时不错;主动工作流则本工具更快。

RGB 转 HEX 示例

从 CSS rgb() 输入 → SwiftUI 用的 HEX

rgb(255 87 51)

HEX 输出:`#FF5733`。经典的跨平台工作流 —— CSS 样式表用现代 `rgb()` 语法声明品牌色,iOS 团队需要 HEX 才能放进一个 SwiftUI `Color(hex:)` 扩展或资源目录。每个通道独立转换:`255 → FF`、`87 → 57`、`51 → 33`,前置 `#` 拼接。同一个 HEX 也能干净地粘贴进 Android Compose、Flutter 与 Figma —— 2026 年的跨平台颜色交付,HEX 仍然是通用语。

设计师 Photoshop RGB 整数 → CSS 变量

rgb(59 130 246)

HEX 输出:`#3B82F6`。Adobe 的取色器(Photoshop、Illustrator、InDesign 中相同)以三个 0–255 整数报告 RGB;前端团队需要 HEX 才能写进 `--color-brand: #3B82F6` 这样的 CSS 自定义属性。这个特定的三元组正是 Tailwind 的 `blue-500` —— `59 = 0x3B`、`130 = 0x82`、`246 = 0xF6`。在这里粘贴一次就能得到对应 HEX,以及供 Tailwind v4 token 迁移用的 OKLCH 三元组,一步到位。

带 alpha 的 RGB → 8 位 HEX

rgb(255 87 51 / 0.5)

HEX 输出:`#FF573380`。alpha 浮点数乘以 255(`0.5 × 255 = 127.5`,舍入到 128),然后转为 2 位 HEX 对(`128 = 0x80`),附加在 RGB HEX 之后。带 alpha 的 CSS 8 位 HEX 在 2018 年原生登陆所有常青浏览器(Chrome 62、Firefox 49、Safari 9.1、Edge 79)。要兼容 2018 年之前的浏览器,可以继续用遗留的 `rgba(255, 87, 51, 0.5)` 形式;两者之间的转换是机械的,颜色精确等价。

百分比 RGB 通道 → HEX

rgb(100% 50% 0%)

HEX 输出:`#FF8000`。CSS Color 4 允许使用百分比通道 —— 每个百分比按 `value × 255 / 100` 映射到 0–255 区间,然后舍入到最近的整数(`50% × 255 = 127.5 → 128 = 0x80`)。百分比形式与整数形式可以互换,产出完全相同的 HEX。手写样式表里,当通道比例比原始整数值更有意义时,有时会偏好百分比语法以提升可读性;HEX 输出会把两种输入归一到同一规范的 6 位字符串。

常见 RGB → HEX 转换

10 个最常转换的 RGB 三元组及其 HEX 等价值的参考表 —— 纯原色、纯次原色,以及来自 Tailwind 调色板的 2 个真实品牌色。

黑色

rgb(0 0 0) #000000

纯黑。三个通道都为零 —— 没有发出任何光。HEX 代码 (#000000)。

rgb(0 0 0) #000000

屏幕上的纯黑很少是合适的设计选择 —— 正文文本不妨试试 `#111` 或 OKLCH 感知亮度 0.1–0.15,更柔和。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

白色

rgb(255 255 255) #FFFFFF

纯白。三个通道都达到最大值(255)。sRGB 中最亮的颜色。

rgb(255 255 255) #FFFFFF

暗环境下纯白背景容易引起视觉疲劳 —— 可以考虑 `#fafafa` 或 OKLCH 0.98 之类更暖的替代。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

红色

rgb(255 0 0) #FF0000

纯红。R 通道最大,G 与 B 为零。sRGB 三原色中的第一个。

rgb(255 0 0) #FF0000

纯红饱和度极高,很少适配品牌调色板 —— 大多数「红色」品牌色更接近 #DC2626 或 #E53935。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

绿色

rgb(0 255 0) #00FF00

纯绿。G 通道最大,R 与 B 为零。CSS 命名颜色 `lime`(不是 `green`,`green` 是 #008000)。

rgb(0 255 0) #00FF00

CSS 关键字 `green` 解析为 #008000(半亮),不是 #00FF00 —— 这是个常见的混淆点。要表达纯 RGB 绿请用 `lime`。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

蓝色

rgb(0 0 255) #0000FF

纯蓝。B 通道最大,R 与 G 为零。sRGB 第三原色。

rgb(0 0 255) #0000FF

白底纯蓝过不了 WCAG AA 对比度(3.7:1) —— 正文文本可以考虑更深的品牌蓝,如 #1D4ED8(Tailwind blue-700)。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

青色

rgb(0 255 255) #00FFFF

青色 —— 绿和蓝最大,红为零。sRGB 三个次原色之一。CSS 命名颜色 `cyan`(或等价的 `aqua`)。

rgb(0 255 255) #00FFFF

在 CSS 中 cyan 与 aqua 是完全同义词 —— 都解析为 #00FFFF。挑一个,在样式表中保持一致。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

品红

rgb(255 0 255) #FF00FF

品红 —— 红和蓝最大,绿为零。CSS 命名颜色 `magenta`(或等价的 `fuchsia`)。

rgb(255 0 255) #FF00FF

在 CSS 中 magenta 与 fuchsia 是完全同义词 —— 都解析为 #FF00FF。常见于测试图案与开发工具的覆盖层。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

黄色

rgb(255 255 0) #FFFF00

黄色 —— 红和绿最大,蓝为零。按感知亮度算是 sRGB 三个次原色中最亮的。

rgb(255 255 0) #FFFF00

黄色是屏幕上感知亮度最高的非白色 —— 白底上的黄字几乎不可见,虽然 HEX 看上去在纸上很正常。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

Tailwind blue-500

rgb(59 130 246) #3B82F6

Tailwind CSS 默认的 blue-500 品牌色 —— 2020 年代中期标志性的「Web 蓝」。无数仪表盘、营销站点与管理工具中都在使用。

rgb(59 130 246) #3B82F6

Tailwind v4 在 OKLCH 中重新定义了 blue-500(`oklch(0.629 0.193 263.4)`)以获得感知均匀的色阶 —— HEX 保持不变作为回退。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

Tailwind rose-500

rgb(244 63 94) #F43F5E

Tailwind CSS 默认的 rose-500 —— 高饱和度的粉红色调,常用于强调按钮、警示状态和品牌对比。

rgb(244 63 94) #F43F5E

rose-500 在白底上对大字号文本过 WCAG AA(4.6:1),但正文文本过不了 —— 白底正文请搭配 rose-600(#e11d48)或更深的色阶。

需要 OKLCH 吗?请试用专用的 HEX 转 OKLCH 转换器,获得感知均匀的输出。

如何使用 RGB 转 HEX 转换器

  1. 1

    把 RGB 三元组键入或粘贴到 RGB 字段

    把任意 `rgb()` 值丢进 RGB 输入框 —— 现代空格分隔 `rgb(255 87 51)`、遗留逗号 `rgb(255, 87, 51)`、用斜线表 alpha 的 `rgb(255 87 51 / 0.5)` 或 `rgba(255, 87, 51, 0.5)` 形式,或百分比通道 `rgb(100% 34% 20%)`。工具会在计算 HEX 之前把所有输入形态归一到同一个内部 RGB 三元组。非法字符、超出范围的整数或语法错误会产生一个安静的行内错误;合法 RGB 则会实时刷新其他每一个格式字段。

  2. 2

    从 HEX 字段读取 HEX 代码

    RGB 字段上方的 HEX 字段显示对应的 HEX 值:不透明颜色为 `#FF5733`,带 alpha 时为 `#FF573380`(8 位形式)。输出默认使用大写 HEX 数字,以与大多数品牌指南保持一致;小写(`#ff5733`)只是一次机械替换的事,同样是合法 CSS。转换是比特精确的 —— 一次 RGB → HEX → RGB 往返会逐字还原原始三元组,无浮点漂移。

  3. 3

    点击「复制」抓取 HEX 字符串

    每个格式卡片右侧都有一个复制按钮。一键即可把值送到剪贴板 —— 按钮标签短暂闪现「Copied!」以便您知道。复制出来的字符串带前导 `#`,可直接粘贴进一条 CSS 规则、一个 Figma 颜色字段、一个 SwiftUI HEX 扩展,或者一个 Android `colors.xml`。要输出特定平台的语法(SwiftUI `Color(red:green:blue:)`、Compose `Color(0xFF...)`、Tailwind v4 `@theme` token),请使用取色器下方的「复制为代码」区段。

  4. 4

    同屏可见:HSL、OKLCH、OKLAB、CMYK、命名颜色

    您粘贴的同一个 RGB 也会点亮其他格式字段 —— 给遗留 CSS 用的 HSL,给感知均匀设计系统用的 OKLCH 与 OKLAB,给设计师取色器工作流用的 HSV 与 HWB,给印刷估算用的 CMYK,以及给文档与文案用的最接近 CSS 命名颜色。您绝不会被锁死在仅 RGB → HEX;如果您还需要把 OKLCH 三元组放进 Tailwind v4 `@theme` 块,它就在 OKLCH 字段中,带自己的复制按钮。

  5. 5

    用取色器做可视化微调

    格式网格下方是一个 SL 方块 + 色相滑块 + alpha 滑块,用于可视化探索。拖动任意控件,每一个文本字段都会实时更新,包括您一开始用的 RGB 与 HEX。在 Chromium 系浏览器(Chrome、Edge、Brave)上,EyeDropper 按钮会激活原生 `EyeDropper` API,可在屏幕任意位置取样像素(包括浏览器窗口之外) —— 当您想从另一应用 UI 抓一个 RGB 三元组、又不愿先截图,然后立刻读出 HEX 时非常有用。

RGB / HEX 常见错误

把 RGB 序列化为 HEX 时忘记 padStart

把 RGB 转成 HEX 时,每个通道的 `toString(16)` 都需要左填充到 2 位。没有 `padStart(2, '0')`,单位通道值会生成非法 HEX:`rgb(5, 87, 51)` 会被序列化成 `#55733`(5 个字符),而不是 `#055733`(6 个字符)。许多临时性的转换器跳过了填充,任何通道值低于 16 的颜色都会输出有问题。标准写法是对 R、G、B 每一个都用 `value.toString(16).padStart(2, '0')`,然后拼接、前置 `#`。

✗ 错误
跳过 padStart:
[5, 87, 51].map(v => v.toString(16)).join('') → '55733'
产生非法的 5 字符 HEX。
✓ 正确
使用 padStart(2, '0'):
[5, 87, 51].map(v => v.toString(16).padStart(2, '0')).join('') → '055733'
合法的 6 字符 HEX;对所有 0–255 通道值都正确。

在 HEX 编码前忘记对浮点 RGB 舍入

当 RGB 三元组来自归一化的 0–1 浮点数乘以 255(常见于 OpenGL、SwiftUI、归一化图像数据)时,结果常常是像 `127.5` 或 `204.7` 这样的浮点数。对一个浮点数调用 `toString(16)` 会产出像 `'7f.8'` 或 `'cc.b333...'` 这样的带小数 HEX,不是合法的 CSS HEX。在 `toString(16)` 之前,始终先用 `Math.round`(或按您的舍入策略用 `Math.floor`/`Math.ceil`)把浮点数转为整数。

✗ 错误
跳过舍入:
(0.5 * 255).toString(16) → '7f.8'
产生带小数点的非法 HEX。
✓ 正确
先舍入到整数:
Math.round(0.5 * 255).toString(16).padStart(2, '0') → '80'
合法的 2 位 HEX 对;匹配 CSS Color 4 归一化。

搞混 8 位 HEX 的 alpha 顺序

CSS 8 位 HEX 是 `#RRGGBBAA` —— alpha 是 *末尾* 那一对。某些颜色库(尤其是较老 Android 的 `Color.parseColor()`)使用相反顺序 `#AARRGGBB`,alpha 在 *前面*,这与 CSS HEX 不兼容。一个带 50% alpha 的 RGB 值序列化进 CSS HEX 是 `#FF573380`;按 Android 前 alpha 格式输出则是 `#80FF5733`。在输出 8 位 HEX 之前,务必核实目标平台的 alpha 顺序。

✗ 错误
把 Android 前 alpha HEX 输出到 CSS:
rgb(255 87 51 / 0.5) → #80FF5733(Android 格式)
CSS 会解析为 alpha=128、R=255、G=87、B=51 —— 颜色完全不对。
✓ 正确
使用目标平台所声明的格式:
for CSS: #FF573380(alpha 在末字节)
for Android Compose: Color(0x80FF5733)(alpha 在首字节)
不要在两者之间直接互换粘贴而不重新排序。

直接对 RGB 通道求平均做混色

RGB 通道是 gamma 编码的,不是线性的。对两个 RGB 值求平均,得到的感知中点是错的。`(255, 0, 0)` 与 `(0, 255, 0)` 平均出 `(127, 127, 0)`,一个浑浊的暗橄榄色,而不是您混合红光与绿光时期待的明亮黄色中点。要正确混色,先通过 sRGB 传递函数(CSS Color 4 §11.2)解码到线性 RGB,在线性空间求平均,再重新编码。或者在感知距离均匀的 OKLAB / OKLCH 中工作。

✗ 错误
直接对 gamma 编码的 RGB 求平均:
(rgb(255,0,0) + rgb(0,255,0)) / 2 = rgb(128, 128, 0)
看上去像暗橄榄色,而不是明亮黄色。
✓ 正确
在线性 RGB 中求平均:
解码 → 线性 RGB → 求平均 → 重新编码 → rgb(188, 188, 0)
可见的明亮黄色,与物理光混合的结果相符。

谁在使用 RGB 转 HEX

前端开发者把 Canvas RGB 转成 CSS HEX
Canvas API 绘制函数以 RGB 三元组报告和接受颜色(`ctx.fillStyle = 'rgb(255 87 51)'`),但周围的 CSS 样式表想要 HEX 变量(`--color-fill: #FF5733`)。粘贴一次 RGB 就能得到对应 HEX,可直接放进 CSS 自定义属性。当您从 canvas 渲染的图表或数据可视化中提取品牌色、在静态 UI 中复用时很有用。
设计师把 Photoshop RGB 翻译成 Figma HEX
Adobe 的取色器(Photoshop、Illustrator、InDesign 中)以三个 0–255 整数(分布在三个通道框里)报告 RGB。相对地,Figma 在其设计面板中默认把颜色值显示为 HEX。在这里把 Photoshop 的三个整数作为 `rgb(...)` 粘贴,复制 HEX 输出,丢进 Figma 的颜色字段。和原 Photoshop 颜色精确匹配,无需绕道截图加吸管。
硬件开发者把 LED 传感器 RGB 转成 Web HEX
可寻址 LED 灯带、颜色传感器与硬件 RGB 摄像头都以 0–255 整数报告通道值。当这些读数需要驱动 Web 仪表盘(「灯当前发出这种颜色」)时,CSS `style="background: ..."` 属性期望的就是对应的 HEX 代码。粘贴传感器的 RGB 三元组,复制 HEX,插入仪表盘的标记中。
游戏开发者把 Unity Color 导出到 Web 模型稿
Unity 的 `Color` 与 Unreal 的 `FLinearColor` 构造器接受归一化的 0–1 浮点数;每个分别乘以 255,就得到对应的 RGB 整数。把得到的 `rgb(...)` 粘到这里,复制 HEX,丢进需要精确匹配游戏内强调色的 Web 模型稿或营销站点。同屏的 OKLCH 视图还会显示感知亮度,所以稿件调色板可以手动调到与游戏的亮度水平匹配。
无障碍工程师审计 Photoshop 品牌色
当品牌风格指南以 RGB 整数三元组报告颜色(「品牌橙是 RGB 255 / 87 / 51」),而 WCAG 审计工具想要 HEX 代码时,本转换器就是桥梁。粘贴 RGB 三元组,复制 HEX,跑一遍审计。本工具中的 WCAG 与 APCA 对比度徽章也会一步显示结论,因此您不必在三个独立工具之间来回切换。
邮件开发者把 rgba() 迁移到 8 位 HEX
现代邮件客户端 HTML 支持带 alpha 颜色的 8 位 HEX(`#FF573380`),但遗留模板常常把同一值存为 `rgba(255, 87, 51, 0.5)`。在这里粘贴 rgba(),读出 8 位 HEX 输出,迁移就变成机械操作。HEX 字段对 50% alpha 的情形显示 `#FF573380`;遗留 `rgba()` 形式仍然就在 RGB 字段中,供仍然需要它的回退场景使用。
开发者用两种格式记录品牌 token
设计 token 文档常常用 HEX 与 RGB 两种形式展示同一个颜色:CSS 代码块用 HEX,文案注释用 RGB(「品牌橙是 `#FF5733`,等价于 RGB 255 / 87 / 51」)。同屏并排显示两者,让文档作者一次复制全部,而不必跑两个工具。可分享的 URL 哈希也让读者能点进去看到讨论中那一确切颜色。
QA 工程师对照 HEX 规范断言像素颜色
视觉回归测试有时把像素颜色捕获为 RGB 整数(`expect(pixel).toMatchRgb([255, 87, 51])`),而底层规范以 HEX 给出(「按钮必须渲染为 `#FF5733`」)。在这里粘贴捕获的 RGB,就能得到对应 HEX,QA 工程师可以直接与规范比对。转换的比特精确性意味着比对不会因为浮点漂移差异而抖动。

RGB 转 HEX 的数学与序列化

toString(16).padStart(2, '0') 即为一行实现
整个 RGB 到 HEX 的转换每通道一行表达式就够了:`value.toString(16).padStart(2, '0')`。JavaScript 的 `toString(16)` 把十进制整数转为 16 进制字符串表示。`padStart(2, '0')` 是容易遗忘的细节 —— 没有它,通道值 5 会被序列化成 `'5'` 而不是 `'05'`,在与其他通道拼接时产生非法 5 字符 HEX,如 `#55733`。标准写法是 `[r, g, b].map(v => v.toString(16).padStart(2, '0')).join('')`,然后前置 `'#'`。
百分比归一化:× 255 / 100,再舍入
CSS Color 4 允许在 `rgb()` 中使用百分比通道:`rgb(100% 34% 20%)` 等价于 `rgb(255 87 51)`。归一化规则是 `Math.round(percent × 255 / 100)`。`50% × 255 / 100 = 127.5` 舍入到 128(银行家舍入远离 .5)。同样规则适用于以百分比表达的 alpha(`rgb(255 87 51 / 50%)` ↔ `rgb(255 87 51 / 0.5)`)。整数形式与百分比形式归一化后产生完全相同的 HEX 输出;工具会在重新归一化之后,在 RGB 字段中显示规范的整数形式。
alpha 到 HEX:乘以 255、舍入、编码为末尾对
带 alpha 的 RGB(`rgb(255 87 51 / 0.5)`)通过把 alpha 乘以 255、舍入到最近的整数、编码为附加在 RGB 之后的第 4 个 HEX 对,输出 8 位 HEX。`0.5 × 255 = 127.5`,舍入到 128 = `0x80`,输出 `#FF573380`。CSS Color 4 规范在这一转换中使用银行家舍入(round-half-to-even),工具沿用同一约定。当 alpha 恰好为 1 时,8 位形式回退到 6 位,避免把多余的 `FF` 对漏进样式表。
RGB 输入:CSS Color 4 空格分隔与遗留逗号都接受
解析器同时接受现代 CSS Color 4 形式 `rgb(255 87 51)` 与遗留 CSS 1 形式 `rgb(255, 87, 51)`。现代形式与其他 CSS Color 4 函数式记法(`hsl()`、`lab()`、`oklch()`、`color()`)对齐,它们全部使用空格分隔加斜线表 alpha。遗留逗号形式在每个常青浏览器中仍然受支持,在较老的代码库中也仍然常见。两者产生完全相同的 HEX 输出;工具的 HEX 序列化器并不在意是哪种输入形态送进来的。
OKLCH 作为内部事实源,保障往返稳定
尽管这个辐条专门针对 RGB → HEX,共享的底层转换器在内部以 OKLCH 三元组持有规范颜色。这意味着 RGB → HEX → HSL → OKLAB → CMYK → RGB 往返不会有逐步浮点漂移;把 HSL 或 sRGB 作为枢轴的老式转换器会在每一步累积舍入误差。选择 OKLCH(而不是 OKLAB)是为了把色相保留为稳定的轴,因此拖动色相滑块不会意外地穿过灰色淡入淡出。按照 Björn Ottosson 2020 年的 OKLAB 论文。
通道编码:8 位无符号,sRGB gamma 编码
每个 RGB 通道是 8 位无符号整数(0–255),在 IEC 61966-2-1(1996)定义的 sRGB 色彩空间中编码。这些值是 *gamma 编码* 的 —— 也就是说,通道值与感知亮度之间的关系是非线性的,遵循分段 sRGB 传递函数(大致是 2.4 指数,接近 0 处带一段小的线性段)。当您做颜色运算时这一点很重要:在 gamma 编码形式下对两个 RGB 值求平均,得到的是错误的感知中点。要正确混色,先解码到线性 RGB(CSS Color 4 §11.2),然后求平均,再重新编码。工具的 OKLCH 内部模型让这一切对外透明。

RGB / HEX 工作流最佳实践

品牌指南偏好大写 HEX,代码偏好小写
品牌指南、营销 PDF 与面向设计师的文档通常使用大写 HEX(`#FF5733`),以保持视觉一致 —— 全大写的样子读起来像品牌标识。代码(CSS、JSON、JavaScript 源码)按惯例通常使用小写(`#ff5733`),因为小写更快敲、也是自动生成的 linter 输出中更常见的形式。两者都是合法 CSS,解析结果完全相同;每个场景挑一种、保持一致。工具默认大写;一次机械替换即可切到小写。
只在 alpha < 1 时输出 8 位 HEX
当 alpha 等于 1(完全不透明)时,回退到 6 位形式。末尾的 `FF` 对(`#FF5733FF`)是合法 CSS,但在视觉上会让样式表显得杂乱,还会让某些遗留解析器误渲染。8 位形式应只在 alpha 实际具有意义的透明度时出现。本工具自动遵循这条规则 —— 不透明颜色输出 6 位 HEX,带 alpha 颜色输出 8 位 HEX,分界点是精确的(alpha = 1.0 输出 6 位;alpha = 0.9999 输出 8 位以保留数据)。
不要直接对 RGB 通道求平均做颜色运算
RGB 通道是 gamma 编码的 —— 对两个 RGB 值求平均,得到的是错误的感知中点。`(255, 0, 0)` 与 `(0, 255, 0)` 平均出 `(127, 127, 0)`,一个浑浊的暗橄榄色,而不是您期望的视觉上明亮的黄色中点。要正确混色,先解码到线性 RGB(CSS Color 4 §11.2),然后求平均,再重新编码。或者更好地,在 OKLAB 或 OKLCH 中工作,那里的感知距离是均匀的 —— 设计系统的调色板生成器正是这样做的。
CSS 变量偏好 HEX,硬件偏好 RGB
当您写 CSS 自定义属性或 Tailwind 配置 token 时,偏好 HEX —— 它更短,能干净地放进 JSON 或 YAML。当消费方代码做逐通道运算(canvas 调用、图像操作、硬件 LED 驱动、OpenGL 颜色属性)时,RGB 整数形式更便于消费。两种格式描述同一个颜色;选择纯粹关乎读写者是谁,无关正确性。本工具的同屏字段视图让两者同样便利。
乘以 255 之前先校验 alpha 区间
当您自己实现 RGB → 8 位 HEX 转换器时,在 `× 255` 步骤之前先校验 alpha 浮点数落在 `[0, 1]` 区间内。超出范围的 alpha(负数或 > 1)会安静地产生非法 HEX 对,某些解析器接受、某些拒绝 —— 一种脆弱的失败模式。先夹紧(`Math.max(0, Math.min(1, alpha))`),再乘、再舍入、再 HEX 编码。本工具对超出范围的 alpha 显示一个安静的行内错误,而不是输出损坏的 HEX 字符串。
用 URL 哈希分享实时的颜色决策
每次颜色变更都会自动把 URL 哈希更新为 `#hex=ff5733`。把 URL 复制进 Slack 线程或 GitHub issue,打开它的人会落在同样的颜色、同样的 HEX 上。这比在聊天里粘贴一个 RGB 三元组更可靠 —— 收件人手动输入时偶尔会打错逗号或漏掉一个通道 —— 也让设计评审讨论可以指向某一确切颜色,而不是「上周二聊过的那个橙色」。哈希永远不会传到服务器。

常见问题

怎么把 RGB 转成 HEX?
把每个 0–255 通道整数转成 2 位 16 进制字符串,然后前置 `#` 拼接。JavaScript 里:`[255, 87, 51].map(v => v.toString(16).padStart(2, '0')).join('')` 返回 `'ff5733'`。`padStart(2, '0')` 很关键 —— 没有它,像 `5` 这样的单位通道值会被序列化成 `'5'` 而不是 `'05'`,生成非法 HEX。本工具在您输入时实时跑这套转换 —— 粘贴任意 `rgb()` 值(带或不带空格、用逗号或现代空格语法、带或不带 alpha),HEX 字段就会即时更新为对应的 `#RRGGBB` 或 8 位 `#RRGGBBAA` 值。
HEX 形式的 RGB 是什么?
HEX 形式的 RGB 是把同一个颜色编码为 6 字符的 16 进制字符串。两种形式都把颜色描述为三个通道(红、绿、蓝)、0–255 区间,并锚定在 sRGB 色彩空间。`rgb(255 87 51)` 与 `#FF5733` 在任何接受 `` 的 CSS 位置都可以互换 —— 互转无损。HEX 把同一份信息打包成更简短的形式,能舒服地放进 CSS 变量,在 Figma、Sketch、Photoshop 与代码之间复制粘贴也很干净;`rgb()` 则把三个通道保持为可独立寻址的整数,便于 canvas 调用与硬件 API 使用。
怎么从 RGB 拿到 HEX 代码?
取每个通道值(0–255),调用 `toString(16)` 得到其 16 进制表示,左填零到 2 位,然后前置 `#` 拼接。`rgb(255 87 51)` 变成:`255 → 'ff'`、`87 → '57'`、`51 → '33'`,结果是 `#ff5733`。如果您的风格指南要求,可以转为大写(`#FF5733`);两种形式都是合法的 CSS。对于带 alpha 的 RGB(如 `rgb(255 87 51 / 0.5)`),把 alpha 乘以 255、舍入,再把得到的 2 位 HEX 对附加在末尾:`0.5 × 255 = 128 = 0x80`,结果是 `#ff573380`。本工具会自动完成这两步变换。
RGB 转 HEX 的公式是什么?
对每个通道:`value.toString(16).padStart(2, '0')`。`toString(16)` 把整数转为 16 进制表示;`padStart(2, '0')` 保证结果正好是 2 个字符(对低于 16 的值是必需的,否则它们会被序列化成 1 个字符)。把三个结果拼接、前置 `#`,就得到规范 HEX。从数学上讲:对于通道 `n ∈ [0, 255]`,HEX 数字是 `Math.floor(n / 16)` 与 `n % 16`,通过 `'0123456789abcdef'` 映射出来。没有舍入损失 —— 16² = 256,正好对应每个通道占用的 0–255 字节区间。
rgb(0,0,0) 等于 #000000 吗?
是的 —— 精确相等。`rgb(0, 0, 0)` 与 `rgb(0 0 0)`(现代空格分隔的 CSS Color 4 语法)都会序列化为 `#000000`,纯黑,三个通道都为零。每一对通道都编码为 `00`,拼接成 6 字符 HEX `000000`。另一个极端也成立:`rgb(255, 255, 255)` ↔ `#FFFFFF`(纯白)。任意 RGB 三元组在 6 位 HEX 中都有且仅有一种规范表示,任意 6 位 HEX 也有且仅有一个对应的 RGB 三元组 —— 在整个 16,777,216 色的 sRGB 空间内,这种映射是双射的。
RGB 可以有 alpha 通道吗?
可以 —— 使用遗留的 `rgba()` 形式 `rgba(255, 87, 51, 0.5)`,或现代 CSS Color 4 的斜线语法 `rgb(255 87 51 / 0.5)`。两者都把 alpha 编码为 0(完全透明)到 1(完全不透明)的浮点数。转成 HEX 时,alpha 变成附加在 RGB 之后的第 4 个 2 位对:乘以 255、舍入、HEX 编码。`0.5 × 255 = 128 = 0x80`,所以 `rgb(255 87 51 / 0.5)` 变成 `#FF573380`。带 alpha 的 8 位 HEX 在 2018 年登陆所有常青浏览器;在那之前,`rgba()` 形式是在 CSS 中表达 alpha 的唯一方式。
HEX 与 RGB 有什么区别?
它们以不同的写法编码同一个颜色。HEX 把三个 0–255 通道打包成 6 字符 16 进制字符串(`#FF5733`);`rgb()` 用十进制把三个通道展开(`rgb(255 87 51)`)。HEX 更短,也是设计工具原生格式 —— Figma、Sketch、Photoshop 以及每一份品牌指南 PDF 默认导出 HEX,大多数前端开发者一眼就能认出 `#3b82f6` 是 Tailwind blue-500。RGB 是显式通道寻址、在 JavaScript 里更便于运算,而且是唯一既能干净接受百分比通道、又有原生语法 alpha 的形式。两者都是合法 CSS,互转无损。
RGB 转 HEX 准确吗?
比特精确。RGB → HEX 是整数到字符串的运算,完全不涉及浮点:`toString(16).padStart(2, '0')` 为 0–255 的每个值产出规范的 2 位 HEX 对,反向 (`parseInt(pair, 16)`) 会精确还原原整数。一次 RGB → HEX → RGB → HEX 往返会无限循环产出原始三元组逐字一致。16² = 256,正好对应字节区间,因此两个方向都没有舍入损失。百分比 RGB 输入会先舍入到最近的整数(`50% × 255 / 100 = 127.5 → 128`),这正是标准的 CSS Color 4 归一化规则。