我有一个 div 并且必须在上面放置一些文本。div的背景是动态生成的。所以我想根据背景来决定文本颜色。
到目前为止,我已经尝试过了。
function invert(color){
return (color.replace('#','0x')) > (0xffffff/2) ? 'black' : 'white'
}
使用这个我得到黑色的红色。invert('#ff0000') => black
(虽然白色配红色更好看)
这种方法可以吗?或者有没有其他更好的方法..
我有一个 div 并且必须在上面放置一些文本。div的背景是动态生成的。所以我想根据背景来决定文本颜色。
到目前为止,我已经尝试过了。
function invert(color){
return (color.replace('#','0x')) > (0xffffff/2) ? 'black' : 'white'
}
使用这个我得到黑色的红色。invert('#ff0000') => black
(虽然白色配红色更好看)
这种方法可以吗?或者有没有其他更好的方法..
这是我在 jsfiddle 中使用 jQuery 提出的快速解决方案
另请注意,如果您使用此方法,背景颜色的值可以是从 rgb(50, 205, 50) 到石灰到 #32CD32 的任何值,它仍然可以工作。
对于您的 html:
<div id="test" style="background-color: #000000;">Can you see this text?</div>
和javascript:
$(document).ready(function(){
var color = $('#test').css('background-color');
var startIndex = color.indexOf('(') + 1;
var lastIndex = color.indexOf(')');
var values = color.substr(startIndex, lastIndex - startIndex).split(',');
var r = 0;
var g = 0;
var b = 0;
$(values).each(function(i) {
if (i == 0) {
r = 255 - values[i];
}
if (i == 1) {
g = 255 - values[i];
}
if (i == 2) {
b = 255 - values[i];
}
});
$('#test').css('color', 'rgb(' + r + ',' + g + ',' + b + ')');
});
编辑:非 jquery 方式(不适用于石灰、蓝色、红色等颜色名称)
function invert(color) {
var startIndex = color.indexOf('(') + 1;
var lastIndex = color.indexOf(')');
var values = color.substr(startIndex, lastIndex - startIndex).split(',');
var r = 0;
var g = 0;
var b = 0;
for(i= 0; i < values.length; i++) {
if (i == 0) {
r = 255 - values[i];
}
if (i == 1) {
g = 255 - values[i];
}
if (i == 2) {
b = 255 - values[i];
}
}
return 'rgb(' + r + ',' + g + ',' + b + ')';
}
使用此问题的最高投票答案底部概述的方法 -如果已知背景颜色,如何找到好看的字体颜色?
这适用于每种颜色。
var luminance = {r: 0.2126, g: 0.7152, b:0.0722};
var color = '#ffaa11'; // your color
var r = parseInt(color.substring(1,3), 16);
var g = parseInt(color.substring(3,5), 16);
var b = parseInt(color.substring(5), 16);
var rgb = [r / 255, g / 255, b / 255];
for (var i = rgb.length; i--; )
rgb[i] =
rgb[i] <= 0.03928 ?
rgb[i] / 12.92 :
Math.pow(((rgb[i] + 0.055) / 1.055), 2.4);
var thresh = ((luminance.r * rgb[0]) +
(luminance.g * rgb[1]) +
(luminance.b * rgb[2]));
// now if thresh > 0.22 set text color to #222
// else set it to #ccc
// you now have readable text on every hex background.