颜色对比度检查为什么老是不合格?

3 个讲解板块 · 关联 3 款站内工具 · 内容最后核对 2026-10-09

亮度不是眼睛的直觉:绿通道权重最高,亮蓝其实很暗。

直接答案

因为对比度衡量的是相对亮度之比,而相对亮度和人眼的感受差别很大。算法分三步:先把每个颜色通道的值线性化,再按红 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 / #ffffff21.00:1达标达标
#333333 / #ffffff12.63:1达标达标
#ffffff / #3498db3.15:1不达标达标
#999999 / #ffffff2.85:1不达标不达标
#cccccc / #ffffff1.61:1不达标不达标
#ffff00 / #ffffff1.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。若发现错误,欢迎通过页脚反馈入口告知。