简体   繁体   English

如何根据动态变化的背景颜色动态更改文本颜色

[英]How to dynamically change text colour based on dynamically changing background colour

I am setting up a new website and need my text to change colour based on the ever-changing background colours in order to maintain contrast. 我正在建立一个新的网站,需要我的文字根据不断变化的背景颜色改变颜色,以保持对比度。 I have scoured the web for answers that don't involve Sass, but none have worked... 我已经在网上搜索了不涉及Sass的答案,但没有一个有效...

I have tried some JavaScript, but they work only when the background is a fixed colour that you change manually. 我尝试了一些JavaScript,但只有当背景是手动更改的固定颜色时,它们才有效。

My Current File: https://codepen.io/jonathanlee/pen/wZXvRY 我当前的文件: https//codepen.io/jonathanlee/pen/wZXvRY

var color = function getRandomColor() {
  var letters = '0123456789ABCDEF'.split('');
  var color = '#';
  for (var i = 0; i < 6; i++) {
    color += letters[Math.floor(Math.random() * 16)];
  }
  return color;
}
setInterval(function() {
  document.getElementById("test").style.backgroundColor = color(); //() to execute the function!
}, 3000);

var ww = function isDarkColor(rgb) {
  return Math.round((
    parseInt(rgb[0], 10) * 299 +
    parseInt(rgb[1], 10) * 587 +
    parseInt(rgb[2], 10) * 114) / 1000) <= 140
}

if (ww <= 140) {
  document.getElementById("test").style.color = '#fff';
} else {
  document.getElementById("test").style.color = '#000';
}

One of the other solutions I've tried, but didn't work: http://jsfiddle.net/QkSva/ 我试过的其他解决方案之一,但没有奏效: http//jsfiddle.net/QkSva/

function isDark(color) {
  var match = /rgb\((\d+).*?(\d+).*?(\d+)\)/.exec(color);
  return (match[1] & 255) +
    (match[2] & 255) +
    (match[3] & 255) <
    3 * 256 / 2;
}
$('div').each(function() {
  console.log($(this).css("background-color"))
  $(this).css("color", isDark($(this).css("background-color")) ? 'white' : 'black');
});

The real-life example is an alternate homepage on the website I'm working on, https://nepmelbourne.com/q . 现实生活中的例子是我正在开发的网站上的备用主页, https://nepmelbourne.com/q I have got a dynamic background, but there are some colours that don't contrast well against my white text. 我有一个动态的背景,但有一些颜色与我的白色文字没有很好的对比。

One way to do it would be to set opposite color of background color to text as follows, 一种方法是将背景颜色的相反颜色设置为文本,如下所示,

 function invertColor(hex, bw) { if (hex.indexOf('#') === 0) { hex = hex.slice(1); } // convert 3-digit hex to 6-digits. if (hex.length === 3) { hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; } if (hex.length !== 6) { throw new Error('Invalid HEX color.'); } var r = parseInt(hex.slice(0, 2), 16), g = parseInt(hex.slice(2, 4), 16), b = parseInt(hex.slice(4, 6), 16); if (bw) { // http://stackoverflow.com/a/3943023/112731 return (r * 0.299 + g * 0.587 + b * 0.114) > 186 ? '#000000' : '#FFFFFF'; } // invert color components r = (255 - r).toString(16); g = (255 - g).toString(16); b = (255 - b).toString(16); // pad each with zeros and return return "#" + padZero(r) + padZero(g) + padZero(b); } function padZero(str, len) { len = len || 2; var zeros = new Array(len).join('0'); return (zeros + str).slice(-len); } var color = function getRandomColor() { var letters = '0123456789ABCDEF'.split(''); var color = '#'; for (var i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; } setInterval(function() { var bgColor = color(); var textColor = invertColor(bgColor,true); document.getElementById("test").style.backgroundColor = bgColor; //() to execute the function! document.getElementById("test").style.color = textColor; }, 3000); 
 <div id="test">This is some text</div> 

Opposite color code taken from How can I generate the opposite color according to current color? 相反的颜色代码如何根据当前颜色生成相反的颜色?

Added an extra parameter bw to invertColor(), if bw is set to true the text color will be black if background is bright and vice versa. 在invertColor()中添加了一个额外的参数bw,如果bw设置为true,如果背景亮,文本颜色将为黑色,反之亦然。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM