单位与换算

颜色转换与对比度检查

粘贴任意 CSS 写法的颜色,比如 #336699、rgb(51 102 153)、hsl(210 50% 40%),或者 rebeccapurple 这样的颜色名,立刻得到其余所有格式。下方的对比度检查按《Web 内容无障碍指南》(WCAG)的原始公式计算,判断一组文字色和背景色是否清晰可读。

HEX
RGB
HSL

对比度检查

大号文字(24 像素,或 18.5 像素粗体)

普通正文在这个背景上应当清晰易读。

对比度

  • AA 级,普通文字(4.5:1)
  • AA 级,大号文字(3:1)
  • AAA 级,普通文字(7:1)
  • AAA 级,大号文字(4.5:1)
  • 图标、边框和控件(3:1)

全部在你的浏览器里运行,这里输入的内容不会上传。

怎么用

  1. 在「颜色」里输入或粘贴一个颜色,也可以点旁边的色块按钮直接取色。支持 3、4、6、8 位 HEX,rgb()、rgba()、hsl()、hsla(),「51, 102, 153」这样的三个数字,以及 148 个 CSS 颜色名。
  2. 从 HEX、RGB、HSL 三行里复制需要的格式。输出采用新版 CSS 语法(空格分隔),目前所有主流浏览器都支持。
  3. 在「对比度检查」里分别填入文字色和背景色。预览区会用两种字号显示真实文字,下方列出这组颜色达到了哪些 WCAG 等级。
  4. 点「互换」可以检查反过来的情况,比如彩色按钮上的白字,而不是白底上的彩色字。

格式转换与对比度的原理

HEX、RGB 与 HSL

HEX 和 RGB 是同一种东西的两种写法:红、绿、蓝三个通道,各自取值 0 到 255,HEX 用十六进制写(33 就是 51),RGB 用十进制写。HEX 的第四组数字,或者 rgb() 里斜杠后面的数,表示透明度:#33669980 是同一个颜色、大约 50% 不透明。这些写法都定义在 CSS Color Module Level 4 里。

HSL 用色相、饱和度、亮度三个量描述同一个颜色:色相是色环上的角度,0° 红、120° 绿、240° 蓝。它更适合手动调色,比如想要 #336699 的浅一档,只需把 hsl(210 50% 40%) 的亮度调到 60%,色相不变。由于 HSL 数值保留一位小数,来回转换时某个通道可能相差 1。

对比度怎么算

WCAG 用每个颜色的「相对亮度」来定义对比度。先把每个通道从 sRGB 换算成线性光强:不超过 0.04045 的除以 12.92,更大的加偏移后取 2.4 次方;再按红 0.2126、绿 0.7152、蓝 0.0722 加权求和。绿色权重最大,是因为人眼对绿光最敏感。对比度等于(L1 + 0.05)÷(L2 + 0.05),L1 是较亮的那个颜色,取值从 1:1(两色相同)到 21:1(白底黑字)。

第 1.4.3 条成功准则要求:AA 级普通文字至少 4.5:1,大号文字至少 3:1;AAA 级分别提高到 7:1 和 4.5:1。「大号」指至少 18 点(约 24 像素),或者 14 点粗体(约 18.5 像素)。第 1.4.11 条要求图标、输入框边框等界面元素至少 3:1。WCAG 明确说明,计算出的比值不得先四舍五入再比较,4.499:1 就不满足 4.5:1。所以本工具显示对比度时直接截断,而不是四舍五入。

文字色如果带透明度,会先按透明度和背景色混合,再计算对比度,因为读者实际看到的就是混合后的颜色。

为什么要关心对比度

对比度不够的文字,在阳光下的手机屏幕上、在老年人或视力较弱的读者眼里,都很难看清。很多设计稿喜欢用浅灰色的说明文字,看起来精致,实际上常常达不到 4.5:1。网站和 App 的无障碍要求越来越多地写进法规和采购标准,按 WCAG AA 级检查一遍文字颜色,是成本最低的改进之一。

算例

白底上的文字色对比度结论
#7676764.54:1各种字号都达到 AA;普通文字达不到 AAA
#7777774.47:1普通文字达不到 AA,大号文字可以
#5959597:1达到 AAA
#ff0000(纯红)3.99:1只适合大号文字和图标
#00000021:1最大值

#767676 是白底上仍能通过 AA 的最浅灰色,所以很多设计规范都用它;再浅一档的 #777777 就不合格了。50% 透明的黑色放在白底上,混合成一种中灰,对比度是 3.97:1。

格式转换:#336699 = rgb(51 102 153) = hsl(210 50% 40%),简写 #369 展开后是同一个颜色。#33669980 等于 rgb(51 102 153 / 0.502),因为 0x80 是 128,128 ÷ 255 = 0.502。CSS 颜色名 rebeccapurple 就是 #663399。

局限

  • 只支持 sRGB。 oklch()、lab()、display-p3 等新的 CSS 色彩空间不会被解析,请先在浏览器开发者工具里换算。
  • 对比度不是全部。 WCAG 2 的对比度只是最低要求。字体太细、字号太小,或者某些色盲组合,即使对比度达标也可能难以阅读。正在为下一版指南研究的 APCA 新方法,本工具没有采用。
  • 忽略背景的透明度。 对比度只对不透明背景有定义,所以背景色的透明度一律按完全不透明处理。

常见问题

HEX 怎么转 RGB?

把六位数字分成三组,每组按十六进制换算:#336699 分成 33、66、99,也就是 51、102、153。粘贴到工具里即可直接得到。

文字对比度至少要多少?

WCAG AA 级要求普通文字 4.5:1,大号文字和界面元素 3:1;AAA 级要求普通文字 7:1。

4.49:1 四舍五入是 4.5,为什么不合格?

WCAG 规定比较前不得四舍五入,低于 4.5 就是不合格。

白底上最浅能用什么灰色字?

#767676,对比度 4.54:1。#777777 已经略低于 AA 标准。

颜色会上传吗?

不会,所有计算都在你的浏览器里完成。

参考资料

↵ 打开 · Esc 关闭