如何使用 Javascript 查找页面上所有黑底黑字的元素?同时,黑色背景/颜色可以不分配给元素本身,而是分配给远方的父元素,但在所有继承之后,结果是黑色的黑色。
我们设定的任务是:在网站上为视障人士制作一个版本。其中一个要点是颜色反转,即我们在黑色背景上显示白色文本。我写了 black backgroundy body,更正了其他容器的 css,一切都很好,除了一个但是。在所见即所得编辑器的某些页面的管理区域中,明确定义了文本的黑色(在属性中style)。因此,此文本在页面上不可见。
我想找到一种无需更改页面代码即可解决问题的解决方案。
例如,让 javascript 自动找到这样的文本并将其颜色更改为白色。问题是如何找到这样的元素。
到目前为止,我只看到递归遍历所有 DOM 元素、记住background父元素并检查元素本身的颜色的选项。
但也许有更简单的方法,一些在 jquery 中几行的解决方案?
换句话说,您需要确保在第二个示例div > p中文本是可见的:
.orig {
background-color: #fff;
}
.invert {
background-color: #000;
}
<h2>Оригинал</h2>
<div class="orig"><p style="color: black">Текст</p></div>
<h2>Инверсия</h2>
<div class="invert"><p style="color: black">Текст</p></div>
我突然想到,编辑器中设置的样式不一定会将文本设置为黑色——它可以是深灰色或某种棕色。这种颜色的文字在倒置的背景上,对于视障人士来说仍然难以阅读,所以你需要确定文字和背景的对比度。
代码部分复制粘贴自Leah Veru的对比度计。
这段代码中发生了什么:函数
getLuminance()返回相对亮度;该函数getContrastRatio()返回输入的背景和文本颜色数据的对比度。我们遍历块内的每个段落.invert,确定对比度,如果小于 7(这是 WCAG 要求),我们将文本设为白色,如果大于 7,则保持原样.UPD:我重写了代码以确定背景颜色不是为父元素,而是为元素本身,为此你需要在 CSS 中编写一个段落
background-color: inherit并将bg你自己的背景颜色的值分配给变量:bg = $(item).css('background-color')。UPD:最终版本,它允许您对对比度不足且不使用的元素执行任何操作
background-color: inherit。资料来源:
可能是这样:
要么像这样:
也许有过滤器
invert?好奇的。
当您更改文本节点 (
MutationObserver) 时,您可以检查其颜色,将其与黑色进行比较,如果太暗,则将其调亮。保存时绕树(
TreeWalker),强制设置文字颜色。如果您想快速轻松地完成它,请使用属性在本机 CSS 中完成
mix-blend-mode: