问题描述
我已经尝试了几天在具有相同颜色的文本上混合彩色背景,并最终将混合文本变成白色。这是我设法仅用黑白存档的示例:
但是一旦我将文本和背景的颜色从黑色更改为 - 例如 - 蓝色,文本不会变成白色而是黄色或其他颜色。
我使用了 CSS mix-blend-mode
exclusion
。
A working example with black and white can currently be found here。我的目标是用蓝色和白色的按钮替换黑白主按钮。
解决方法
如果我们考虑 mix-blend-mode difference
,这需要背景颜色和内容颜色之间的差异。
因此,如果我们将文本设为蓝色,即 rgb(0,255)
变为白色,我们需要将其与 rgb(255,255,0)
区分开来。
相反,如果我们的文本是 rgb(255,0)
并且我们将它与白色的 rgb(255,255) 区别开来,我们会得到 rgb(0,255)
,它是蓝色的。
因此,我们为文本赋予 rgb(255,0)
颜色,并要求它与白色背景混合,从而得到蓝色。然后当我们覆盖蓝色时,我们将得到白色文本。
这是片段。我没有提供波动性,这将成为另一个问题的主题。
更新:从评论中可以看出,到目前为止在 Windows10 和 IOS 上的结果看起来还不错,但在 MACOS 上看到了可变结果,文本在 Chrome 和 Safari 中呈现出一些苍白的颜色,尽管在 Firefox 上为白色.解释上的差异(尤其是混合模式和背景混合模式之间)需要进一步调查。
body {
position: relative;
background-color: rgb(255,255);
width: 100vw;
height: 100vh;
}
@keyframes updown {
0% {
height: 0;
top: 200px;
}
50% {
height: 200px;
top: 0;
}
100% {
height: 0;
top: 200px;
}
}
.background {
position: absolute;
background-color: rgb(0,255);
width: 400px;
height: 200px;
animation: updown 10s ease infinite;
}
.text {
position: absolute;
font-family: sans-serif;
width: 400px;
color: rgb(255,0);/* complement of blue */
mix-blend-mode: difference;
text-align: center;
font-size: 50px;
}
<div class="background"></div>
<div class="text">Primary button</div>