巧用css filter的drop-shadow()函数创建线条光影效果

本文将介绍一种利用 css 滤镜 filterdrop-shadow(),实现对 html 元素及 svg 元素的部分添加阴影效果,以实现一种酷炫的光影效果,用于各种不同的场景之中。

巧用css filter的drop-shadow()函数创建线条光影效果

通过本文,你可以学到:

如何利用 filter: drop-shadow() 对元素的部分内容添加单重及多重阴影,以及利用多重阴影实现 Neon 效果

HTML 元素配合 filter: drop-shadow() 以及 SVG 元素配合 filter: drop-shadow() 生成的光影效果

立即学习“前端免费学习笔记(深入)”;

使用 WebGL 实现的线条光影 Neon 动画

某天在逛 CodePen 的时候,发现了一个非常有意思的,使用 WebGL 实现的线条光影效果 — NEON LOVE,非常的有意思:

1.gif

但是由于源代码是使用 WebGL 完成,绘制如此简单的一个效果,通过 GLSL 着色器等代码,接近了 300 行。

那么,我们能否使用 HTML(SVG)+CSS 实现它呢?

利用 drop-shadow 对元素的部分内容添加单重及多重阴影

首先,要实现上述效果,很重要的一步是给元素的部分内容添加上阴影。

假设我们有这样一个图形:

我们给这个 div 图形设置 border-radius: 50%,并且添加一个 border-top

