颜色对比度检查为什么老是不合格?
亮度不是眼睛的直觉:绿通道权重最高,亮蓝其实很暗。
因为对比度衡量的是相对亮度之比,而相对亮度和人眼的感受差别很大。算法分三步:先把每个颜色通道的值线性化,再按红 0.2126、绿 0.7152、蓝 0.0722 的权重加权求和得到相对亮度,最后用「较亮值加 0.05 除以较暗值加 0.05」得到比值。这个公式把绿色通道的权重放得最高,因为人眼对绿光最敏感。
后果就是那些「看起来很正常」的颜色经常不合格。比如 #3498db 这种明亮的蓝色,它的相对亮度只有约 0.285,白字压上去只有 3.15:1,够不上正文要求的 4.5:1;再比如纯黄配白,算出来只有 1.07:1,几乎是全屏发光。要做合格的配色,得按公式算,不能凭眼睛估——这也解释了为什么设计稿上看着舒服的灰字,检测工具会直接判不过。
设计稿里一组浅灰字配白底,看着文雅又清爽,一跑无障碍检测全是红叉。改深一点又觉得「太重了、不好看」。这种拉扯的根源在于:对比度算的是亮度之比,而不是视觉印象。
把公式拆开看,其实只有三步,自己算一遍就知道该往哪调。下面给的都是可复算的数值,不涉及任何具体设计方案的推荐。
1计算公式只有三步
按顺序做完,比值和阈值判定都出来了。
| 步骤 | 做什么 | 注意点 |
|---|---|---|
| 第一步 | 把每个通道值除以 255,再线性化 | 低位段用除以 12.92,其余用幂函数 |
| 第二步 | 按 0.2126 / 0.7152 / 0.0722 加权求和 | 绿通道权重最高,蓝色最低 |
| 第三步 | 用(亮 + 0.05)÷(暗 + 0.05) | 结果落在 1:1 到 21:1 之间 |
| 判定 | 和阈值比大小 | 正文 4.5:1,大字 3:1 |
范围感:任何颜色对自己都是 1:1;黑白之间是理论最大值 21:1。
2阈值与实例
阈值要看字号,实例要自己复算——网上的数字并不都靠谱。
| 前景 / 背景 | 对比度 | 正文达标 | 大字达标 |
|---|---|---|---|
| #000000 / #ffffff | 21.00:1 | 达标 | 达标 |
| #333333 / #ffffff | 12.63:1 | 达标 | 达标 |
| #ffffff / #3498db | 3.15:1 | 不达标 | 达标 |
| #999999 / #ffffff | 2.85:1 | 不达标 | 不达标 |
| #cccccc / #ffffff | 1.61:1 | 不达标 | 不达标 |
| #ffff00 / #ffffff | 1.07:1 | 不达标 | 不达标 |
注意 #999999 在白底上是 2.85:1,不是流传较广的 2.2:1;白字压 #3498db 是 3.15:1 而非 3.13:1。阈值判定关系到合规,务必用官方公式自己算一遍。
3为什么「看着还行」却不过
几个被低估的因素。
- 饱和色的亮度反直觉
- 亮蓝、纯红因绿通道分量低,算出来的亮度比感觉低很多,配白字往往刚过大字线、够不上正文线。
- 大字线和小字线差一档
- 大字的要求只有 3:1,同样一组配色可能标题过关、正文不过,别用一个结论套全部文字。
- 灰色是最常见的失败者
- 中性灰看起来「柔和」,但亮度落在中间区域时,和白色的比值往往只有二点几,正文必然不过。
- 背景不一定是纯色
- 渐变、图片底、半透明蒙层都要按其中最不利的位置取值,只看主色会漏掉真实的失败点。
- 大字号本身也是补偿
- 把字调大、加粗确实能降低阈值要求,但这是妥协而不是解决,正文内容还是应该做到 4.5:1。
顺着这个问题往下用
全部工具总览 →相关疑问
对比度要达到多少才算合格?
正文文字是 4.5:1,大号文字是 3:1,界面组件和图形元素也是 3:1。这是通用的无障碍要求中较常见的档位;更严格的档位要求正文 7:1、大字 4.5:1。
什么算「大号文字」?
一般指 18 点(24 像素)以上,或者 14 点(约 18.66 像素)以上并且加粗。达到这个尺寸,判定阈值可以从 4.5:1 降到 3:1。
为什么浅灰字总是不合格?
因为中性灰的亮度落在中段,和白色背景的亮度比往往只有二点几。看起来舒服柔和,正是因为它和背景的亮度差不大——而这恰恰是对比度的反面。
怎么快速提高对比度?
最直接的办法是把文字颜色往深里压,或者把背景往浅里调,而不是加粗或描边。描边在部分渲染环境下会失效,白边黑字还可能让字形糊掉,不如老老实实调亮度。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-09。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