Javascript 找到给定十六进制背景值的正确WCAG AA对比度颜色

Javascript 找到给定十六进制背景值的正确WCAG AA对比度颜色,javascript,wcag2.0,Javascript,Wcag2.0,我正在尝试为给定的背景色找到正确的匹配对比度颜色,该颜色将通过WCAG AA指南(文本小于14px) 我看到的算法是 function getContrastYIQ(hexcolor){ var r = parseInt(hexcolor.substr(1,2),16); var g = parseInt(hexcolor.substr(3,2),16); var b = parseInt(hexcolor.substr(5,2),16); var yiq

我正在尝试为给定的背景色找到正确的匹配对比度颜色,该颜色将通过WCAG AA指南(文本小于14px)

我看到的算法是

  function getContrastYIQ(hexcolor){

    var r = parseInt(hexcolor.substr(1,2),16);
    var g = parseInt(hexcolor.substr(3,2),16);
    var b = parseInt(hexcolor.substr(5,2),16);
    var yiq = ((r*299)+(g*587)+(b*114))/1000;

    return (yiq >= 128) ? 'dark-color' : 'light-color';   }
参考:

但是,对于这些颜色,一些颜色,如#e8540a和#ff4249,当它不通过颜色对比度准则时,会返回浅色

JS中是否有另一个算法/函数可以用来返回有效的对比度颜色,从而通过这些准则


似乎有正确的算法在里面。。。但似乎找不到转换为JS的相关代码。有人有什么建议吗?

您的算法与官方WCAG公式不匹配

您可以在以下页面上查看WCAG公式以获得对比度: 这要复杂得多

我不知道他们在哪里找到这个…

初步概念 有几个概念需要澄清才能回答您的问题

  • 没有“正确匹配的对比色”这类东西,而是一系列对比度足够的颜色。例如,在海军蓝(
    #000080
    )背景上,可以放置白色(
    #000000
    )文本(对比度16.0),但也可以使用黄色(
    #ffff00
    ,对比度14.9)、粉色(
    #ffc0cb
    ,对比度10.4)等。参见以下示例:
  • 海军蓝上的白色

    海军蓝上的黄色

    海军蓝上的粉红色