我想要做的是创建界面,该界面将根据背景颜色改变颜色,以使文本始终可读。到目前为止一切正常。我已经记录了我的浏览器以显示一个工作示例:
根据我的研究,我发现实现这一目标的最佳方法是使用mix-blend-mode: difference;
. 唯一的问题是,由于某些未知原因,文本变得粗体。
最初我想提供演示,但mix-blend-mode
不在代码片段中工作。我不太确定为什么,我看到其他人在演示中使用它,但对我来说,它以红色突出显示。
无论如何,这是一张图片(来自浏览器的屏幕截图的一部分):
如您所见,应用mix-blend-mode: difference;
文本后明显更厚。也许这没什么大不了的,但是当我将其应用于较小的文本时,它看起来真的很糟糕。
我知道这很愚蠢,但是当我尝试在 Photoshop 中重新创建相同的效果时,一切都很好,这意味着使用difference
混合模式反转颜色可以正常工作。
我的问题是:如果铭文变得更厚(?),一个人能否获得相同的结果,或者它可能是这样工作的,我无能为力?
我不想改变字体样式light
来强制不同的外观。
编辑:好的,这是一个简单的例子——我不知道为什么,但这次它奏效了。上次mix-blend-mode: difference;
在演示中根本不起作用,这就是为什么我用图像来描述我的问题。
反正左右两边的文字是没有 mix-blend-mode: difference;
的,能看出区别。奇怪的是,没有的白色版本mix-blend-mode: difference;
看起来还不错——我只是通过在黑色背景上添加版本才发现它。
* {
margin: 0;
padding: 0;
}
.white {
background-color: #fff;
width: 50%;
position: absolute;
left: 0;
height: 100%;
}
.black {
background-color: #000;
width: 50%;
position: absolute;
right: 0;
height: 100%;
}
.normalb {
position: absolute;
top: 50%;
left: 5%;
color: #000;
font-family: 'Roboto', sans-serif;
font-weight: normal;
font-size: 42px;
transform: translateY(-50%);
z-index: 10;
}
.normalw {
position: absolute;
top: 50%;
right: 5%;
color: #fff;
font-family: 'Roboto', sans-serif;
font-weight: normal;
font-size: 42px;
transform: translateY(-50%);
z-index: 10;
}
.difference {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
color: #fff;
font-family: 'Roboto', sans-serif;
font-weight: normal;
font-size: 42px;
mix-blend-mode: difference;
z-index: 10;
}
<div class="white"></div>
<div class="black"></div>
<div class="normalb">example</div>
<div class="normalw">example</div>
<div class="difference">example</div>
以下是屏幕截图的快速比较,以便仔细查看:
嗯......它看起来像在应用mix-blend-mode: difference;
到白色文本之后,它被渲染为黑底白字但在白色背景上,这很奇怪,因为字体保持不变,所以通过反转颜色它应该看起来像正常的黑底白字版本,但它没有。我很困惑。