Skip to content

HEX 转 RGB 转换器

在浏览器中把任意 HEX 颜色代码转成 RGB —— 3 位、6 位以及带 alpha 的 8 位 HEX 全部支持。免费、即时、免注册,您的颜色永远不会离开本页。

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

什么是 HEX 转 RGB 转换器?

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

**RGB 格式本身值得仔细看一眼。** 标准 24 位 sRGB 把每个通道编码为 0–255 的 8 位无符号整数 —— 每通道 256 个值,合计 16,777,216 种颜色(256³)。参考标准是 IEC 61966-2-1,1996 年的 sRGB 规范,锚定在当时主导显示器的 CRT 荧光粉原色上。CSS 通过 `rgb()` 函数以三种语法形态暴露 RGB。最初的 CSS 1 形式使用逗号分隔:`rgb(255, 87, 51)`。CSS Color 4(自 2022 年起的 W3C 候选推荐)加入了现代的空格分隔形式:`rgb(255 87 51)`,并通过斜线后可选地附加 alpha 通道:`rgb(255 87 51 / 0.5)`。两种形式可以互换,在每一款常青浏览器里都有支持。RGB 也接受百分比通道:`rgb(100% 33% 20%)` 等价于 `rgb(255 87 51)`,有时在手写样式表里因为可读性更受偏爱。Alpha 还有一个专门的 `rgba()` 函数用于遗留支持 —— `rgba(255, 87, 51, 0.5)` 是处处都能工作、一直支持到 IE 9 的规范形式。CSS Color 4 还加入了 `color(srgb 1 0.341 0.2)` 语法用于显式寻址 sRGB,以及与之并行的 `color(display-p3 ...)` 与 `color(rec2020 ...)` 函数用于 HEX 无法编码的广色域值。

转换数学在两个方向上都很干净。**HEX 转 RGB**:用 `parseInt(hex.slice(1, 3), 16)`、`parseInt(hex.slice(3, 5), 16)`、`parseInt(hex.slice(5, 7), 16)` 把 6 位 HEX `#RRGGBB` 解析成三个 2 位 16 进制数。对于 3 位简写 `#RGB`,把每一位复制一次(`#F73` → `#FF7733`)再解析 —— 这**不是**左填充。对于 8 位 alpha `#RRGGBBAA`,以同样方式解析末尾那一对,再除以 255 得到 0–1 的 alpha 浮点数。对于 4 位 alpha 简写 `#RGBA`,先把每一位复制一次(`#F738` → `#FF773388`)。**RGB 转 HEX** 是其逆运算:对每个通道,调用 `value.toString(16).padStart(2, '0')` 得到 2 位 HEX 对(`padStart` 很关键 —— 没有它,通道值 5 会被序列化为 `'5'` 而不是 `'05'`,生成非法 HEX),再拼接。两个方向都是比特精确的:16² = 256,正好对应每个通道占用的 0–255 字节区间,因此 HEX → RGB → HEX 往返产出原始输入逐字一致、无浮点漂移。

**HEX 与 RGB,孰优孰劣?** HEX 更短、是设计工具原生格式,也是您眼睛会逐渐学会的格式 —— 大多数前端开发者能一眼认出 `#3b82f6` 是 Tailwind blue-500。RGB 是显式通道寻址,在 JavaScript 里更便于运算,而且是两者中唯一干净接受 alpha 与百分比的格式。两种格式并存,是因为它们解决不同的问题。Web 样式表与品牌指南偏向 HEX,因为复制粘贴成本占主导。Canvas 绘制调用、图像处理、硬件 LED API,以及任何做逐通道运算的代码,都偏向 RGB,因为在元组里寻址比切字符串快。在一个典型的 Web 项目中,这两者之间的切换会发生几十次 —— 从 Figma 粘贴一个 HEX,转成 RGB 整数用于 `ctx.fillStyle = ...` 调用,再转回 HEX 用于 CSS 变量定义。

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

