Вы можете попробовать инвертировать шестнадцатеричное значение цвета. Таким образом, #FFFFFF
становится #000000
, а #AAAAAA
становится #555555
. Конечно, этот метод проваливается, когда у вас есть #888888
, который при инвертировании дает вам #777777
(они не сильно контрастируют).
Это сообщение в блоге описывает другой способ (они используют только черный или белый для цвета переднего плана, в зависимости от цвета фона). Я перевел это на Javascript:
function idealTextColor(bgColor) {
var nThreshold = 105;
var components = getRGBComponents(bgColor);
var bgDelta = (components.R * 0.299) + (components.G * 0.587) + (components.B * 0.114);
return ((255 - bgDelta) < nThreshold) ? "#000000" : "#ffffff";
}
function getRGBComponents(color) {
var r = color.substring(1, 3);
var g = color.substring(3, 5);
var b = color.substring(5, 7);
return {
R: parseInt(r, 16),
G: parseInt(g, 16),
B: parseInt(b, 16)
};
}