颜色转换器

在 HEX、RGB 和 HSL 格式之间即时转换颜色。免费,转换在浏览器中完成。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
打开浏览器的颜色选择器。选色后,HEX、RGB、HSL 和预览立即更新。
清除三个输入框、色值标签与状态。焦点在本工具内时,Ctrl/⌘+L 执行相同操作。
输入 3 位或 6 位十六进制数字,可带 #,不区分大小写。输入完整值后,其他格式自动更新。「复制」使用本框文字。全角输入按半角读取。不支持 8 位 HEX。
输入逗号分隔的 0–255 整数通道,如 rgb(26, 115, 232)。接受 rgba(),但忽略透明度。不支持百分比和空格分隔的 RGB。末尾的分号会被忽略,值后面的其他文字会被拒收。
输入逗号分隔的非负数,如 hsl(214, 82%, 51%),可用小数并省略 %。色相超过 360 后循环,饱和度和亮度超过 100 时截到 100。从 HEX 或 RGB 换算的 HSL 会取整,需要精确颜色时请用 HEX 或 RGB。
#1a73e8
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

关于颜色格式

HEX 是网页中最常用的颜色格式。六位代码如 #1a73e8,用两个十六进制数字分别表示红、绿、蓝通道(00–FF)。

RGB 用十进制数(0–255)表示同样的三个通道,便于程序化调整: rgb(26, 115, 232)。

HSL 代表色相(Hue)、饱和度(Saturation)、亮度(Lightness),是更直观的颜色模型。 色相为 0–360°,饱和度和亮度为百分比:hsl(214, 82%, 51%)。 HSL 非常适合通过调整亮度来生成色阶。

一个颜色的完整换算

以 #1a73e8 为例。每两位十六进制是一个通道:1a = 26,73 = 115,e8 = 232,所以 RGB 是 rgb(26, 115, 232)。

换算 HSL 时,先把三个通道缩放到 0–1,找出最大值(0.910,蓝)和最小值(0.102,红):

  • 亮度 = (最大 + 最小) / 2 = 0.506 → 51%
  • 饱和度 = (最大 − 最小) / (2 − 最大 − 最小) = 0.817 → 82%(亮度高于 50% 时用这个公式)
  • 色相:蓝色通道最大,色相 = 60 × ((R − G) / (最大 − 最小) + 4) = 214.1 → 214

工具显示 hsl(214, 82%, 51%)。公式与 CSS Color Module Level 4 一致。

用 Ant Design 的色值试一试

Ant Design 的主色 token colorPrimary 默认是 #1677ff(见官方文档定制主题的 SeedToken 表)。粘贴进 HEX 框,得到 rgb(22, 119, 255) 和 hsl(215, 100%, 54%)。

假如设计稿里只记了 HSL,把 hsl(215, 100%, 54%) 输回 HSL 框,HEX 变成 #1476ff:红色通道少了 2,绿色通道少了 1。这就是 HSL 取整带来的误差,写进 ConfigProvider 的 theme.token 时请直接用 HEX。

主色激活态 colorPrimaryActive 的默认值是 #0958d9,对应 rgb(9, 88, 217) 和 hsl(217, 92%, 44%)。

蒙层颜色 colorBgMask 的默认值是 rgba(0,0,0,0.45)。粘贴进 RGB 框后,透明度 0.45 被丢掉,结果是 #000000 和 hsl(0, 0%, 0%)。这类带透明度的 token 不适合用本工具换算,需要自己另外记下 alpha 值。

输入框接受什么

  • HEX: 3 位或 6 位,可带 #,不区分大小写。输入到 3 位或 6 位时其他框才会更新;输入 4、5 位的过程中,其他框保留上一个颜色;超过 6 位判为无效。
  • RGB: 逗号分隔的 rgb(r, g, b),每个通道是 0–255 的整数。rgba(...) 可以读取,但第四个值被丢弃。百分比(rgb(10%, 45%, 91%))、小数和空格分隔的写法不接受。
  • HSL: 逗号分隔的 hsl(h, s%, l%),可以用小数,% 可以省略。色相超过 360 时绕回一圈,饱和度和亮度超出 0–100% 时截断,与 CSS Color 4 第 7 节一致。214deg 这样的角度单位和负色相不接受。

例如 hsl(480, 100%, 25%) 与色相 120 相同,得到 #008000。

输入先按 NFKC 换成半角再读取,所以混入全角逗号的 rgb(26,115,232) 也能换算,得到 #1a73e8 和 hsl(214, 82%, 51%)。离开输入框时,框里的文字会换成半角的 rgb(26,115,232)。

无法识别的输入会让状态栏显示「颜色格式无效」,另外两个框同时清空,这样「复制」不会拿到旧颜色。顿号「、」没有对应的半角字符,用顿号分隔的 rgb(26、115、232) 就属于这种情况。

颜色值后面多出的文字不会被忽略。rgb(26, 115, 232)abc 会显示「颜色格式无效:请删去颜色值后面多余的文字。」三个数之后只允许透明度、右括号和空格,所以还没输完的 rgb(26, 115, 232 仍会正常换算。

从样式表里复制的值末尾带分号或两端带引号时,工具会先去掉再读取:rgb(26, 115, 232); 得到 #1a73e8 和 hsl(214, 82%, 51%)。

限制

  • 不支持透明度。 8 位十六进制(#1a73e880)会被判为无效,rgba(26, 115, 232, 0.5) 里的透明度会被忽略。
  • HSL 取整。 输入 hsl(214, 82%, 51%) 得到的是 #1c74e9 而不是 #1a73e8,因为取整后的数值已经不能精确指回原色。请以 HEX 值为准。
  • 只支持三种格式: HEX(3 位或 6 位,#abc 会展开成 #aabbcc)、RGB 和 HSL,不支持 HSB/HSV、HWB、OKLCH。

FAQ

支持哪些颜色格式?

HEX、RGB 和 HSL,可以任意方向互转。HEX 接受 3 位或 6 位,可带 #,不区分大小写:#FF5733 和 #ff5733 结果相同,#f53 按 #ff5533 处理。RGB 写成逗号分隔的 rgb(255, 87, 51),HSL 写成 hsl(11, 100%, 60%)。

支持透明度吗?

不支持,只处理不透明颜色。rgba() 的第四个值会被忽略,#1a73e880 这类 8 位 HEX 会被判为格式无效。

为什么 HSL 换回 HEX 后差了一点?

HSL 按整数显示,多数颜色会损失一点精度。#1a73e8 显示为 hsl(214, 82%, 51%),把这个 HSL 输回去得到的是 #1c74e9。需要精确颜色时,请复制 HEX 或 RGB。

数据会发送到服务器吗?

不会。换算在浏览器标签页里用 JavaScript 完成,输入的色值不会发送到服务器,也不会保存在浏览器存储里。页面统计只记录你点了哪个「复制」按钮(如 copy_hex),不包含色值。

输入里混入全角逗号或全角字母能识别吗?

能。工具先按 NFKC 把全角字母、数字和标点换成半角再读取,rgb(26,115,232)、#1A73E8 都按半角换算;离开输入框后,框里的文字也会换成半角,复制出来就是标准写法。顿号「、」没有对应的半角字符,rgb(26、115、232) 仍会显示「颜色格式无效」。