有趣的!不规则边框生成方案
时间:2023-03-30 19:29:49
CSS
本文将介绍一个用SVG滤镜给各种不规则图形添加边框的技巧。本文完整DEMO可以点这里:透明和SVGfeMorphology滤镜生成不规则边框需求背景,给不规则图形添加边框在我们日常开发中,会遇到一些非矩形非圆形的图案,时间长了时间。类似如下:使用纯CSS,加上一些技巧,是可以做出上面的图形的,当然这只是第一步的要求。紧接着,可能会有要求给上面的图形加上边框。这时候CSS就很难做了。尝试使用阴影添加边框。第一种方法,我们可以尝试使用drop-shadow给不规则的图形添加外阴影。下面以一个箭头图形为例,使用CSS来简单实现一下。其中一种方式如下:
.arrow-button{position:relative;宽度:180px;高度:64px;背景:#f49714;&::之后{内容:“”;位置:绝对;宽度:32px;高度:64px;顶部:0;右:-32px;背景:线性渐变(-45deg,透明0,透明22px,#f4971422px,#f49714100%),线性渐变(-135deg,透明0,透明22px,#f4971422px,#f49714100%);背景大小:32px32px;背景重复:不重复;背景位置:0底部,0顶部;}}通过给.arrow-button加上一个drop-shadow,我们可以给不规则图形加上阴影,效果如下:.arrow-button{...filter:drop-shadow(0px0px2px#000);...}drop-shadow方案的局限性使用drop-shadow方案的局限性在于drop-shadow只能对不规则的图形产生阴影,不能产生无模糊的边框效果。上面的图形加了drop-shadow的效果如下,比我们想要的实体边框不模糊还是差了点:使用SVGfeMorphology滤镜加边框,我们也可以换个思路,复制一个原始图形,然后把它放大一点,把圆点改成边框的颜色,然后把两个图形叠加在一起,生成一个不规则的带边框的图形。CSS也有放大元素的能力transform:scale(),但是实现一个原始图形本身的代码可能已经很复杂了,再添加一个可能显得不够优雅,所以我们不得不另辟蹊径,寻找其他类似的实现。在这里,我们尝试使用SVG的feMorphology过滤器为不规则形状添加边框。如果你对SVG过滤器不是很了解,你可以简单地阅读我的这篇文章:有趣!强大的SVG滤镜简单介绍feMorphology滤镜feMorphology滤镜feMorphology是一个形态学滤镜,它的输入源通常是图形的alpha通道,它的两个操作可以使源图形腐蚀(细化)或膨胀(粗体)。使用属性运算符来确定是腐蚀还是膨胀效果。用属性radius来表示效果的程度,可以理解为描边的大小。operator:erodecorrosionmode,dilate为扩张模式,默认为eroderadius:strokesize,接受一个数字,表示在该模式下效果的程度,默认为0我们简单的给文字加上这个滤镜看看效果:
普通文本
普通文本普通文本