服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - 妙用CSS混合模式实现文字镂空波浪效果

妙用CSS混合模式实现文字镂空波浪效果

2021-09-28 23:19iCSS前端趣闻SbCoco 编程技术

通过混合模式,我们巧妙的实现了这样一个文字镂空的波浪效果。通过混合模式的特性,过滤掉了效果中一些我们不希望看见的颜色,只让正确的颜色在正确的地方出现。

妙用CSS混合模式实现文字镂空波浪效果

本文将介绍一个小技巧,通过混合模式 mix-blend-mode 巧妙的实现文字的镂空效果。

起因

一日,一群友私聊问我。如何使用 CSS 实现下述效果,一个文字的波浪效果:

妙用CSS混合模式实现文字镂空波浪效果

我当时想都没想,就回答道,这个很简单啊。

熟练的打开 CodePen,一顿操作,好像事情没有那么简单。想要用纯 CSS 实现起来非常的棘手。

纯 CSS 实现波浪效果

在进入正题前,我们先复习下,使用 CSS 实现波浪,如果不是在镂空的文字内,而是在一个 div 容器内,可以使用滚动大圆的方式,类似于这样:

妙用CSS混合模式实现文字镂空波浪效果

容器应用 overflow: hidden,就能得到这样的效果:

妙用CSS混合模式实现文字镂空波浪效果

对这个技巧还不理解,可以猛击这篇文章:纯 CSS 实现波浪效果![1]

如何在文字中应用此效果

OK,回归正题,那么如何在文字中应用此效果呢?

问题出在哪里呢?

我们首先尝试下,白底黑字,加上该效果:

  1. <div class="g-container"
  2.     <p>TEXT WAVE</p> 
  3. </div> 

