神奇的 CSS,让文字智能适配背景颜色

嘿嘿,这种mix-blend模式:差异真是个好东西。
我前年在一个网站上使用过它。

你是对的,这就是它的作用。
无论背景是什么颜色,文字都可以与背景“竞争”。
去年我帮一个朋友创建了一个H5 网站。
背景颜色动态变化。
他担心得要死,因为文字要么不清楚,要么太稀奇古怪。
我尝试了这个区别,嘿嘿,问题立马就解决了!将白色文本放在黑色背景上。
哦,立刻就变成黑字了。
将其放在白色背景上,它会立即转换为白色文本,太神奇了!
意思是:与白色背景混合时,背景颜色反转;当与黑色背景混合时,颜色保持不变。
当我尝试时,我将一个 div 放入一个带有白色文本的纯黑色 div 中。
当我使用此属性时,文本立即变成黑色。
我在一个纯白色的div中插入了一个div,里面的文字是白色的。
有了这个属性,文本立即变成白色。
简陋。

你也贴出代码了,很清楚了。
但是,请记住,它与背景颜色并不完全匹配。
我前年在一个网站上使用过它。
背景有渐变颜色。
当我使用此属性时,文本的颜色与背景混合时有点奇怪且模糊。
后来我切换到乘法模式,颜色变得更加协调。
所以你必须尝试使用​​这个属性并看看它是如何工作的。
并非一切都是完美的。

一般来说,这个属性非常方便,特别是在设置背景颜色的时候。
如果遇到背景色也设置的情况,可以试试这个。
如果背景颜色发生变化,您可能需要尝试更改属性。

CSS动态背景下如何保证字体颜色对比度?

说实话,处理动态背景上的字体对比度绝对是我过去十年来遇到的一个长期存在的问题。
坦白说,没有什么灵丹妙药,要看具体情况。
你提到的方法我都在项目中尝试过,各有各的气质。

我们先来谈谈反转过滤器:filter:invert(1 00%)。
我第一次使用它是在活动页面上。
背景是实时视频,图像闪烁且嘈杂。
当时我直接使用了filter:invert(1 00%),瞬间解决了文字模糊的问题。
不过说实话,这东西也太霸道了。
文字和背景一起播放。
如果背景中有彩色元素,反转后就直接变成抽象画了。
我在老古董浏览器上用过一次,反转效果根本没有生效。
那一刻我真的很震惊。
所以当我现在使用它时,我首先将 WCAG 对比检查工具放在我的肝脏上,尤其是当背景图案很复杂时。

我们来谈谈混合模式 mix-blend-mode:difference。
有趣的是,如果用在正确的地方,它会非常有效。
我有一个设计,需要在彩色玻璃窗上重叠文本。
纯色背景很好,但是一旦背景中有渐变或图像,混合效果就会爆炸。
例如,将白色文字置于深蓝色背景上,反转后转变成亮绿色,具有很强的视觉冲击力。
但缺点是浏览器支持确实不是很好。
旧版本的 iOS 和 Android 根本不支持它。
有一次我为客户做这件事时,我的老板差点送了我一把剃须刀刀片。
所以我现在使用的时候,一般都会加一个polyfill,或者直接告诉客户,“这种花哨的效果在手机上可能看不到”。

至于动态对比度计算方案,我没有直接使用过,但是想法不错。
我之前有一个项目,其中背景是动态生成的纹理,CSS 无法处理它。
最后我只是写了一个JS来查询背景颜色,然后根据亮度来匹配颜色。
代码量爆炸,每次背景变化都要重新计算,性能有点慢。
但在这种情况下,也实在是没有办法,只能诉诸这种“笨办法”了。
现在想想,如果使用CSS和JS变量,就可以在控制台实时预览效果,相当方便。

我完全同意最后的一般性建议。
说到对比测试,每当我着手一个新项目时,我做的第一件事就是使用WebAIM工具遍历所有文本和背景组合,标记不符合标准的,并修改它们直到符合标准。
至于备份平面,我通常会在动态背景上添加半透明遮罩层,例如rgba(0,0,0,0.5 )。
然后画出背景图案,加上蒙版,文字立刻就清晰了。
我这样做也是为了逐步提高。
例如,如果不支持混合混合模式,则返回filter:invert。
如果不支持,将会用黑色文本和白色背景。

说白了,管理动态背景下文本可读性的关键是灵活性。
简单的场景立即呈现,而复杂的动态背景则慢慢烹调。
不管怎样,我这十年的经验是:先测试,再尝试,记住最后才知道真相。