根据Wikipedia的说法,当转换为亮度的灰度表示时,“一个人必须获得其红色,绿色和蓝色的值”,然后按下一个比例进行混合:R:30%G:59%B:11%
因此,白色将具有100%的亮度,而黄色将具有89%的亮度。同时,绿色的比例只有59%。11%几乎比41%的差异低四倍!
甚至连石灰(#00ff00
)都不适合阅读大量文本。
恕我直言,具有良好对比度的颜色的亮度至少应相差50%。并且应该测量该亮度,以转换为灰度。
upd:最近在网上找到了一个全面的工具,该工具按顺序使用w3文档中的公式。
阈值可以从#1.4中获取。
这是此高级工具的实现。
function luminanace(r, g, b) {
var a = [r, g, b].map(function (v) {
v /= 255;
return v <= 0.03928
? v / 12.92
: Math.pow( (v + 0.055) / 1.055, 2.4 );
});
return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;
}
function contrast(rgb1, rgb2) {
var lum1 = luminanace(rgb1[0], rgb1[1], rgb1[2]);
var lum2 = luminanace(rgb2[0], rgb2[1], rgb2[2]);
var brightest = Math.max(lum1, lum2);
var darkest = Math.min(lum1, lum2);
return (brightest + 0.05)
/ (darkest + 0.05);
}
contrast([255, 255, 255], [255, 255, 0]);
contrast([255, 255, 255], [0, 0, 255]);
有关更多信息,请查看有关如何计算该值的WCAG 2.0文档。