核心的 CSS 伪代码如下:

  1. p { 
  2.     background: #fff; 
  3.     color: #000; 
  4.      
  5.     &::before, 
  6.     &::after { 
  7.         content: ""
  8.         position: absolute
  9.         border-radius: 45% 48% 43% 47%; 
  10.         background: rgba(3, 169, 244, .85); 
  11.         animation: rotate 10s infinite linear; 
  12.     } 
  13.      
  14.     &::after { 
  15.         border-radius: 43% 47% 44% 48%; 
  16.         animation: rotate 10s infinite .5s linear; 
  17.     } 
  18.  
  19. @keyframes rotate { 
  20.     0% { 
  21.         transform: translate(-50%, -50%) rotate(0); 
  22.     } 
  23.     100% { 
  24.         transform: translate(-50%, -50%) rotate(360deg); 
  25.     } 

效果大概是这样:

妙用CSS混合模式实现文字镂空波浪效果

当然,我们也可以把它放置到文字层下面,更直观点:

  1. p { 
  2.     ... 
  3.    
  4.     &::before, 
  5.     &::after { 
  6.         ... 
  7.       + z-index: -1;   
  8.     } 

妙用CSS混合模式实现文字镂空波浪效果

Oh,太糟糕了,仅仅这样是没法实现 -- 只是文字被镂空,文字内部才有波浪效果。

尝试使用让文字透明

我们要尝试让文字透明

  1. 可以使用 color: transparent 使文字透明
  2. 尝试使用 background-clip 实现

emmm,逐一尝试下。如果字体设置为透明,由于

设置了白色底色,字体颜色也就会变成白色。整体就是一幅白,失败。

那如果背景设置为黑色,并且设置 background-clip: text 呢?字体依然是黑色,波浪依旧无法进到镂空的字体中~

  1. p { 
  2.   + background-clip: text; 

也就是这样:

妙用CSS混合模式实现文字镂空波浪效果

强大的混合模式

看来此路不通,只能另辟蹊径。

在 CSS 中,其他能对颜色进行处理的,一是滤镜 filter,另外一个就是混合模式 mix-blend-mode,在这里,脑袋里快速闪过各个滤镜,应该都不行。但是混合模式,倒是能够尝试一下。

在 CSS 中也有混合模式(mix-blend-mode、background-blend-mode),混合模式最常见于 photoshop 中,是 PS 中十分强大的功能之一,目前在 CSS 中得到了非常好的支持。

我们尝试给两个大圆,添加混合模式,在当前的配色下,也就是白底黑字的情况下,滤掉白底下的蓝色。

妙用CSS混合模式实现文字镂空波浪效果

Wow,当给两个波浪圆形加上 mix-blend-mode: lighten 时,成功的在白底上过滤掉了蓝色,只在黑色字体上能够看到蓝色波浪的效果。

当然,另外一个混合模式 mix-blend-mode: screen 也能达到类似的效果:

妙用CSS混合模式实现文字镂空波浪效果

至此,通过混合模式,我们巧妙的实现了这样一个文字镂空的波浪效果。通过混合模式的特性,过滤掉了效果中一些我们不希望看见的颜色,只让正确的颜色在正确的地方出现。

完整的代码你可以猛击:CSS 灵感 - 使用混合模式叠加实现文字波浪效果[2]

最后

好了,本文到此结束,希望对你有帮助 :)

本文没有详细的去讲混合模式 mix-blend-mode 的一些基础用法,感兴趣的同学可以自行研究。

参考资料

[1]纯 CSS 实现波浪效果!:

https://github.com/chokcoco/iCSS/issues/22

[2]CSS 灵感 - 使用混合模式叠加实现文字波浪效果:

https://csscoco.com/inspiration/#/./blendmode/mixblend-text-wave-effect

原文链接:https://mp.weixin.qq.com/s/MTVN-AinLZNDGBNjtZ41Jg

延伸 · 阅读

精彩推荐
  • 编程技术简单、好懂的Svelte实现原理

    简单、好懂的Svelte实现原理

    本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一边看、一边敲、一边学...

    魔术师卡颂4822021-11-10
  • 编程技术AIOps,SRE工程师手中的利器

    AIOps,SRE工程师手中的利器

    AIOps开始成为一种极为重要的站点可靠性工程工具。它能够高效吸纳观察数据、参与数据以及来自第三方工具的数据,判断系统运行状态并保证其处于最佳...

    至顶网5972021-03-08
  • 编程技术Delphi - Indy idMessage和idSMTP实现邮件的发送

    Delphi - Indy idMessage和idSMTP实现邮件的发送

    这篇文章主要介绍了Delphi - Indy idMessage和idSMTP实现邮件的发送,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    JJ_JeremyWu6592020-09-22
  • 编程技术从Context源码实现谈React性能优化

    从Context源码实现谈React性能优化

    这篇文章主要介绍Context的实现原理,源码层面掌握React组件的render时机,从而写出高性能的React组件,源码层面了解shouldComponentUpdate、React.memo、PureComponen...

    魔术师卡颂5312020-12-20
  • 编程技术用户态 Tcpdump 如何实现抓到内核网络包的?

    用户态 Tcpdump 如何实现抓到内核网络包的?

    在网络包的发送和接收过程中,绝大部分的工作都是在内核态完成的。那么问题来了,我们常用的运行在用户态的程序 tcpdump 是那如何实现抓到内核态的包...

    开发内功修炼11612021-09-08
  • 编程技术2021年值得关注的React PDF 库

    2021年值得关注的React PDF 库

    今天,许多网络应用程序为其用户提供内置的PDF浏览选项。然而,选择一个并不容易,因为它们的功能远远超过显示PDF。在这篇文章中,我将评估5个React的...

    TianTianUp5232021-06-21
  • 编程技术让开发效率倍增的 VS Code 插件

    让开发效率倍增的 VS Code 插件

    今天来分享一些提升开发效率的实用 VS Code 插件!Better Comments 扩展可以帮助我们在代码中创建更人性化的注释,有不同形式和颜色的注释供我们选择。 ...

    前端充电宝7132022-04-21
  • 编程技术真正聪明的程序员,总有办法不加班

    真正聪明的程序员,总有办法不加班

    工作效率提升了,就可以少加班了,聪明的程序员,总会有一堆可以提升编码效率的工具?当一种工具满足不了工作需求,就去探索新的,今天纬小创就给...

    今日头条12482021-03-04