自动无障碍检查(如axe-core)对渐变背景上的文字常返回"needs review",因为对比度检测只读取纯色背景色,而渐变通过background-image设置,无单一背景值可判断。实际上,渐变的对比度最差情况一定发生在色停止点,只需检查每个停止点与文字的对比度即可。
关键算法:对于每个被标记为"needs review"的元素,读取文字颜色、字号和字重(确定所需对比度阈值:普通文本4.5:1,大文本3:1)。向上遍历祖先元素,找到第一个设置了background-image包含gradient()的元素,提取所有颜色停止点(浏览器已计算为具体rgb值)。计算文字颜色与每个停止点的对比度,取最小值。若该最小值低于阈值,则为真实失败;否则可通过。
对比度计算使用WCAG 1.4.3公式:相对亮度由各通道线性化后加权得到,对比度为较亮亮度+0.05除以较暗亮度+0.05。具体代码见素材。
局限:此方法仅适用于不透明CSS渐变。背景图片和半透明停止点(alpha<1)仍无法从CSS推导,需保留人工检查。也不处理文字阴影、混合模式或文字跨越渐变边缘的情况。
这一解法将常见的盲点转化为明确的通过或失败,让开发者能精准定位问题并修复。
#开发者 #工具 #CSS #渐变 #颜色对比度 #WCAG #无障碍 #a11y
@DevToolboxHub