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日

我们的团队根据 W3C CSS Color 4 规范参考向量,以及标准 parseInt / toString 基数 16 往返,核验 HEX 转 RGB 的转换结果。

什么是 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,以及每种形式的不带 # 变体(F73FF5733 等)。解析器在显示前会把它们全部归一到同一个内部 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 不一致 —— <font color="#FF5733"> 在某些平台上可能渲染为黑色。可靠的兜底是等价的 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 在任何接受 <color> 的地方都可以互换。两个方向都没有舍入损失: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 转换器