CSS mix-blend-mode 实现元素融合效果

一、什么是 mix-blend-mode?

mix-blend-mode 是 CSS Compositing and Blending Module 的核心属性之一,它定义了一个元素的内容如何与其背后的背景(包括父元素内容和下层元素)进行颜色混合。其工作原理类似于图像处理软件(如 Photoshop)中的图层混合模式,通过数学算法将当前元素的像素颜色与下方背景颜色的对应像素进行计算,生成新的视觉效果。


二、属性值详解

mix-blend-mode 支持多种混合模式,可分为以下几类:

类别 属性值 效果描述
基础模式 normal 默认值,不混合,元素颜色覆盖下方内容。
multiply 正片叠底:颜色相乘,结果更暗(白色不变,黑色变黑)。
screen 滤色:颜色反相后相乘再反相,结果更亮(黑色不变,白色变白)。
overlay 叠加:结合 multiplyscreen,增强对比度。
明暗调节模式 darken 取较暗的颜色作为结果。
lighten 取较亮的颜色作为结果。
color-dodge 颜色减淡:降低对比度使背景变亮。
color-burn 颜色加深:提高对比度使背景变暗。
高级特效模式 difference 差值:黑白叠加会反转颜色。
exclusion 排除:类似差值但对比度更低,效果更柔和。
hard-light 强光:源色决定叠加方式(亮则屏幕,暗则正片叠底)。
soft-light 柔光:类似强光但效果更柔和。
HSL色彩模式 hue 保留源颜色的色相,背景的饱和度和亮度。
saturation 保留源颜色的饱和度,背景的色相和亮度。
color 保留源颜色的色相和饱和度,背景的亮度。
luminosity 保留源颜色的亮度,背景的色相和饱和度。

三、兼容性

现代浏览器均支持此属性,无需前缀,但旧版 IE 不支持

四、实战示例:根据不同背景颜色,显示不一样的文字颜色

如果文字颜色设置成白色,当遇到白色背景时就看不到文字了,这该怎办?莫慌,今天的主角mix-blend-mode: difference;就要闪亮登场了。

html 复制代码
<div class="container">
  <div class="overlay background1">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background2">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background3">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background4">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background5">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background6">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background7">
    <div className="difference">difference</div>
  </div>
  <div class="overlay background8">
    <div className="difference">difference</div>
  </div>
</div>
css 复制代码
.container{
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.overlay {
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
  width: 100px;
  height: 50px;
  color: #fff;
}
.difference {
  mix-blend-mode: difference;
}
.background1 {
  background: white;
}
.background2 {
  background: red;
}
.background3 {
  background: blue;
}
.background4 {
  background: #000;
}
.background5 {
  background: #5c0011;
}
.background6 {
  background: #5b8c00;
}
.background7 {
  background: #9e1068;
}
.background8 {
  background: #13c2c2;
}

效果如下图:

difference是差值计算,举个例子,默认字体白色,如果背景是黑色,差之后就是(255-0, 255-0, 255-0),最后的结果是255,255,255(白色),如果背景是白色,差之后就是(255-255, 255-255, 255-255),最后的结果是0,0,0(黑色)。

相关推荐
Darling噜啦啦2 分钟前
JavaScript 数组深度解析:从纯函数到二维数组陷阱,一文吃透前端数据结构核心
前端·javascript·数据结构
万少2 分钟前
一封邮件,让我重新打开了搁置半年的鸿蒙应用
前端·javascript·后端
wjj不想说话4 分钟前
你的小程序活动页,可能已经成了后台配置的杂物间
前端
梦想是准点下班6 分钟前
androidStudio打包,我又又又忘了
前端
槑有老呆6 分钟前
栈队列链表,三个故事就懂了
前端
ViavaCos23 分钟前
pnpm v11 的安全策略,让我踩了个坑
前端
To_OC25 分钟前
从一段定时器代码,重新捋清 JS 同步、异步与 Promise
前端·javascript·代码规范
持敬chijing26 分钟前
Web渗透之前后端漏洞-XSS漏洞原理攻击防御全流程
前端·安全·web安全·网络安全·网络攻击模型·安全威胁分析·xss
程序员黑豆33 分钟前
AI全栈开发 - Java:注释
前端·后端·ai编程
痕忆丶42 分钟前
Typora 的替代marktext,marktext切换中文
前端