// Parse any hex shape (3/4/6/8-digit) into an RGB tuple [r, g, b, a]
// All channels in 0-255 range; alpha in 0-1.
function parseHex(input) {
  let h = input.trim().replace(/^#/, '');
  // Expand 3-digit and 4-digit shorthand by duplicating each digit
  if (h.length === 3 || h.length === 4) {
    h = h.split('').map(c => c + c).join('');
  }
  if (!/^[0-9a-fA-F]+$/.test(h) || (h.length !== 6 && h.length !== 8)) {
    throw new Error(`Invalid hex: ${input}`);
  }
  const r = parseInt(h.slice(0, 2), 16);
  const g = parseInt(h.slice(2, 4), 16);
  const b = parseInt(h.slice(4, 6), 16);
  const a = h.length === 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1;
  return [r, g, b, a];
}

console.log(parseHex('#FF5733'));   // [255, 87, 51, 1]
console.log(parseHex('#F73'));       // [255, 119, 51, 1]
console.log(parseHex('#FF573380'));  // [255, 87, 51, 0.5019607843137255]

核心特性

全部 5 种 HEX 形态统一解析

3 位 `#F73`、4 位 alpha `#F738`、6 位 `#FF5733`、8 位 alpha `#FF5733CC`,以及每种形式的不带 `#` 变体(`F73`、`FF5733` 等)。解析器在显示前会把它们全部归一到同一个内部 RGB 三元组,因此无论您的来源用哪种形态,都可以直接粘贴,不必先手动展开简写。大小写也会被归一 —— `#ff5733` 与 `#FF5733` 产生完全相同的输出。

现代空格分隔语法的 RGB 输出

RGB 字段以 CSS Color 4 的现代形式呈现:不透明颜色为 `rgb(255 87 51)`,带 alpha 时为 `rgb(255 87 51 / 0.5)`。两种形态在每个常青浏览器(Chrome 65+、Safari 13+、Firefox 52+)中都工作。如果您的目标需要,遗留逗号形式 `rgb(255, 87, 51)` 只是一次机械替换的事;新代码中更推荐现代语法,因为它与 CSS Color 4 其他函数式语法对齐。

比特精确,无浮点漂移

HEX → RGB 是整数到整数的运算:`parseInt(hex, 16)` 返回一个精确的 0–255 值,零浮点参与。反方向(`.toString(16).padStart(2, '0')`)同样精确。一次 HEX → RGB → HEX → RGB → HEX 的往返产出原始输入逐字一致,无限循环都不变。OKLCH 作为内部事实源,意味着即便更长的链路 HEX → RGB → HSL → OKLAB → HEX 也保持比特稳定,而把转换走 HSL 作枢轴的老式转换器无法保证这一点。

alpha 通道干净解码

带 alpha 的 8 位与 4 位 HEX(`#RRGGBBAA` 与 `#RGBA`)被正确解析。末尾那一对映射到 0–1 的 alpha 浮点数:`00` → 0,`80` → 0.502,`FF` → 1。输出默认采用 CSS Color 4 的斜线语法(`rgb(255 87 51 / 0.5)`);遗留的 `rgba(255, 87, 51, 0.5)` 形式只是一次替换的事。在设计 token 迁移中,当 alpha 值可能被埋在 8 位 HEX 代码里时非常有用。

另外 8 种格式同屏可见

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

内置 WCAG + APCA 对比度

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

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

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

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

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

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

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

HEX 转 RGB 转换器替代品对比

RapidTables Hex to RGB

browser tool

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

ColorHexa

browser tool

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

W3Schools HEX 计算器

browser tool

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

浏览器 DevTools 取色器

built-in browser feature

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

macOS Digital Color Meter

native macOS app

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

ConvertingColors

browser tool

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

HEX 转 RGB 示例

从截图里粘贴一个 HEX → RGB 三元组

#FF5733

RGB 输出:`rgb(255 87 51)`。最经典的用例 —— 设计师把品牌色拖进 Figma,您截了图,吸管给了您 HEX,而现在您需要通道整数,用于一次 canvas 绘制调用、一条硬件 LED 灯带,或者针对图像缓冲区做像素运算。这里展示的 CSS Color 4 空格分隔语法是现代写法;遗留的逗号形式 `rgb(255, 87, 51)` 含义完全相同,自 IE 3 起每个浏览器都支持。

把 Tailwind 品牌 HEX 转成 RGB 用于 Photoshop

#3b82f6

RGB 输出:`rgb(59 130 246)`。Adobe 的取色器(Photoshop、Illustrator、InDesign 里都一样)接受 0–255 区间的 RGB 整数作为原生输入 —— 把 59 / 130 / 246 填进三个通道框,您就精确匹配上了 Tailwind 的 `blue-500`。当设计师需要在面向印刷的排版应用里模拟一个 Web 颜色,或者您正在把品牌色采样进色卡库以便做图像编辑时,这套流程非常好用。

带 alpha 的 8 位 HEX → rgba

#FF573380

RGB 输出:`rgb(255 87 51 / 0.5)`。末尾那一对(`80`)解码为 `128/255 ≈ 0.502`,通过 CSS Color 4 的斜线语法体现为 alpha 通道。等价的遗留形式是 `rgba(255, 87, 51, 0.5)`,至今依然处处都被支持,也是更老的预处理器所期望的写法。带 alpha 的 8 位 HEX 在 2018 年原生登陆了所有常青浏览器;在那之前,alpha 只能通过 `rgba()` 函数来表达。

3 位短 HEX 展开

#F73

RGB 输出:`rgb(255 119 51)`。CSS 规范把 3 位 HEX 定义为一种简写,其中每一位都被复制一次以形成 6 位等价值:`#F73` 展开为 `#FF7733`,因此 R = `FF` = 255、G = `77` = 119、B = `33` = 51。这**不是**左填充 —— `#F73` **不是** `#000F73`。许多初学者搞错了这一点;本工具的展开行为让规则一眼可见。

常见 HEX → RGB 转换

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

黑色

#000000 rgb(0 0 0)

纯黑。三个通道都为零 —— 没有发出任何光。RGB 三元组 (0, 0, 0)。

#000000 rgb(0 0 0)

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

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

白色

#FFFFFF rgb(255 255 255)

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

#FFFFFF rgb(255 255 255)

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

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

红色

#FF0000 rgb(255 0 0)

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

#FF0000 rgb(255 0 0)

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

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

绿色

#00FF00 rgb(0 255 0)

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

#00FF00 rgb(0 255 0)

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

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

蓝色

#0000FF rgb(0 0 255)

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

#0000FF rgb(0 0 255)

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

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

青色

#00FFFF rgb(0 255 255)

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

#00FFFF rgb(0 255 255)

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

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

品红

#FF00FF rgb(255 0 255)

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

#FF00FF rgb(255 0 255)

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

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

黄色

#FFFF00 rgb(255 255 0)

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

#FFFF00 rgb(255 255 0)

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

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

Tailwind blue-500

#3b82f6 rgb(59 130 246)

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

#3b82f6 rgb(59 130 246)

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

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

Tailwind rose-500

#f43f5e rgb(244 63 94)

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

#f43f5e rgb(244 63 94)

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

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

如何使用 HEX 转 RGB 转换器

  1. 1

    把 HEX 代码粘贴到 HEX 字段

    把任意 HEX 值丢进 HEX 输入框 —— 带或不带前导 `#`、3 位简写(`#F73`)、6 位完整形式(`#FF5733`)、4 位 alpha 简写(`#F738`),或者 8 位 alpha 完整形式(`#FF5733CC`)。工具会把全部 5 种输入形态在内部归一到同一规范颜色。大小写无关(`#ff5733` 与 `#FF5733` 解析结果完全相同)。非法字符或位数错误会产生一个安静的行内错误;合法 HEX 则会实时刷新其他每一个格式字段。

  2. 2

    从 RGB 字段读取 RGB 三元组

    HEX 字段下方的 RGB 字段以 CSS Color 4 现代空格分隔语法显示对应的 `rgb()` 值:不透明颜色为 `rgb(255 87 51)`,带 alpha 时为 `rgb(255 87 51 / 0.5)`。每个通道是 0–255 整数;alpha 归一化到 0–1。数值是比特精确的 —— `parseInt('FF', 16)` 返回 255,过程中不涉及浮点运算,因此往返回到 HEX 时输出与原始输入逐字一致。

  3. 3

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

    每个格式卡片右侧都有一个复制按钮。一键即可把值送到剪贴板 —— 按钮标签短暂闪现「Copied!」以便您知道。复制出来的字符串是规范的 CSS Color 4 语法(`rgb(255 87 51)`);如果您的目标需要遗留的逗号形式,转换是机械的(把空格替换为 `, `)。要输出特定平台的代码(SwiftUI、Compose、Flutter、Tailwind v4),请使用取色器下方的「复制为代码」区段。

  4. 4

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

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

  5. 5

    用取色器做可视化微调

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

HEX / RGB 常见错误

把 3 位 HEX 当成左填充

3 位简写 `#RGB` 通过*复制每一位*来展开,而不是左填零。`#F73` 变成 `#FF7733`(亮橙),不是 `#000F73`(深蓝)。这是 CSS 颜色语法最常被搞错的角落;初学者经常以为简写是某种零填充,结果得到完全不对的颜色。同样规则也适用于 4 位 alpha 简写 `#RGBA` —— 每一位复制一次以形成 8 位等价值。

✗ 错误
假定 #F73 左填充到 #000F73:
expected: 深蓝 rgb(0, 15, 115)
actual:   亮橙 rgb(255, 119, 51)
✓ 正确
3 位简写复制每一位:
#F73 → #FF7733 → rgb(255, 119, 51)
本工具的实时展开会随键入显示这一点。

把 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 通道值都正确。

搞混 8 位 HEX 的 alpha 顺序

CSS 8 位 HEX 是 `#RRGGBBAA` —— alpha 是*末尾*那一对。某些颜色库(尤其是较老 Android 的 `Color.parseColor()`)使用相反顺序 `#AARRGGBB`,alpha 在*前面*,这与 CSS HEX 不兼容。一个 Web HEX `#FF573380`(50% alpha 的橙色)被当作 `#AARRGGBB` 解读会变成 alpha=255、R=87、G=51、B=128 —— 完全不透明的深青色。在 8 位 HEX 往返之前,务必核实目标平台的 alpha 顺序。

✗ 错误
把 CSS 8 位 HEX 粘进遗留 Android 的 Color.parseColor():
#FF573380 被当作 #AARRGGBB 解读
→ 颜色和 alpha 都完全错了。
✓ 正确
使用目标平台所声明的格式:
for Android Compose: Color(0xFFFF5733) alpha 在首字节
for CSS: #FF573380 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)
可见的明亮黄色,与物理光混合的结果相符。

谁在使用 HEX 转 RGB

前端开发者把 Figma HEX 转成 Canvas RGB 调用
Figma 导出 HEX,而 `CanvasRenderingContext2D.fillStyle` 既接受 HEX 也接受 `rgb()` —— 当您在做逐通道运算(渐变、混合、图像操作)时,直接拿到通道整数比每次重新解析 HEX 更快。HEX 粘贴一次,复制 `rgb(255 87 51)` 三元组,插入 canvas 调用。您这边一行 HEX 解析代码都不用写。
设计师把 Web HEX 翻译给 Photoshop / Illustrator RGB
Adobe 的取色器把跨三个通道框的 0–255 整数作为原生输入。把 Web HEX 粘贴到本工具,读出 R / G / B 整数,在 Photoshop 中输入。原 Web 颜色被精确匹配,无需绕道截图加吸管。当设计师需要在面向印刷的 Adobe 排版应用中模拟一个 Web 颜色时很有用。
游戏开发者把品牌 HEX 加载进 Unity / Unreal RGB API
Unity 的 `Color` 和 Unreal 的 `FLinearColor` 都接受 0–1 归一化浮点数。粘贴品牌 HEX,读出 0–255 整数,除以 255(或通过「复制为代码」直接用工具的归一化浮点输出)。这个转换是机械的但手做容易出错 —— 把 `(255, 87, 51)` 输进期望 `(1.0, 0.341, 0.2)` 的构造器,会得到一个被裁成白色的颜色和一条困惑的推文。本工具同屏展示两种形式。
硬件开发者给可寻址 LED 灯带编程
WS2812、APA102 以及其他可寻址 RGB LED 灯带把每个 LED 表示为 0–255 整数通道。粘贴墙挂产品展示用的品牌 HEX,读出 RGB 三元组,把它放进控制器的颜色数组。当市场团队指定一个 HEX、固件工程师需要通道值用于一次 `pixels.setPixelColor(i, r, g, b)` 调用时非常有用。
无障碍工程师核验品牌色可读性
WCAG 2.1 对比度检查在内部接受 RGB 输入。粘贴品牌 HEX,在一屏内得到对应的 RGB,加上对白与对黑的 WCAG 比率,再加上 APCA Lc 分数。如果品牌色没过正文文本 4.5:1 的下限,旁边那个感知均匀的 OKLCH 字段能让您方便地往上推 L,直到对比度通过,且不丢失品牌识别度。
设计师在邮件模板中内嵌 RGB
某些邮件客户端(Windows 上的 Outlook、较老的 Gmail 移动版)在 HTML 属性中解析 HEX 不一致 —— `` 在某些平台上可能渲染为黑色。可靠的兜底是等价的 RGB `rgb(255, 87, 51)` 内联形式。粘贴品牌 HEX,用遗留逗号语法复制 RGB 字符串(从现代空格形式手动替换),放进邮件模板的 `style` 属性。
开发者用两种格式记录品牌 token
设计 token 文档常常用两种格式展示同一个颜色:CSS 代码块用 HEX,文案注释用 RGB(「品牌红是 `#FF5733`,等价于 RGB 255 / 87 / 51」)。同屏并排显示两者,让文档作者一次复制全部,而不必跑两个工具。可分享的 URL 哈希也让读者能点进去看到讨论中那一确切颜色。
QA 工程师验证像素颜色快照
视觉回归测试常常对渲染像素断言特定的 RGB 值(`expect(pixel.r).toBe(255)`)。当规范以 HEX 形式给出(「按钮必须渲染为 `#FF5733`」)时,QA 工程师需要对应的 RGB 整数才能写出断言。粘贴 HEX,读出 R / G / B,插入测试。转换的比特精确性意味着测试不会因为浮点漂移差异而抖动。

HEX 转 RGB 的数学与解析

parseInt(hex, 16) 即为一行实现
整个 HEX 到 RGB 的转换每通道一行表达式就够了:R 用 `parseInt(hex.slice(1, 3), 16)`、G 用 `parseInt(hex.slice(3, 5), 16)`、B 用 `parseInt(hex.slice(5, 7), 16)`。JavaScript 的 `parseInt` 在基数 16 下把 HEX 字符串读成 0–255 范围内的十进制整数,完全不涉及浮点。反方向(`value.toString(16).padStart(2, '0')`)同样是一行式 —— `padStart(2, '0')` 是容易遗忘的细节,它能让像 5 这样的单位通道值得到 `'05'` 而不是 `'5'`。
简写展开:复制每位,而不是左填充
CSS 规范把 3 位简写定义为 `#RGB` 通过复制每一位扩展为 `#RRGGBB`。`#F73` → `#FF7733`,**不是** `#000F73`。同样规则适用于 4 位 alpha 简写 `#RGBA` → `#RRGGBBAA`。这是 CSS 颜色语法里最常被搞错的角落之一 —— 初学者经常以为 `#F73` 是左填充成 `#000F73`,那会得到一个完全不同的颜色(去饱和的深蓝,而不是预期的亮橙)。本工具的展开行为让规则一眼可见。
8 位 alpha:末尾那一对,除以 255
8 位 HEX `#RRGGBBAA` 在 RGB 三元组之后用一对 2 位 HEX 编码 alpha,以相同方式解析,然后除以 255 得到 0–1 浮点数。`#FF573380` 解析出 alpha = `0x80 / 255 = 128 / 255 = 0.5019607843137255`。CSS Color 4 规范对输出使用 4 位小数精度(`/ 0.502`);本工具沿用同一约定。8 位 HEX 在 2018 年登陆所有常青浏览器(Chrome 62、Firefox 49、Safari 9.1、Edge 79)。2018 年之前的回退是 `rgba()`。
RGB 输出:默认 CSS Color 4 空格分隔
工具默认输出 `rgb(255 87 51)`(现代空格分隔),而不是遗留的 `rgb(255, 87, 51)`(CSS 1 逗号分隔)。两种形态在 2018 年以来的每个常青浏览器中都是合法且可互换的。现代语法与 CSS Color 4 的其他函数式记法(`hsl()`、`lab()`、`oklch()`、`color()`)对齐,它们全部使用空格分隔加斜线表 alpha。如果您的工具链需要,遗留的逗号形式只是一次机械替换的事;在 IE 9–11 场景中,`rgba()` 仍然是合适的回退。
OKLCH 作为内部事实源,保障往返稳定
尽管这个辐条专门针对 HEX → RGB,共享的底层转换器在内部以 OKLCH 三元组持有规范颜色。这意味着 HEX → RGB → HSL → OKLAB → CMYK → HEX 往返不会有逐步浮点漂移;把 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 内部模型让这一切对外透明。

HEX / RGB 工作流最佳实践

新代码使用现代空格分隔的 RGB 语法
对于 2025 年及以后交付的代码,CSS Color 4 的 `rgb(255 87 51)`(空格分隔)和 `rgb(255 87 51 / 0.5)`(斜线表 alpha)是规范语法。遗留的逗号形式 `rgb(255, 87, 51)` 与 `rgba(255, 87, 51, 0.5)` 仍处处被支持,但在 CSS Color 4 中已在文体上被视为不推荐。新样式表中请使用现代语法;只在确实需要遗留支持的 IE 9–11 场景里继续保留 `rgba()` 作为兜底。
上线带 alpha 的代码前,核验 8 位 HEX 支持
带 alpha 的 8 位 HEX(`#FF573380`)在 2018 年登陆所有常青浏览器,但遗留 CSS 预处理器与某些较老的设计工具会静默把 alpha 那一对截断为 6 位 HEX。结果就是:一个您期望 50% 透明的颜色,渲染成完全不透明。在生产环境发布 8 位 HEX 之前,请核实目标解析器是否支持;对于遗留目标,请回退到显式的 `rgba(255, 87, 51, 0.5)` 语法,它自 IE 9 起就一直被支持。
不要直接对 RGB 通道求平均做颜色运算
RGB 通道是 gamma 编码的 —— 对两个 RGB 值求平均,得到错误的感知中点。`(255, 0, 0)` 与 `(0, 255, 0)` 平均出 `(127, 127, 0)`,一个浑浊的暗橄榄色,而不是您期望的视觉上明亮的黄色中点。要正确混色,先解码到线性 RGB(CSS Color 4 §11.2),然后求平均,再重新编码。或者更好地,在 OKLAB 或 OKLCH 中工作,那里的感知距离是均匀的 —— 设计系统的调色板生成器正是这样做的。
设计 token 源用 HEX,硬件用 RGB
在写设计 token 规范时,以 HEX(或 OKLCH)作为规范形式 —— 它们更短,能干净地放进 JSON 或 YAML。当消费方代码做逐通道运算(canvas 调用、图像操作、硬件 LED 驱动、OpenGL 颜色属性)时,RGB 整数形式更方便消费。两种格式描述同一个颜色;选择纯粹关乎读写者是谁,无关正确性。本工具的同屏字段视图让两者同样便利。
在 token 名中显式记录 alpha
当设计 token 包含 alpha(例如一个 50% 不透明的遮罩),不要把 alpha 埋进 8 位 HEX 像 `#000000CC` —— 把 token 拆成 `--color-overlay-base: #000000` 与 `--color-overlay-alpha: 0.8`,或者使用显式 RGBA 形式。把 alpha 埋进 HEX 会让任何浏览这份文件的人都读不懂 token,也让按 token 微调 alpha 变得困难,必须先重新解析 HEX。当代价只是多一个变量时,token 系统的清晰度胜过简短性。
用 URL 哈希分享实时的颜色决策
每次颜色变更都会自动把 URL 哈希更新为 `#hex=ff5733`。把 URL 复制进 Slack 线程或 GitHub issue,打开它的人会落在同样的颜色、同样的 RGB 三元组上。这比在聊天里粘贴一个 HEX 字符串更可靠 —— 收件人手动输入时偶尔会打错字符 —— 也让设计评审讨论可以指向某一确切颜色,而不是「上周二聊过的那个橙色」。哈希永远不会传到服务器。

常见问题

怎么把 HEX 代码转成 RGB?
把 6 位 HEX 拆成三组 2 位,然后把每组当作 0–255 的 16 进制数读取。`#FF5733` 变成 R=`FF`=255、G=`57`=87、B=`33`=51,得到 `rgb(255 87 51)`。3 位简写 `#F73` 通过把每一位重复一遍展开成 `#FF7733` 再拆分。本工具在您输入时实时完成转换 —— 粘贴任意 HEX(带或不带 `#`,3 位、6 位、4 位或带 alpha 的 8 位),RGB 字段就会即时更新为对应的 `rgb()` 值。
HEX 和 RGB 是同一个东西吗?
它们用不同的写法编码同一份信息。两者都把颜色描述为三个通道(红、绿、蓝)、0–255 区间,并锚定在 sRGB 色彩空间。HEX 把三个通道打包成 6 字符的 16 进制字符串(`#FF5733`);`rgb()` 函数则用十进制把它们展开(`rgb(255 87 51)`)。互转无损 —— 同一个颜色从 HEX → RGB → HEX 不会漂移。HEX 在 CSS 变量里更短;`rgb()` 通过 `rgba()` 支持 alpha 通道,也支持 CSS Color 4 的百分比语法。
怎么读一个 HEX 颜色代码?
HEX 颜色在 `#` 之后有 6 个十六进制数字,按 **RR GG BB** 分组。每对编码一个通道,从 `00`(无,十进制 0)到 `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 通道值算出颜色,或希望在样式表中通过显式百分比语法提升可读性时,请用 `rgb()`(或 CSS Color 4 中现代的空格分隔 `rgb(R G B / A)` 语法)。
HEX 代码可以带 alpha 吗?
可以 —— 使用 8 位 HEX(`#RRGGBBAA`)或 4 位简写(`#RGBA`)。alpha 那一对遵循同样的 0–`FF` 比例:`#FF573300` 完全透明,`#FF5733FF` 完全不透明,`#FF573380` 大约 50%。带 alpha 的 4 位与 8 位 CSS HEX 在 2018 年已原生登陆所有常青浏览器(Chrome 62、Firefox 49、Safari 9.1、Edge 79)。对于会静默截断 alpha 那一对的老解析器和遗留 CSS 预处理器,可以回退到 `rgba(255, 87, 51, 0.5)`,自 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 ...)`。
怎么把 RGB 转成 HEX?
反推公式:不做任何除法,直接把每个通道整数转成 2 位 16 进制表示再拼接。JavaScript 里:`[255, 87, 51].map(v => v.toString(16).padStart(2, '0')).join('')` 返回 `'ff5733'`,再前置 `#`。`padStart(2, '0')` 很关键 —— 没有它,像 `5` 这样的单位值会被序列化成 `'5'` 而不是 `'05'`,生成非法 HEX。本系列的反向工具是专门的 RGB 转 HEX 转换器