mix-blend-mode 利用混合模式让文字智能适配背景颜色

简介: 这篇文章介绍了CSS3属性mix-blend-mode的使用方法,该属性能够实现文字智能适配背景颜色的效果,其中包括文字镂空效果。文章详细解释了该属性的混合模式计算方式以及各种属性值的效果。

今天向大家推荐一个 CSS3 属性:mix-blend-mode,其中 mixblend 的中文意译均为混合,那么这个属性的作用直译过来就是混合模式。

文字智能适配背景颜色

  1. 这个效果就是在黑色背景中显示白色文字,在白色背景中显示黑色文字,而且是自动的:

    <style>
    .main {
      width: 600px;
      height: 200px;
      background: linear-gradient(45deg, #000 0, #000 50%, #fff 50%);
      position: relative;
      margin: 100px auto;
    }
    
    .main::before {
      content: '白雾茫茫丶';
      position: absolute;
      font-size: 50px;
      width: 100%;
      height: 100%;
      top: 40%;
      left: 20%;
      color: #fff;
      mix-blend-mode: difference;
      animation: move 3s infinite linear alternate;
    }
    
    @keyframes move {
      0% {
        transform: translateX(20%);
      }
    
      100% {
        transform: translateX(-20%);
      }
    }
    </style>
    <div class="main"></div>
    

    b97a2668b76edc25249f6b272cd03178.gif

我们可以发现,代码非常简单,关键是这个属性:mix-blend-mode: difference

  1. 这是为什么呢?经过一番资料查阅,设置了这个属性后,它是这样计算的:

    黑底白字:
    当前颜色:    255  255  255
    父元素:       0    0    0
    混合后的颜色:255   255  255
    
    白底黑字:
    当前颜色:    255  255  255
    父元素:      255  255  255
    混合后的颜色: 0    0    0
    

    由此可以得出结论:混合后的颜色 = 当前颜色 - 父元素背景色

实现文字镂空效果

<style>
  .parent {
    background-image: url("./images/1.jpg");
    width: 600px;
    height: 400px;
    position: relative;
    margin: 100px auto;
  }

  .parent .child {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-weight: 900;
    font-size: 50px;
    color: #000;
    background-color: #fff;
    mix-blend-mode: screen;
  }
</style>
<div class="parent">
  <div class="child">白雾茫茫丶</div>
</div>

cde513dc923e7d1193b2ef3d2bab4010.png

mix-blend-mode 其他属性

属性值 描述
normal 默认值,没有混合效果
multiply 正片叠底
screen 滤色
overlay 叠加
darken 变暗
lighten 变亮
color-dodge 颜色减淡
color-burn 颜色加深
hard-light 强光
soft-light 柔光
difference 差值
exclusion 排除
hue 色相
color 颜色
saturation 饱和度
luminosity 亮度

其它属性的效果,有兴趣的伙伴可以研究一下!

相关文章
|
前端开发 网络协议
Nest.js 实战 (十四):如何获取客户端真实 IP
这篇文章介绍了在Nest.js应用中获取客户端真实IP地址的问题及解决方法。问题出现在使用本地代理时,请求的IP地址总是返回::1或::ffff:127.0.0.1。为解决这个问题,需要确保代理服务器正确设置转发头如X-Forwarded-For或X-Real-IP,后端服务能够读取这些头信息来确定客户端的IP地址。文章以作者自己的OpenResty应用为例,展示了如何通过配置反向代理和设置X-Forwarded-For头来获取真实IP地址,并提供了相关的代码示例。最后,文章提到了使用这个解决方案后的实际效果,例如在操作日志中记录真实IP地址。
323 0
|
存储 JavaScript 中间件
Nuxt3 实战 (一):初始化项目
这篇文章介绍了Nuxt框架的基本信息,包括什么是Nuxt以及Nuxt3的优点。文章还介绍了Nuxt3的一些特点,如服务端渲染和静态站点生成、模块化、文件系统路由等。此外,文章还提供了项目安装的步骤和目录结构。最后,文章提到了下一步计划,即配置 Eslint、Prettier、Husky、lint-staged、commitlit项目提交规范的过程。
358 3
Nuxt3 实战 (一):初始化项目
|
安全 Java API
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
这篇文章介绍了Swagger,它是一组开源工具,围绕OpenAPI规范帮助设计、构建、记录和使用RESTAPI。文章主要讨论了Swagger的主要工具,包括SwaggerEditor、SwaggerUI、SwaggerCodegen等。然后介绍了如何在Nest框架中集成Swagger,展示了安装依赖、定义DTO和控制器等步骤,以及如何使用Swagger装饰器。文章最后总结说,集成Swagger文档可以自动生成和维护API文档,规范API标准化和一致性,但会增加开发者工作量,需要保持注释和装饰器的准确性。
378 0
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
|
SQL 运维 监控
Nest.js 实战 (十):使用 winston 打印和收集日志记录
这篇文章介绍了在Nest服务中如何使用Winston记录日志。文章首先强调了日志记录在后台服务中的重要性,接着提到Nest默认的内部日志记录器,并指出可以通过@nestjs/common包中的Logger类来全面控制日志系统的行为。文章还提到,为了在生产环境中实现更高级的日志功能,可以使用如Winston之类的Node.js日志包。接下来,文章介绍了如何在Nest服务中使用Winston记录日志,包括安装相关依赖、创建winston配置文件以及实现简单的日志记录示例。最后,文章指出更高级的自定义日志功能需要读者自己去探索。
448 0
Nest.js 实战 (十):使用 winston 打印和收集日志记录
|
前端开发 JavaScript API
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Nuxt3框架中页面和布局的过渡效果设置方法,以及首屏加载动画的添加。通过配置nuxt.config.ts文件和添加CSS样式,可以实现页面过渡效果。同时,文章也提到了在页面中设置不同的过渡效果和为布局和页面同时设置过渡效果的方法。最后,文章以一个Github仓库链接和一个线上预览地址作为总结,表示遵循官方文档操作即可完成相关设置。
317 0
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
Nuxt3 实战 (八):优雅的实现暗黑主题模式
这篇文章介绍了在Nuxt3中实现暗黑模式的过程。首先推荐使用color-mode库来轻易实现暗黑模式切换,并通过pnpm命令安装@nuxtjs/color-mode依赖。然后在nuxt.config.ts配置文件中注入依赖,并根据项目实际情况自定义配置。接着通过toggleDark函数实现切换动画,并在需要的地方加载组件<ColorMode/>,从而达到最终效果。
321 0
Nuxt3 实战 (八):优雅的实现暗黑主题模式
|
JavaScript
Nuxt3 实战 (四):安装 Nuxt UI 和配置 Typescript 类型检查
这篇文章介绍了在项目中安装和配置Nuxt UI以及TypeScript的步骤。作者在前言中提到考虑了AntDesignVue和Element-Plus,但最终选择了NuxtUI,因为它更适合年轻化的项目,并且与Nuxt兼容。安装Nuxt UI需要执行一系列命令,同时会自动安装一些相关模块。然后,可以在Nuxt应用中使用Nuxt UI的所有组件和可组合函数。此外,还介绍了如何添加图标库和配置TypeScript。
429 0
Nuxt3 实战 (四):安装 Nuxt UI 和配置 Typescript 类型检查
|
前端开发 程序员 项目管理
Nuxt3 实战 (二):配置 Eslint、Prettierrc、Husky等项目提交规范
这篇文章介绍了项目规范的重要性和如何配置一些工具来提高代码质量、团队协作、降低维护成本、提升软件可靠性和促进项目管理。工具介绍了Eslint和Prettier,并且提供了安装和配置的步骤。文章还提到了如何配置Husky和Commitlint来检查提交风格的规范性,并最后提到了需要使用 release-it 自动管理版本号和生成 CHANGELOG 的任务。
360 0
Nuxt3 实战 (二):配置 Eslint、Prettierrc、Husky等项目提交规范
Nuxt3 实战 (五):Header 头部布局
这篇文章介绍了作者忙于公司系统迭代需求,但抽空完成了布局的Header部分。文章提到了需求的拆分,布局的组件拆分,并介绍了Nuxt框架以及安装和启用插件的步骤。还提到了白天暗黑模式切换组件和SVG跟随模式的组件的创建。最后,文章提到了PC端和移动端的最终实现效果,并给出了Github仓库和在线预览链接。
289 0
Nuxt3 实战 (五):Header 头部布局
|
前端开发 容器
使用 object-fit 属性完美过渡图片
这篇文章介绍了CSS属性object-fit的用法。object-fit属性用于指定元素的内容如何适应指定容器的高度和宽度。该属性一般适用于img和video标签,可以进行剪切、缩放或拉伸操作。文章中展示了通过object-fit属性来统一设置多张图片的样式,保持原始比例并改变显示位置的示例,以及使用object-position属性实现简单的过渡效果。
189 0
使用 object-fit 属性完美过渡图片