div {    width: 200px;    height: 200px;    border-top: 5px solid #000;    border-radius: 50%;}

结果如下:

2.gif

如果我希望,仅仅只给这个圆弧添加阴影,尝试使用 box-shadow

div {    width: 200px;    height: 200px;    border-top: 5px solid #000;    border-radius: 50%;  + box-shadow: 0 0 5px #000;}

emm,明显是不行的,阴影会加给整个 div:

3.gif

为了解决这种情况,聪明的同学会立马想到 filter: drop-shadow(),它就是为了解决这个问题而诞生的,box-shadow 属性在元素的整个框后面创建一个矩形阴影, 而 drop-shadow() 过滤器则是创建一个符合图像本身形状(alpha 通道)的阴影。

好,我们使用 drop-shadow() 替换 box-shadow

div {    width: 200px;    height: 200px;    border-top: 5px solid #000;    border-radius: 50%;  - box-shadow: 0 0 5px #000;  + filter: drop-shadow(0 0 5px #000);}

这样,我们就能得到符合图像本身形状(alpha 通道)的阴影:

4.gif

并且,drop-shadow() 也可以对一个图像作用多次,实现类似阴影的多重阴影效果:

div {    ...    filter:         drop-shadow(0 0 2px #000)        drop-shadow(0 0 5px #000)        drop-shadow(0 0 10px #000)        drop-shadow(0 0 20px #000);}

我们将得到可见部分图案的多重阴影叠加效果:

5.gif

我们将上述例子的黑白颜色对换一下,就能得到一副很有意境的图案,像是在深邃的太空中看某个透光的星球般:

6.gif

CodePen Demo — multi drop-shadow Neon

实现心形线条动画

接下来,就是实现心形线条动画了,这点利用 SVG 还是比较简单的。

我们首先需要得到一个利用 SVG 实现的心形形状,可以选择自己绘制 SVG 路径,也可以借助一些工具完成。

这里我借助了这个工具得到一个心形的 Path 路径:SVGPathEditor

通过工具,快速绘制想要的形状,拿到对应的 Path:

7.gif

核心就是拿到这一段 SVG Path 路径:

M 400 160 A 2 2 90 0 0 260 160 A 2 2 90 0 0 120 160 C 120 230 260 270 260 350 C 260 270 400 230 400 160

有了它,利用 SVG 的 stroke-dasharraystroke-offset,我们可以轻松的得到一个心形追逐动画:

body {    background: #000;}svg {    position: absolute;}.container {    position: relative;}.line {    fill: none;    stroke-width: 10;    stroke-linejoin: round;    stroke-linecap: round;    stroke: #fff;    stroke-dasharray: 328 600;    animation: rotate 2s infinite linear;  }.line2 {    animation: rotate 2s infinite -1s linear;   }@keyframes rotate {  0% {    stroke-dashoffset: 0;  }  100% {    stroke-dashoffset: 928;  }}

简单解释上上述代码:

两个相同的 SVG 图形,通过 stroke-dashoffset 将完整的线条图形截成部分

通过 stroke-dashoffset 的从 0 到 928 的变化,实现一次完整的线条动画循环(这里的 928 是完整的 path 的长度,可以通过 JavaScript 脚本求出)

整个动画过程 2s,设置其中一个的 animation-delay: -1s,也就是提前 1s 触发动画,这样就实现了两个心形线条的追逐动画

效果如下:

8.gif

给线条添加光影

有了上述两步的铺垫,这一步就非常好理解了。

最后,我们只需要给两段 SVG 线条,利用 drop-shadow() 添加不同颜色的多重阴影即可:

.line {    ...    --colorA: #f24983;    filter:        drop-shadow(0 0 2px var(--colorA))        drop-shadow(0 0 5px var(--colorA))        drop-shadow(0 0 10px var(--colorA))        drop-shadow(0 0 15px var(--colorA))        drop-shadow(0 0 25px var(--colorA));}.line2 {    --colorA: #37c1ff;}

最终,我们就利用 SVG + CSS 近乎完美的复刻了文章开头使用 WebGL 实现的效果:

9.gif

完整的代码,你可以猛击 — CSS 灵感 – SVG 配合 drop-shadow 实现线条光影效果

扩展延伸

当然,掌握了上述的技巧后,还有非常多有意思的效果我们可以去探索实现的,这里我简单的抛砖引玉。罗列两个我自己尝试的效果。

其中一大类是运用于按钮之上,可以实现按钮带光影的按钮效果,下图是其中一个的示意,巧妙运用 stroke-dashoffset,它可以有非常多的变形:

10.gif

完整源代码可以猛击 CodePen — Neon Line Button

当然,我们也不是一定要借助 SVG,仅仅是 HTML + CSS 也是可以运用这个效果,利用它实现一个简单的 Loading 效果:

11.gif

完整源代码可以猛击 CodePen — Neon Loading

最后

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

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

原文地址:https://juejin.cn/post/7016521320183644173作者:chokcoco

更多编程相关知识,请访问:编程视频!!

以上就是巧用css filter的drop-shadow()函数创建线条光影效果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1621634.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 07:35:26
下一篇 2025年12月24日 07:35:44

相关推荐

  • 让网站更酷炫的CSS filter使用小技巧,值得收藏!

    巧用css filter,可以让网站更加酷炫。本篇文章就来给大家分享一些css filter使用小技巧,希望对大家有所帮助! 下面就来开始本篇文章的内容吧! 我们在处理图片时,经常使用的一个功能就是滤镜,它能使一张图像呈现各种不同的视觉效果。 立即学习“前端免费学习笔记(深入)”; 在 CSS 中,…

    2025年12月24日 好文分享
    000
  • 用css怎么画树

    绘制方法:1、定义3个div标签,使用border属性将其修饰成3个大小不同的三角形;2、使用margin属性控制3个三角形的位置,形成树冠;3、定义1个div标签制作树干,使用margin属性将其定位到树冠下方即可。 本教程操作环境:windows7系统、CSS3&&HTML5版、…

    2025年12月24日 好文分享
    000
  • css中如何将行元素转为块元素,块元素转为行元素

    css中可以利用display属性实现行元素和块元素的相互转换:给行元素添加“display:block;”样式可以将其转为块元素;给块元素添加“display:inline;”样式可以将其转为行元素。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电…

    2025年12月24日
    000
  • 怎么设置css文本不可选中

    css文本不可选中的设置方法:1、创建一个HTML示例文件;2、创建div并定义文字内容;3、通过设置“user-select: none;”属性来设置文本不可选中即可。 本文操作环境:windows7系统、HTML5&&CSS3版、Dell G3电脑。 怎么设置css文本不可选中?…

    2025年12月24日
    000
  • css怎么写六边形

    css写六边形的方法:1、把正六边形分成三部分,然后设置before部分,p部分和after部分;2、把正六边形分成三个宽高相同的p,然后使用定位以及css3 transform:rotate分别向左右旋转60deg形成正六边形即可。 本文操作环境:windows7系统、HTML5&&amp…

    2025年12月24日 好文分享
    000
  • css如何让字改变透明度

    css让字改变透明度的方法:1、使用opacity属性,给文字元素添加“opacity:透明度值;”样式即可;2、使用rgba()函数,给文字元素添加“color:rgba(red, green, blue, 透明度值);”样式即可。 本教程操作环境:windows7系统、CSS3&&amp…

    2025年12月24日
    000
  • css隐藏元素的方式有哪些

    方式:1、设置“display:none”语句;2、设置“visibility:hidden”语句;3、设置“opacity:0”语句;4、设置盒模型属性为0;5、利用“position:absolute;top:-9999px;”语句。 本教程操作环境:windows7系统、CSS3&&a…

    2025年12月24日
    000
  • css中如何设置元素宽度

    设置方法:1、使用width属性设置宽度,语法“width:宽度值;”;2、使用min-width属性设置最小宽度,语法“min-width:宽度值;”;3、使用max-width属性设置最大宽度,语法“max-width:宽度值;”。 本教程操作环境:windows7系统、CSS3&&am…

    2025年12月24日 好文分享
    000
  • 手把手教你使用css制作表格边框设置效果(附代码)

    之前的文章《一招教你使用css3制作按钮添加动态效果(代码分享)》中,给大家介绍了怎么使用css3制作按钮添加动态效果。下面本篇文章给大家介绍怎么使用css制作表格边框设置效果,我们一起看看怎么做。 网页中常常有这样的表格布局边框,给大家分享一下看效果图看完效果,我们来研究一下是怎么实现呢,给大家用…

    2025年12月24日 好文分享
    000
  • 详解CSS中的伪元素::before和::after

    本篇文章带大家了解一下css中的::before和::after伪元素,看看它们的应用,希望对大家有所帮助! 本文从最简单的开始,解释如何理解和使用::before和::after。然后再在实际使用场景中去应用它。 ::before和::after是什么? ::before和::after可以添加到…

    2025年12月24日 好文分享
    000
  • 新手篇:如何用css制作图片文字排版(代码分享)

    之前的文章《手把手教你使用css制作表格边框设置效果(附代码)》中,给大家介绍了怎么使用css制作表格边框设置效果。下面本篇文章给大家介绍如何用css制作图片文字排版的方法,我们一起看看怎么做。 网页中常常有这样的CSS图片文字排版,给大家分享一下看效果图看完效果,我们来研究一下是怎么实现呢,给大家…

    2025年12月24日
    000
  • 中秋献礼,分享一个CSS日地月公转动画效果!

    中秋节快到了,下面本篇文章给大家分享一个纯css实现的日地月公转动画效果,打开快来学习一下! 为了这次掘金的中秋活动,我也算是苦思冥想了两天,终于想到了一个在掘金没见人做过的东西(应该没做过吧,我也不知道)—— 用 HTML+CSS 模拟日地月的公转。【相关推荐:《css视频教程》】 我们都知道中秋…

    2025年12月24日
    000
  • 手把手教你使用CSS制作逼真的水波纹效果(附代码)

    之前的文章《新手篇:如何用css制作图片文字排版(代码分享)》中,给大家介绍了如何用css制作图片文字排版。下面本篇文章给大家介绍怎么使用CSS实现逼真的水波纹点击效果,我们一起看怎么做。 网页中常常有这样的CSS水波纹的效果,给大家分享一下看效果图看完效果,我们来研究一下是怎么实现呢,给大家用于讲…

    2025年12月24日 好文分享
    000
  • 一文讲解CSS制作动画常用技巧(收藏)

    之前的文章《你值得了解的JS高级技巧(总结)》中,给大家了解了JS高级技巧。下面本篇文章给大家了解CSS制作动画常用技巧,我们一起看看怎么做。 transition CSS 中有一个transition属性,能够监听某个 CSS 属性的变化,通过属性变化的控制,实现简单的动画效果: transiti…

    2025年12月24日
    000
  • 深入浅出解析css字体图标的制作和使用(代码分享)

    之前的文章《一文讲解CSS制作动画常用技巧(收藏)》中,给大家了解了CSS制作动画常用技巧。下面本篇文章给大家了解css字体图标的制作和使用,伙伴们过来看看一下。 css字体图标的制作和使用 在项目开发的过程中,我们会经常用到一些图标。但是我们在使用这些图标时,往往会遇到失真的情况,而且图片数量很多…

    2025年12月24日 好文分享
    000
  • 教你用CSS绘制一个带有渐变边框的圆!

    在上一篇《用html/css制作有趣的动态波浪形文本行》中给大家介绍了如何用用html/css制作动态波浪形文本行,感兴趣的朋友可以去了解一下~ 本文将继续给大家介绍怎么用css实现一个带有渐变边框的圆。 首先我给大家简单说一下实现思路:我将创建两个 div,一个是类名为outer_circle 的…

    2025年12月24日
    000
  • 如何使用CSS动态调整旋转半径?

    在之前的文章《教你用css绘制一个带有渐变边框的圆!》中给大家介绍了如何使用css绘制一个带有渐变边框的圆,感兴趣的朋友可以去了解一下~ 那么本文的重点内容则是教大家如何使用css调整旋转半径。 在CSS中,我们可以使用CSS自定义属性(变量)调整旋转半径的大小。现在Mozilla、谷歌、Opera…

    2025年12月24日
    000
  • 利用css制作有趣的文字摆动动画特效

    在之前的文章《超实用!利用css3将两个图片叠加在一起显示》中,我们分享了两种利用css3将两个图片叠加融合在一起显示的特效。这次我们给大家介绍一下利用css如何制作文字摆动动画特效,感兴趣的可以学习了解一下~ 文本文字是网页中最常见的一种组成部分,给文字添加动画效果可以让网页更加吸引人,今天就来给…

    2025年12月24日 好文分享
    000
  • 使用CSS快速更改PNG图像的颜色(两种方法)

    在上一篇《如何用html和css制作玻璃/模糊效果?》文章中给大家介绍了用html和css制作玻璃/模糊效果的方法,感兴趣的朋友可以阅读了解一下~ 本文将给大家介绍如何使用CSS快速更改PNG图像的颜色,这也是日常开发中比较常见一个效果实现方法。 首先大家可以先下载本文中展示的png图片素材,下载地…

    2025年12月24日
    000
  • 炫酷!CSS创建响应式堆叠卡片悬停效果

    在上一篇《使用css快速更改png图像的颜色(两种方法)》中给大家介绍了怎么使用css快速更改png图像的颜色,感兴趣的朋友可以去看看~ 本文将给大家介绍一种炫酷的效果,就是用CSS创建响应式堆叠卡片悬停效果。到底是什么样的效果呢?我们继续往下看! 在开始之前,我先介绍一下实现的整体大致思路:首先我…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信