你有没有过这样的经历:大太阳底下,手机屏幕上那行浅灰色的提示文字怎么也看不清?把亮度调到最大,依然影影绰绰。这不怪你的眼睛,而是“色彩对比度”在作祟。想象你正在帮视力不好的奶奶装修房子:墙壁刷成奶白色,开关也是米白色,上面的标识还用浅灰色油性笔写着——奶奶眯着眼睛在墙上摸了半天也找不到开关。要让奶奶看清,标签颜色和墙面颜色必须拉开足够大的差异。而我们要认识的这位主角——“AI 验房师”——就是专门干这件事的:它扫描网页上每一个文字与背景的组合,用数学公式算出“看得清的程度”,不达标的还顺手给出改色建议。本文将带你从最基础的对比度定义出发,看懂 AI 如何测量亮度、判定达标阈值、生成修复方案,并学会把这一整套能力嵌进真实的开发流程,让网站对老年人、弱视群体在内的所有用户都清晰友好。

岗位关联

掌握色彩对比度的 AI 检测与修复逻辑,是前端工程师进阶无障碍工程(A11y)的必修课。你不仅能读懂并调试各类自动化检测工具,还能在团队中推动无障碍规范落地,让产品真正服务每一位用户。

目录
  1. 可视化演示
  2. 对比度基础概念
  3. 亮度侦测算法
  4. 对比度计算
  5. AI检测流程
  6. 修复建议生成
  7. 工程实践落地
  8. 性能优化策略
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示AI驱动的色彩对比度检测流程:WCAG标准对比度计算、AA/AAA合规等级评估,以及AI自动修复建议与色彩调整策略。

本节配有交互动效(进入视口后自动加载,约 3KB)。

色彩对比度AI检测流程 扫描页面元素提取前景/背景色对 计算WCAG对比度比值,判断合规等级 标记不达标元素,生成修复建议 Ratio=(L1+0.05)/(L2+0.05) 对比度检测保障无障碍体验

对比度基础概念

想象你正在帮视力不好的奶奶装修老房子。墙面刷成了奶白色,开关是米白色的,标签还是浅灰色油性笔写的——奶奶在墙上摸了半天,愣是找不到开关在哪。问题不出在奶奶的眼神,而出在“标签颜色和墙面颜色糊在了一起”。在网页世界里,前景色(文字、图标、按钮)与背景色(底色、图片、渐变)之间的视觉差异,就叫色彩对比度。差异越大,越容易被看清。

为了让“看得清”这件事不再靠吵架,W3C 组织发布了 WCAG(网页内容无障碍指南)标准。它把对比度量化成数字:AA 级要求普通正文不低于 4.5:1,大号文本放宽到 3:1;AAA 级则要求达到 7:1。这些阈值背后是人眼感知的研究结论,不是拍脑袋定的。换算成生活中的直觉:4.5:1 大约相当于“灰色铅笔字写在白纸上”的清晰度,而 2:1 就像“浅灰字写在奶白墙上”——肉眼看得出有字,但读起来费劲。

WCAG 给出的对比度计算公式是这样的:

回到装修现场:AI 验房师拿着这个公式,就像拿着标准色卡。它先量出墙面的“亮度读数”和标签的“亮度读数”,再一对比,就能告诉奶奶“这个标签颜色不达标,换个深色的吧”。

Contrast Ratio=L1+0.05L2+0.05\text{Contrast Ratio} = \displaystyle\frac{L_{1} + 0.05}{L_{2} + 0.05}
  1. 确定两个亮度L₁ 是较亮颜色的相对亮度,L₂ 是较暗颜色的相对亮度,两者取值都在 0 到 1 之间
    L1≥L2L_{1} \ge L_{2}
  2. 环境光补偿给两个亮度各加 0.05,模拟极暗环境下屏幕散射光对纯黑的抬升,也防止分母为零
    L1+0.05,L2+0.05L_{1} + 0.05, \quad L_{2} + 0.05
  3. 计算比值两值相除得到介于 1:1(最差)和 21:1(黑底白字)之间的对比度
    L1+0.05L2+0.05\frac{L_{1} + 0.05}{L_{2} + 0.05}

