十六进制颜色代码详解:#RRGGBB 是怎么回事
像 #1e90ff 这样的十六进制颜色代码由三组十六进制数组成,分别表示红、绿、蓝三种光的强度,每组从 00(没有)到 ff(全满,即 255)。再加第四组就能设置不透明度:80 约等于 50%,ff 表示完全不透明。
阅读约 1 分钟
十六进制颜色代码的原理
屏幕上的每个颜色都是由红、绿、蓝三种光混合而成的。十六进制代码在 # 号后面用两个字符表示每种光的强度,顺序是红、绿、蓝,这就是 #RRGGBB 格式。
这些字符是十六进制数,即用 16 个数字计数:0 到 9,然后是 a (10)、b (11)、c (12)、d (13)、e (14) 和 f (15)。一组两位数可以表示 256 个值,从 00 (0) 到 ff (255),正好是 rgb() 的范围。
要把一组数换算成普通数字,用第一位乘以 16 再加上第二位。下面先用四种格式展示 #1e90ff(CSS 颜色 dodgerblue),再逐组换算。
| 格式 | 值 |
|---|---|
| HEX | |
| RGB | |
| HSL | |
| OKLCH |
| 分组 | 通道 | 计算 | 数值 |
|---|---|---|---|
| 1e | 红 | 1 × 16 + 14 | 30 |
| 90 | 绿 | 9 × 16 + 0 | 144 |
| ff | 蓝 | 15 × 16 + 15 | 255 |
所以 #1e90ff 就是 rgb(30, 144, 255):少量红、较多绿、满格蓝,合起来是明亮的天蓝色。三组各 256 个值,一共可以组合出 16,777,216 种颜色。
三位和四位十六进制简写
如果每组的两位数字都相同,就可以每组只写一位。#ffcc00 可以写成 #fc0,浏览器会把每一位重复一次还原。#1e90ff 没有简写形式,因为 1e 和 90 都不是重复的数字。
简写只能表示约 1670 万种颜色中的 4,096 种。四位的写法用同样的方式加上不透明度,例如 #f008 等于 #ff000088。
| 简写 | 完整写法 | 颜色 |
|---|---|---|
| #fff | #ffffff | 白色 |
| #000 | #000000 | 黑色 |
| #f00 | #ff0000 | 红色 |
| #fc0 | #ffcc00 | 暖黄色 |
| #abc | #aabbcc | 灰蓝色 |
| #f008 | #ff000088 | 53% 不透明度的红色 |
十六进制透明度:带 alpha 的八位 HEX
八位代码增加了第四组,表示 alpha,即不透明度:#RRGGBBAA。00 表示完全透明,ff 表示完全不透明。所有主流浏览器的当前版本都在 CSS 中支持这种写法,也支持四位的 #RGBA 简写。
计算方法是:不透明度乘以 255,四舍五入取整,再转换成十六进制。50% 得到 127.5,四舍五入为 128,写作 80。下面是应用到 #1e90ff 上的完整对照表。
| 不透明度 | Alpha (0–255) | 十六进制 | 带 alpha 的 #1e90ff |
|---|---|---|---|
| 100% | 255 | ff | #1e90ffff |
| 95% | 242 | f2 | #1e90fff2 |
| 90% | 230 | e6 | #1e90ffe6 |
| 85% | 217 | d9 | #1e90ffd9 |
| 80% | 204 | cc | #1e90ffcc |
| 75% | 191 | bf | #1e90ffbf |
| 70% | 179 | b3 | #1e90ffb3 |
| 65% | 166 | a6 | #1e90ffa6 |
| 60% | 153 | 99 | #1e90ff99 |
| 55% | 140 | 8c | #1e90ff8c |
| 50% | 128 | 80 | #1e90ff80 |
| 45% | 115 | 73 | #1e90ff73 |
| 40% | 102 | 66 | #1e90ff66 |
| 35% | 89 | 59 | #1e90ff59 |
| 30% | 77 | 4d | #1e90ff4d |
| 25% | 64 | 40 | #1e90ff40 |
| 20% | 51 | 33 | #1e90ff33 |
| 15% | 38 | 26 | #1e90ff26 |
| 10% | 26 | 1a | #1e90ff1a |
| 5% | 13 | 0d | #1e90ff0d |
| 0% | 0 | 00 | #1e90ff00 |
CSS
.overlay {
background: #00000080;
}
.overlay-same {
background: rgb(0 0 0 / 50%);
}有两点要注意。第一,80 是 255 中的 128,即 50.2%,并不正好是 50%:十六进制 alpha 只有 256 级,所以大多数整数百分比都只是近似值。第二,Android 把 alpha 放在最前面。在 Android 颜色资源中,#801e90ff 等同于 CSS 中的 #1e90ff80。
如何凭肉眼读懂十六进制代码
不用换算也能大致猜出颜色。看每组的第一位就够了,因为它承载了几乎全部信息。
| CSS 名称 | Hex | RGB | 怎么读 |
|---|---|---|---|
| tomato | #ff6347 | 255, 99, 71 | 红色满格,带一些绿和蓝:温暖的浅红色 |
| gold | #ffd700 | 255, 215, 0 | 红和绿高,没有蓝:黄色 |
| chocolate | #d2691e | 210, 105, 30 | 红色领先,绿色一半,蓝色很低:橙棕色 |
| darkturquoise | #00ced1 | 0, 206, 209 | 绿和蓝高,没有红:青色 |
| dodgerblue | #1e90ff | 30, 144, 255 | 蓝色领先,绿色居中:天蓝色 |
| mediumorchid | #ba55d3 | 186, 85, 211 | 红和蓝高,绿色低:紫色 |
| teal | #008080 | 0, 128, 128 | 绿和蓝各一半:深青色 |
| navy | #000080 | 0, 0, 128 | 只有蓝,一半强度:深蓝色 |
| slategray | #708090 | 112, 128, 144 | 三者接近,蓝色略高:蓝灰色 |
- 第一位最大的那组就是主导光。#d2691e 的红是 d,绿是 6,蓝是 1,所以是橙棕色。
- 两个通道都高时会混色:红加绿是黄,绿加蓝是青,红加蓝是品红或紫色。
- 三组相等就是灰色。#333333 是深灰,#999999 是浅灰。三组接近相等时,比如 #708090,会得到一种柔和、偏灰的颜色。
- 整体数字高说明颜色浅,数字低说明颜色深。三组都在 c0 或以上时,颜色很淡;三组都在 30 或以下时,颜色很深。
- 同样的数值下,绿色看起来比蓝色亮得多。#00ff00 的 OKLCH 亮度是 0.866,而 #0000ff 只有 0.452。
为什么 #808080 不是中灰
#808080 在数值上正好居中:每个通道都是 255 中的 128。但它看起来并不在黑白正中间。它的 OKLCH 亮度是 0.600,看上去相当于从黑到白的 60%。
十六进制值已经按 sRGB 曲线编码过,这条曲线大致贴合人眼,但并不精确。#808080 发出的光约为白色的 21.6%,而感知模型给出的视觉中点更低:OKLCH 中是 #636363,CIELAB 中是 #777777。
| 灰色 | 含义 | OKLCH L | 白底对比度 | 黑底对比度 |
|---|---|---|---|---|
| #808080 | 数值中点,128 | 0.600 | 3.95:1 | 5.32:1 |
| #777777 | CIELAB 中点,L* 50 | 0.569 | 4.48:1 | 4.69:1 |
| #767676 | 白底上达到 4.5:1 的最浅灰色 | 0.566 | 4.54:1 | 4.62:1 |
| #636363 | OKLCH 中点,L 0.5 | 0.500 | 6.01:1 | 3.50:1 |
这对文字很重要。白底上的 #808080 灰字对比度只有 3.95:1,正文达不到 WCAG AA。#767676 是能通过 4.5:1 的最浅灰色,而只浅一级的 #777777 为 4.48:1,已经不达标。
大写还是小写,要不要 # 号
十六进制代码不区分大小写。#1E90FF、#1e90ff 和 #1E90ff 在 CSS、SVG 和设计工具中都是同一个颜色。选定一种风格并在各处保持一致,这样搜索代码时才能找到所有用到它的地方。CSS 中通常用小写。
# 号是 CSS 语法的一部分,而不是颜色本身的一部分。Figma 和许多设计工具显示代码时不带 #,编程语言则常把它写成带 0x 前缀的数字,比如 Flutter 中的 Color(0xFF1E90FF),开头是 alpha 那一组。
如何获取屏幕上颜色的十六进制代码
使用吸管工具:它能读取光标下的颜色并显示代码。这类工具都是免费的,而且大多已经装好了。
- Chrome 和 Edge:按 F12 打开开发者工具,在“样式”面板中点击任意颜色方块,再用吸管图标在页面上取色。
- PickShade:首页的取色器在 Chrome 和 Edge 中带有吸管按钮,可以在屏幕任意位置取色。
- Windows:安装 Microsoft PowerToys,按 Win + Shift + C 打开取色器。
- macOS:打开“应用程序”中“实用工具”里的“数码测色计”。切换到 sRGB,然后选择“显示”>“显示值”>“十六进制”。
- Figma、Photoshop 和大多数设计软件:按 I 调出吸管工具。
- 从照片或截图中取色:在图片取色器中打开它,点击任意像素即可。图片始终保留在你的设备上。
取到的值可能和原始值差几个单位,因为屏幕会应用色彩配置文件,图片也经过了压缩。需要精确数值时,请从设计文件或 CSS 中复制,而不是从截图中取色。
常见问题
什么是十六进制颜色代码?
十六进制颜色代码是像 #1e90ff 这样的六位代码,用红、绿、蓝三种光的强度来描述颜色。每组十六进制数从 00 (0) 到 ff (255),所以 #1e90ff 就是 rgb(30, 144, 255)。
如何给十六进制颜色加上不透明度?
在末尾加第四组数字:#RRGGBBAA。不透明度乘以 255,四舍五入后转成十六进制,所以 50% 是 80,25% 是 40,75% 是 bf。例如 #1e90ff80 就是约 50% 不透明度的 dodgerblue。
50% 不透明度的十六进制是多少?
50% 不透明度的十六进制是 80,比如半透明黑色写作 #00000080。80 等于 255 中的 128,即 50.2%,因为十六进制 alpha 只有 256 级,正好 50% 落在 7f 和 80 之间。
十六进制和 RGB 有什么区别?
颜色上没有区别,只是写法不同。十六进制用两位十六进制数表示红、绿、蓝的值,rgb() 用 0 到 255 的十进制数,所以 #ff6347 和 rgb(255, 99, 71) 是同一种番茄红。
十六进制颜色代码区分大小写吗?
不区分。#FF6347、#ff6347 和 #Ff6347 在 CSS、HTML、SVG 和设计工具中都是同一个颜色。大多数 CSS 代码库用小写,但只要保持一致,哪种风格都可以。
中灰色的十六进制代码是多少?
#808080 是数值上的中点,但它看起来比正中间更浅,OKLCH 亮度为 0.600。看起来介于黑白正中间的灰色在 #636363(OKLCH L 0.5)和 #777777(CIELAB L* 50)之间。