问题 JavaScript颜色对比


我正在寻找一种技术,我们可以通过编程方式选择最佳的颜色对比,以应用于不同(不可预测的)背景颜色的HTML元素上的文本。

由于HTML元素将具有不同的颜色,我们正在寻找一种能够确定文本背后内容的颜色的技术,然后调整文本的颜色以使用具有最佳对比度的颜色。

我很确定这不能只是CSS,我已经找了Jquery解决方案,但找不到任何...有人有线索吗?

[更新]:  根据第一个回复,我想我需要改写。想象一下,我正在建立一个图像共享服务,我想让人们标记  图片本身。图片可以是任何颜色。如何为每张不同的图片选择正确的标签颜色?


8455
2018-04-13 14:30


起源

您可以尝试BackgroundCheck脚本: kennethcachia.com/background-check - cptstarling


答案:


我认为这可能会为未来的研究人员节省一点时间,这对我来说非常有效。将红色绿色和蓝色值插入到功能中,它会输出“dark-text”或“light-text”。

var darkOrLight = function(red, green, blue) {
  var brightness;
  brightness = (red * 299) + (green * 587) + (blue * 114);
  brightness = brightness / 255000;

  // values range from 0 to 1
  // anything greater than 0.5 should be bright enough for dark text
  if (brightness >= 0.5) {
    return "dark-text";
  } else {
    return "light-text";
  }
}

使用一些代码 http://particletree.com/notebook/calculating-color-contrast-for-legible-text/ 来自@ David的回答。


13
2018-03-12 09:31



看看这个JQuery插件 github.com/joggink/jquery-colorcontrast这似乎实现了上述功能。小心(目前)插件没有迭代;你需要自己打电话给'每个' - Cerber
太棒了,非常感谢! - Jack James


看一眼 http://www.0to255.com 。只需片刻即可看一眼网站呈现的渐变效果。你将不得不拼图,但只有大约20秒。它是解决此类问题的绝佳站点,也是程序化解决方案的绝佳思想来源。并且没有涉及数学:只需为rgb vals插入一些字节即可。


2
2018-04-13 14:37



尽管我不确定它是否特别回答了这个问题! - Town
感谢您的链接,但这并没有说明我如何真正获得文本下的颜色! - Julien Genestoux
是啊。我现在看到我跳了起来。你必须使用Javascript和DHTML和DOM。在Javascript中,找到您需要更改其文本颜色的对象;从该对象中提取background-color属性;然后继续为标签文本选择颜色。那更接近你正在寻找的答案吗? - Pete Wilson
@Julien Genestoux - 关于图像:就个人而言,我甚至不会想到尝试将照片中的颜色整合在一起以产生一种复合背景颜色,以对比色显示标签文本。相反,我总是在照片上面放一块白色,并在那个白色斑点上显示黑色标签文字。只是我的观点;毫无疑问,酷算法将计算平均背景颜色的良好近似值。坚果,只是为自己说话,我不会尝试这样的事情。 - Pete Wilson


这是我最喜欢的资源 计算“可读性” (对比度)两种颜色。

W3C建议在文本后面的文本和背景之间存在至少5:1的对比度 http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#G18

从页面:

上面显示的合规率是达到的最高合规率。 WCAG 2.0级别AA和建议的508条款刷新合规级别是基于对于大小为18磅(如果用粗体加点为14点)或更大的文本或对于尺寸小于大小的文本为4.5:1的文本实现3:1的对比度。 18分。当小于18点的文本的对比度为7:1,文本18点(如果加粗为14点)或更大的对比度为4.5:1时,符合WCAG 2.0级AAA合规级别。


0
2018-04-13 15:04



对不起,但是没有回答这个问题。是的,如果我能够在我的文字下面说出颜色,那就好了,但我不是。我怎么能够? - Julien Genestoux
您可以使用JavaScript读出元素的当前背景颜色:$('。myclass')。css('background-color'),使用该值可以计算任何其他颜色的对比度。我假设您想要使用jQuery,因为您提到要查找它。 - daniellmb
2个问题:我如何确定“myid”?如果它是一张图片怎么办? - Julien Genestoux
如果你的背景是一个图像,我不会尝试自动处理颜色客户端(使用画布) - 我会看一个服务器端解决方案,因为它将有更少的跨浏览器问题和更好的扩展。 - daniellmb


现在有一个名为的房产 mix-blend-mode 在CSS(目前只是在草稿中),可以用来实现类似于你想要的东西。

.contrasting-text {
    mix-blend-mode: difference;
}

CodePen有人一起展示了这个: https://codepen.io/thebabydino/pen/JNWqLL


0
2018-06-06 15:18





只需一行即可解决问题:

function getContrast50($hexcolor)
{ 
  return (hexdec($hexcolor) > 0xffffff/2) ? 'white':'black'; 
}

如果对比度需要反转,只需用黑色打开白色就可以了。在PHP中。


-1
2017-09-19 14:20



这个oneliner不适合我 - Cerber
我在问题中没有提到php。 - Peter
正如之前的评论所述,这是PHP代码,而不是Javascript。 hexdec函数存在于PHP中,而不是JS中 - Daniel