html - 混合混合模式差异未按预期工作
问题描述
我有一个黑色文本与黑色 div 重叠 - 我想将重叠的文本部分设为白色。因此我尝试使用mix-blend-mode
,但它不起作用。怎么会这样?
快速演示:
h1 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: black;
font-size: 9rem;
mix-blend-mode: difference;
z-index: 1;
}
.centered-block {
position: absolute;
top: 50%;
left: 50%;
transform: translateY(calc(-50% - 10vh)) translateX(-50%);
width: 22.5rem;
height: 30rem;
background-color: black;
}
<h1>This<br/>is a<br/>test</h1>
<div class="centered-block"/>
解决方案
您不能使用黑色文本进行混合混合模式。
如果您有白色背景,则表示为 rgb(255,255,255)。如果你的文本是黑色的,你的颜色会是 rgb(0,0,0),所以如果减去每一列(颜色),得到绝对值,你会得到 rgb(255,255,255),所以文本仍然是白底白字。如果您的文本是白色 rgb(255,255,255) 并且您减去 rgb(0,0,0) 并获得绝对值,您就会得到白底黑字。如果您的背景是黑色 rgb(0,0,0),而您的文本是白色 rgb(255,255,255),则会得到白色文本。如果您的文本是黑色 rgb(0,0,0),而您的背景也是黑色 rgb(0,0,0),则差异是 rgb(0,0,0),因此黑色比黑色(这是您的示例)。
简单的答案,让你color: white;
在 h1 中。此外,您需要设置正文背景颜色,以便您的文本在没有任何内容的情况下有所不同(例如,当示例中的文本超过白色时,您仍然有黑色文本,这不是因为混合混合模式,这是因为它没有什么可混合的。)所以像这样实现它:
h1 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 9rem;
mix-blend-mode: difference;
z-index: 1;
}
.centered-block {
position: absolute;
top: 50%;
left: 50%;
transform: translateY(calc(-50% - 10vh)) translateX(-50%);
width: 22.5rem;
height: 30rem;
background-color: black;
}
body {
background-color: white;
}
<h1>This<br/>is a<br/>test</h1>
<div class="centered-block"/>
推荐阅读
- c++ - 二叉搜索树,仅打印出用于递归插入的“重复”警报 - C++
- html - 在移动设备上悬停图像
- javascript - 如何在 React Native 中创建引导式用户输入?
- python - Python OOP:为什么对象在打印中没有正确显示?
- php - 在角度简单的应用程序中,我必须在登录后向所有页面显示通用标题,但通用标题对用户详细信息页面不可见
- c - 学生单链表和错误“左操作数必须是左值”。怎么修?
- excel - 比较两张纸之间的所有数据,在新纸上打印标题和键
- reactjs - 希望在第一次渲染时设置一次状态,而不会在进一步更新时导致不必要的重新渲染
- python - 'type' 对象不可下标映射 DataFrame
- android - 如何在不使用 Media...insertImage(..) 方法的情况下将位图转换为 Uri?