亮度侦测算法

装修师傅要判断一面墙刷得够不够深,不能靠肉眼,得用色度仪读取物理数值。AI 也一样,它面对的是 sRGB 色彩空间里 0 到 255 的色值,但这里藏着一个陷阱:色值不等于亮度。人眼对暗部的变化比亮部更敏感,为了让有限的数字尽可能描述人眼看到的世界,sRGB 编码时对暗部做了“加密”(伽马编码)。AI 要做的第一件事,就是“解密”——把色值还原成物理亮度。

解密分三步。首先把 0~255 的色值归一化到 0~1;然后对暗部(小于 0.03928)用线性函数近似,亮部用 2.4 次幂还原;最后把红绿蓝三个通道的线性亮度按人眼敏感度加权求和。之所以绿色通道权重最大(0.7152),是因为人眼对黄绿色波段最敏感,这也是“感知亮度”这个名字的由来。

这套“解密”算法就是 AI 验房师的色度仪。无论装修现场的灯光是暖是冷,它读出的都是墙和标签真实反射亮度的数字化表达,不偏不倚。

C' = \frac{C}{255}, \quadC_{s} = \begin{cases} \dfrac{C'}{12.92}, & C' \le 0.03928 \\[8pt] \left( \dfrac{C' + 0.055}{1.055} \right)^{2.4}, & \text{otherwise} \end{cases}
  1. 归一化通道值把 0~255 的 8bit 色值缩放到 0~1 区间,方便后续数学处理
    C′=C255C' = \dfrac{C}{255}
  2. 暗部线性段当归一化值小于 0.03928 时,避免高次幂在零附近产生陡峭斜率,改用线性近似
    Cs=C′12.92C_{s} = \dfrac{C'}{12.92}
  3. 亮部指数段其余区间用 2.4 次幂压缩,模拟人眼对亮部变化的钝感
    Cs=(C′+0.0551.055)2.4C_{s} = \left( \dfrac{C' + 0.055}{1.055} \right)^{2.4}
  4. 加权求和线性化后的 RGB 分别乘人眼敏感度权重并相加,得到最终感知亮度
    L=0.2126Rs+0.7152Gs+0.0722BsL = 0.2126R_{s} + 0.7152G_{s} + 0.0722B_{s}

对比度计算

有了两个颜色的感知亮度,接下来就是纯算术了。AI 验房师把两个亮度按大小排好队:亮的放分子,暗的放分母,各自加上 0.05 的环境光补偿,一除就得到了对比度。这个数值越大,意味着奶奶越容易看清。

WCAG 的判定规则像一张分层评分表:普通正文要达到 AA 级得 4.5:1,大号文本(≥18pt,或 ≥14pt 粗体)放低门槛到 3:1,而 AAA 级爱好者会冲刺 7:1。要注意“大号文本”的门槛——24px 的正文或 18.7px 的粗体字,都能享受放宽待遇,这背后是“字越大越容易辨认”的常识。

奶奶家的开关标签属于“普通文本”,必须按 4.5:1 的及格线来验收。AI 验房师拿着这份评分表,一个标签一个标签地打分,绝不睁一只眼闭一只眼。

AA 达标={普通文本Ratio≥4.5大号文本Ratio≥3.0装饰元素无要求\text{AA 达标} = \begin{cases} \text{普通文本} & \text{Ratio} \ge 4.5 \\ \text{大号文本} & \text{Ratio} \ge 3.0 \\ \text{装饰元素} & \text{无要求} \end{cases}
  1. 普通文本字号小于 18pt 或 14pt 粗体的正文,需满足最严阈值
    Ratio≥4.5\text{Ratio} \ge 4.5
  2. 大号文本≥18pt(约 24px)或 ≥14pt(约 18.7px)粗体的文字,可放宽要求
    Ratio≥3.0\text{Ratio} \ge 3.0
  3. 装饰元素纯装饰背景、禁用态等非信息载体,不做硬性要求
    无阈值\text{无阈值}

AI检测流程

现在,AI 验房师要正式上岗了。它把整栋“网页大厦”扫描一遍,工作流程分为四步:提取颜色 → 配对分析 → 批量计算 → 违规识别。首先,它解析 CSS、内联样式、图片和 Canvas 中出现的所有颜色,建立一份“颜色词典”;接着,把每个文字节点和它实际所在的背景色配对——这里的难点在于背景可能是渐变色、半透明层或叠加图片,AI 需要按渲染规则“算”出最终生效的背景色;最后,对每一对前景/背景套用上节公式,批量算出对比度并打上“通过/不通过”标签。

这个流程的产出是一份带通过率的报告。通过率是衡量一个页面整体无障碍水平的关键指标:

经历这场全面体检,奶奶房子的每一面墙、每一个开关、每一条标签都有了明确的“视力检查报告”。哪些地方达标,哪些地方需要返工,一目了然。

Pass Rate=NpassNtotal×100%\text{Pass Rate} = \frac{N_{\text{pass}}}{N_{\text{total}}} \times 100\%
  1. 达标数量N_pass 表示对比度达到对应阈值的颜色对个数
    NpassN_{\text{pass}}
  2. 总检查数量N_total 表示 AI 扫描出的全部前景-背景组合个数
    NtotalN_{\text{total}}
  3. 百分比转化两数相除乘 100 得到通过率,用来评估整页的整体健康度
    NpassNtotal×100%\frac{N_{\text{pass}}}{N_{\text{total}}} \times 100\%

修复建议生成

验房师发现问题后,不能只撂下一句“这里不合格”就完事,还得给出改色方案。AI 的修复思路像一位聪明的配色师傅:固定色调,只调明暗。比如标签原本是“带有红调的深棕”,修复时保持红调比例不变,只把整体亮度往下压,直到对比度达标——这样既满足标准,又尽量不破坏原有的设计气质。

具体如何算?假设背景是亮的,需要把前景调暗到目标亮度 L_fix,使对比度达到目标值 T。从对比度公式反解即可:

有了目标亮度,AI 再把这个数值反解回 RGB 色值——它可以给出三档候选:刚好踩线的“AA 达标版”、留出余量的“稳妥版”、以及挑战 7:1 的“AAA 豪华版”。装修师傅拿到方案,照着把标签刷深一档,奶奶抬头一看,开关清清楚楚就在眼前。

Lfix=Lbg+0.05T−0.05L_{\text{fix}} = \frac{L_{\text{bg}} + 0.05}{T} - 0.05
  1. 列出目标等式背景亮、前景暗,因此背景亮度在分子,前景在分母
    T=Lbg+0.05Lfix+0.05T = \frac{L_{\text{bg}} + 0.05}{L_{\text{fix}} + 0.05}
  2. 交叉相乘两边同时乘上分母,把未知的 L_fix 移到一侧
    Lbg+0.05=T×(Lfix+0.05)L_{\text{bg}} + 0.05 = T \times (L_{\text{fix}} + 0.05)
  3. 求解目标亮度两边同时除以 T 再减去 0.05,便得到前景应达到的亮度
    Lfix=Lbg+0.05T−0.05L_{\text{fix}} = \frac{L_{\text{bg}} + 0.05}{T} - 0.05

工程实践落地

好的装修改造,不是等奶奶住进去发现看不清才返工,而是把“看得清”写进验收清单。在软件开发中,这叫把无障碍检测嵌进工程流程。第一道关卡是设计稿校验:设计师在 Figma 里选色时,插件实时计算对比度,不达标的颜色直接亮红灯,从源头堵住问题。第二道关卡是代码审查:lint 工具扫描提交的 CSS/JSX 中的颜色对,给出警告。第三道关卡最硬核——CI/CD 自动闸门:每次合并代码前,自动化流水线跑一遍全站对比度检测,通过率不达标就阻断合并。

这道闸门的判定逻辑用一个条件式表达:

就像装修验收时带着分贝仪和照度计,一切拿数据说话。从此团队里再也不用“求爷爷告奶奶”地让开发改颜色——CI 这尊“铁面验收官”把标准焊死在流程里。

Gate={合并通过P≥0.99阻断发布P<0.99\text{Gate} = \begin{cases} \text{合并通过} & P \ge 0.99 \\ \text{阻断发布} & P < 0.99 \end{cases}
  1. 通过率 P本批次检测中,达标颜色对占总检查对的比例
    P=NpassNtotalP = \frac{N_{\text{pass}}}{N_{\text{total}}}
  2. 阈值判定达到 99%(可配置)视为整体合格,放行合并
    P≥0.99P \ge 0.99
  3. 未达标阻断低于阈值则 CI 失败,用机器约束代替人工督促
    P<0.99⇒阻断发布P < 0.99 \Rightarrow \text{阻断发布}

性能优化策略

想象一座 100 层的酒店要做全屋检查,逐层逐户敲开房门测量,一天也查不完。AI 验房师遇到大型站点时也面临同样的性能难题。好在它有三件法宝:缓存、采样、增量。

缓存最容易理解:同一个颜色对(比如“白色文字 + 深蓝按钮”)在页面里可能出现上千次,AI 只计算一次,结果存入哈希表,其余全部命中缓存。采样降级针对的是大图背景:不用逐像素分析,而是对图片按网格取样,估算主色和边缘色的亮度,牺牲少许精度换取几十倍的提速。增量检测则是搭上 Git 的便车——每次 commit 只检测变更文件里涉及的新颜色对,不做全量重扫。三件法宝合起来,检测耗时可以压缩到原来的百分之几:

有了这三件法宝,100 层酒店也能在几秒内完成“点检”。AI 验房师这才敢拍胸脯说:全量查验很慢?不存在的。

TincrementalTfull=NchangedNtotal\frac{T_{\text{incremental}}}{T_{\text{full}}} = \frac{N_{\text{changed}}}{N_{\text{total}}}
  1. 变更颜色数本次 git 提交涉及的页面颜色数量,通常是个位数
    NchangedN_{\text{changed}}
  2. 全量颜色数整个站点需要检查的颜色总数量,可能上千
    NtotalN_{\text{total}}
  3. 比率表达当变更占比为 3% 时,增量检测耗时约为全量的 3%
    TincrementalTfull=NchangedNtotal\frac{T_{\text{incremental}}}{T_{\text{full}}} = \frac{N_{\text{changed}}}{N_{\text{total}}}

AI 应用场景

电商大促页面的无障碍改造

阶段:检测与修复

解决的问题:电商大促期间,运营为了“氛围感”常把价格标签设计成“黄底白字”或“橙底浅金字”,字体小而花哨,老年用户和色弱用户根本看不清价格。人工检查几十个运营位费时费力,且大促时间窗口极短。

具体案例:某电商平台双 11 活动页上线前,AI 检测器扫描出 37 处对比度不达标的颜色组合,占比 12%。其中一款“金橙底 + 白色价格”的标签对比度仅 1.8:1。AI 自动生成修复建议:保持金色背景不变,把价格文字改为深棕色。开发一键应用后,该模块老年用户点击率提升了 6%,客服“看不到价格”的投诉明显减少。

设计系统的颜色 Token 治理

阶段:规范校验与自动化拦截

解决的问题:大型团队的设计系统维护着一套颜色 Token(如 --color-primary、--color-text-muted),某个 Token 被改成浅色后,会在不知不觉中污染上百个组件,导致批量对比度滑坡。靠人工 review 难以发现这种“幽灵改动”。

具体案例:某中后台团队在 CI 中接入对比度检测:当开发者提交修改颜色 Token 的 PR 时,流水线自动计算该 Token 与默认背景、反色背景等 6 种常见组合的对比度,任一项低于阈值即阻断合并,并附上建议值。实施一个季度后,线上页面对比度达标率从 82% 提升至 99.2%。

政企网站的无障碍合规审计

阶段:自动化评估报告

解决的问题:政府、银行等公共服务网站按法规需要定期出具无障碍合规报告。传统人工抽查覆盖几百个页面耗时数周,且抽样偏差大。

具体案例:某银行网上银行系统每季度运行一次全站 AI 对比度审计,自动遍历 5000+ 页面,提取颜色对并计算达标率,生成含截图、颜色值、修复参数的《A11y 色彩合规报告》。过去 2 周的人工审计缩短到 4 小时,审计成本下降 90%。

Python 演示

python49 行
# -*- coding: utf-8 -*-"""色彩对比度AI检测与修复建议演示""" def channel_to_linear(c):    """sRGB 通道线性化(伽马修正)"""    s = c / 255.0    if s <= 0.03928:        return s / 12.92    return ((s + 0.055) / 1.055) ** 2.4 def relative_luminance(rgb):    """计算相对亮度"""    r, g, b = rgb    return 0.2126 * channel_to_linear(r) + 0.7152 * channel_to_linear(g) + 0.0722 * channel_to_linear(b) def contrast_ratio(fg, bg):    """计算对比度比值"""    l1 = relative_luminance(fg)    l2 = relative_luminance(bg)    return (max(l1, l2) + 0.05) / (min(l1, l2) + 0.05) def darken_step(color, step_mul=0.8):    """把颜色调暗一档"""    return tuple(max(0, min(255, int(ch * step_mul))) for ch in color) def auto_fix(fg, bg, target=4.5):    """自动调暗前景色直到对比度达标"""    current = tuple(fg)    steps = 0    while contrast_ratio(current, bg) < target and steps < 10:        current = darken_step(current)        steps += 1    return current, contrast_ratio(current, bg), steps def main():    samples = [        ("浅灰底小字", (200, 200, 200), (240, 240, 240)),        ("浅底白色按钮", (255, 255, 255), (230, 230, 230)),        ("白底蓝色链接", (100, 120, 200), (255, 255, 255)),    ]    for name, fg, bg in samples:        old = contrast_ratio(fg, bg)        new_color, new_ratio, steps = auto_fix(fg, bg)        ok = "已达标" if old >= 4.5 else "需修复"        print("{}:初始 {:.2f}:1({}),{} 步后 {:.2f}:1,新颜色 {}".format(            name, old, ok, steps, new_ratio, new_color)) if __name__ == "__main__":    main()
目的:演示 AI 修复对比度的核心逻辑——先算两个颜色的相对亮度与对比度,再把不达标的前景色逐档调暗,直到越过 4.5:1 的 AA 及格线。
  1. def channel_to_linear(c)把 sRGB 色值“解密”成物理亮度,对应伽马修正
  2. return 0.2126 * channel_to_linear(r) + ...按人眼敏感度加权求和,绿色权重最大
  3. return (max(l1, l2) + 0.05) / (min(l1, l2) + 0.05)核心对比度公式,亮者当分子
  4. current = darken_step(current)AI 沿亮度轴逐步调暗前景色
  5. while contrast_ratio(current, bg) < target用目标 4.5:1 作为循环终止条件

常见误区

误区“这组颜色我在自己的显示器上看得清清楚楚,对比度肯定没问题,不用测了。”

正解人眼感知受显示器亮度、护眼模式和环境光影响很大。同一组“浅灰字 + 奶白底”在办公室台灯下能看清,拿到户外阳光下就完全消失。WCAG 计算的是颜色本身的相对亮度比值,与观看设备无关,必须用数值判定而不是肉眼信心。

为何常见:人的视觉系统适应性极强,会主动“脑补”模糊的信息,让主观感觉比真实情况乐观得多。

误区“我把全站文字都改成纯黑,对比度拉到 21:1,无障碍肯定满分了。”

正解对比度只是 WAG 1.4.3 这一条规则。完整的无障碍还包括“不只用颜色传达信息”(1.4.1)、操作目标最小尺寸(2.5.8)、键盘可达(2.1.1)、屏幕阅读器语义(4.1.2)等几十条标准。高对比度只解决了“看得见”,没解决“用得动”。

为何常见:对比度有明确的数值和工具可测,讨论度最高,容易让人把它当成无障碍的全部。

误区“AI 说这个颜色对比度 7:1,那我全站都用它,绝对没错。”

正解AI 的修复建议是“候选方案”而非“最终决策”。它追求的是可达标,但可能牺牲品牌识别、页面层级或设计美感。工程上正确的做法是:AI 给出 2-3 档建议色,设计师在达标范围内做最终裁决,让无障碍与品牌调性共存。

为何常见:把“自动化辅助”和“完全自动决策”混为一谈,低估了设计判断的价值。

误区“我的页面用红配绿,颜色差别这么大,对比度肯定高,无障碍妥妥的。”

正解对比度只由亮度决定,与色相无关。纯红(#FF0000)和纯绿(#00FF00)的亮度都偏低,两者对比度约 2.9:1,连大号文本的 3:1 都勉强。而“黑字白底”虽然只有两种颜色,却拥有理论上最高的 21:1。鲜艳不等于清晰,亮度差才是王道。

为何常见:人们容易把“色相不同”误解为“视觉差异大”,忽略了亮度在人眼识别中的主导地位。

面试题

Q1. WCAG AA 标准中,普通正文的最小对比度要求是多少?

单选题 · easy

  • A.3.0:1 针对大字号
  • B.4.5:1 普通正文标准← 正确答案
  • C.7.0:1 AAA 严苛级
  • D.2.0:1 装饰性元素

答案:B。WCAG 1.4.3 规定普通正文 AA 级不得低于 4.5:1。3.0:1 是大号文本的 AA 要求,7.0:1 是 AAA 级要求,装饰性元素确实无硬性要求,但它们都不是“普通正文 AA”的正确答案。

Q2. 相对亮度公式中,绿色通道的加权系数为 0.7152,远大于其他通道,原因是?

单选题 · mid

  • A.显示器的绿色像素物理上更亮
  • B.人眼对绿色光谱波段最敏感← 正确答案
  • C.绿色是红蓝混合后的中间色
  • D.绿色通道包含的图像细节最多

答案:B。人眼感光细胞对黄绿色波段(约 555nm)最敏感。亮度公式的三个系数来自 CIE 色彩匹配实验,反映的是人眼生理特性,而非显示器硬件。显示器像素亮度、混合中间色、图像细节都与系数来源无关。

Q3. 对比度公式里给两个亮度各加 0.05,最核心的目的是什么?

单选题 · mid

  • A.防止分母为零并模拟极端黑暗环境← 正确答案
  • B.让最终计算结果看起来更整齐
  • C.补偿 OLED 屏幕的像素老化现象
  • D.只为了让小数值更容易被理解

答案:A。0.05 代表的是“极暗环境下屏幕的散射光”——即使显示纯黑,屏幕也有最低辉光。加上 0.05 既模拟了这一物理现象,也杜绝了纯黑背景导致分母为零的除零错误。它不是为了美观、补偿老化或方便理解。

Q4. 深蓝按钮上放白色文字,初始对比度约 2.1:1,最快的修复策略是?

单选题 · mid

  • A.把白色文字改成浅灰色
  • B.把按钮底色换成浅蓝色
  • C.加深按钮底色保持白字← 正确答案
  • D.调高屏幕亮度后重新测量

答案:C。对比度取决于前景与背景的亮度差。把按钮底色加深,与白字的亮度差增大,对比度随之提升;若改成浅灰色或浅蓝色,反而缩小了与深蓝背景的差距,对比度更低。调高屏幕亮度不改变颜色本身的对比度计算值。

Q5. 大号文本(≥18pt 或 ≥14pt 粗体)在 WCAG AA 标准下的最低对比度要求是?

单选题 · easy

  • A.4.5:1 与普通文本一致
  • B.3.0:1 放宽标准的级别← 正确答案
  • C.7.0:1 更严格的级别
  • D.2.0:1 无明确的要求

答案:B。WCAG 认为字号越大越容易辨认,因此大号文本的标准从 4.5:1 放宽到 3:1。这是 AA 级别对超大文字的特殊照顾,并非没有要求,也不比普通文本更严。

Q6. 以下哪些颜色组合的对比度最接近理论最高值?

多选题 · easy

  • A.黑色文字配白色背景← 正确答案
  • B.白色文字配黑色背景← 正确答案
  • C.蓝色文字配深蓝背景
  • D.白色文字配浅灰背景

答案:AB。黑纸白字和白纸黑字的相对亮度分别取极值,对比度约 21:1。蓝色文字配深蓝背景两者的亮度都很低,白字配浅灰背景两者亮度都很高,这两组亮度差小,对比度通常在 1.5:1 到 2:1 之间,不达标。

Q7. AI 色彩对比度检测流程通常包括哪些环节?

多选题 · mid

  • A.提取页面全部颜色← 正确答案
  • B.把前后景配对计算← 正确答案
  • C.直接修改线上样式
  • D.输出违规颜色清单← 正确答案

答案:ABD。标准流程是“提取颜色 → 配对分析 → 批量计算 → 输出报告”。AI 的角色是检测与建议,不会直接修改线上样式——最终改色需要设计师确认和开发落地,因此“直接修改线上样式”不属于检测流程。

Q8. 关于伽马修正与相对亮度计算,以下说法正确的是?

多选题 · hard

  • A.sRGB 值要先线性化再加权← 正确答案
  • B.红绿蓝三通道权重完全一致
  • C.暗部阈值以下是线性近似← 正确答案
  • D.人眼对暗部变化更加敏感← 正确答案

答案:ACD。sRGB 是伽马编码空间,必须线性化后才能按亮度权重求和,A 对;暗部(≤0.03928)用线性段近似避免零值附近曲线过陡,C 对;人眼对暗部变化敏感正是伽马编码的意义,D 对;三通道权重是 0.2126/0.7152/0.0722,并不一致,B 错。

Q9. 把橙色文字改成粉色文字后发现对比度没有变化,最合理的解释是?

单选题 · extreme

  • A.两者都是暖色调的颜色
  • B.两者感知亮度几乎一致← 正确答案
  • C.两者饱和度都比较偏高
  • D.两者色相变化不够显著

答案:B。WCAG 对比度只由“感知亮度”决定,与色相、饱和度无关。橙色与粉色在色环上相距甚远,但感知亮度相近,代入公式后对比度自然不变。这正好印证了“色相不同≠视觉差异大”这一核心原理。

Q10. 在 CI/CD 中集成对比度检测,最推荐的实践是?

单选题 · hard

  • A.每次构建都全量扫描全部页面
  • B.只扫描本次变更涉及的颜色← 正确答案
  • C.人工审核所有颜色永不自动
  • D.只检查按钮和链接的样式

答案:B。全量扫描在大规模站点上会显著拖慢 CI 速度;人工审核无法规模化;只检查按钮和链接会漏掉大量正文。推荐做法是增量检测——基于 git diff 只计算变更涉及的颜色对,既快又不遗漏本次改动引入的问题。