mix-blend-mode: difference 并非检测背景色后切换文字色,而是通过RGB通道绝对值相减实现视觉反色;其生效需满足文字与背景相邻图层、父容器无isolation/opacity/filter干扰、文字仅用纯黑或纯白三前提,中灰背景易致对比不足,且不支持IE及旧版Safari。
能让文字“看起来”随背景深浅自动翻转,但它不是真正在检测颜色,而是靠图层混合运算强制出高对比效果——用对了省事,用错了连 Safari 都不给你面子。
为什么
有时完全没反应
90% 的失效都卡在 DOM 结构或层叠上下文上:
文字和背景不在同一父容器内(比如背景设在
,文字在
),必须给文字容器加
父容器用了
、
或
,会隐式创建新层,切断混合链路
文字被包在多个嵌套
里,而其中某一级有
+
,也会打断相邻图层关系
背景用了
但叠加了半透明遮罩(如
),
会跟整张图算差值,结果发灰、发晕、边缘噪点
下文字该用什么颜色
别乱试灰色或主题色——它只对纯黑或纯白稳定输出可读反色:
固定用
:深背景下变亮,浅背景下变暗,视觉上就是“自动反色”
固定用
:效果对称,但某些中灰背景(如
)下可能对比不足
绝对不要用
、
这类中间调,
运算后极易糊成一片
文字不能带
或
,这些会引入额外图层干扰混合
哪些背景能用,哪些千万别碰
这个模式本质是数学差值,不是 AI 识别:
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
前端免费学习笔记(深入)
”;
✅ 纯色背景(
、
)最稳
✅ 缓和线性渐变(如
)勉强可用
❌ 复杂径向渐变、多色叠加渐变——差值结果不可预测,常出现色带断裂
❌ 图片背景(哪怕加了
)——边缘毛刺、光晕、局部失色
❌ 半透明背景(
)——
会穿透到下一层,反的不是你想要的色
兼容性和可访问性底线
它跑得动,不代表它合格:
Safari 15.4+ 支持,但旧版(尤其 iOS 15.2 及更早)直接忽略该声明,回退到默认文字色
不触发浏览器无障碍 API,屏幕阅读器看不到“当前文字为白色”,只读内容本身
WCAG 对比度需手动校验:哪怕看着清楚,也要用 axe DevTools 或
CLI 测真实值(例如
在
上只有 3.7:1,不达标)
动画切换背景时,
渲染有延迟,可能出现短暂文字消失或错色,建议加
提前提示
真正难的从来不是写对那一行
,而是判断什么时候不该用它——尤其是当背景来自用户上传、CMS 动态注入或主题变量计算时,JS 计算亮度再切 CSS 变量反而更可控。
mix-blend-mode: differencedifferencebody.cardisolation: isolateopacityfiltertransformdivposition: relativez-indexbackground-imagergba(0,0,0,0.1)differencedifferencecolor: #000000color: #ffffff#888#666hsl(200, 20%, 50%)differencetext-shadowbackdrop-filter#1a1a1argb(240,240,240)linear-gradient(to right, #222, #333)background-blend-modergba(0,0,0,0.3)differencecontrast-ratio#000#eeedifferencewill-change: mix-blend-modemix-blend-mode: difference