返回顶部
首页 > 资讯 > 精选 >CSS3+SVG滤镜如何实现不规则边框
  • 667
分享到

CSS3+SVG滤镜如何实现不规则边框

2023-06-14 09:06:20 667人浏览 薄情痞子
摘要

这篇文章主要介绍css3+SVG滤镜如何实现不规则边框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!需求背景,给不规则图形添加边框在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些:使用纯 CSS,搭

这篇文章主要介绍css3+SVG滤镜如何实现不规则边框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

需求背景,给不规则图形添加边框


在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些:

CSS3+SVG滤镜如何实现不规则边框

使用纯 CSS,搭配一些技巧,是可以制作出上面的图形的,当然这只是需求的第一步。

紧接着,可能会有要给上述图形添加边框的诉求,这个时候,CSS 就很难办到了。

尝试使用 drop-shadow 添加边框


第一种方法,我们可以尝试使用 drop-shadow,给不规则的图形,添加一个外阴影。

我们以一个箭头图形为例使用 CSS 简单实现它的其中一种方式如下:

<div class="arrow-button"></div>
.arrow-button {    position: relative;    width: 180px;    height: 64px;    background: #f49714;    &::after {        content: "";        position: absolute;        width: 32px;        height: 64px;        top: 0;        right: -32px;        background:             linear-gradient(-45deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%),            linear-gradient(-135deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%);        background-size: 32px 32px;        background-repeat: no-repeat;        background-position: 0 bottom, 0 top;    }}

CSS3+SVG滤镜如何实现不规则边框

我们通过给 .arrow-button 添加一个 drop-shadow,可以实现给不规则图形添加一个阴影,效果如下:

.arrow-button {    ...    filter: drop-shadow(0px 0px 2px #000);    ...}

CSS3+SVG滤镜如何实现不规则边框

drop-shadow  方案的局限性

使用 drop-shadow  方案的局限性在于,drop-shadow 只能对不规则图形生成阴影,无法生成不带模糊的边框效果。

上述图形添加 drop-shadow 的效果如下,与我们想要的实体不带模糊的边框还是差了一点:

CSS3+SVG滤镜如何实现不规则边框

使用 SVG feMorphology 滤镜添加边框


我们还可以换个思路,复制一个原图形,再将其稍微放大一点点改变为边框的颜色,然后两个图形叠加在一起,就能够生成一个带边框的不规则图形了。

CSS 中也有能够放大元素的能力 transfORM: scale(),但是本身实现一个原图形的代码可能已经非常复杂了,再叠加一个可能会显得不太优雅,我们得另辟蹊径,寻找其他类似的实现方案。

这里,我们尝试使用 SVG的 feMorphology 滤镜来实现给不规则图形添加边框。

简单介绍下 feMorphology 滤镜

feMorphology 滤镜

feMorphology 为形态滤镜,它的输入源通常是图形的 alpha 通道,用来它的两个操作可以使源图形腐蚀(变薄)或扩张(加粗)。

使用属性 operator 确定是要腐蚀效果还是扩张效果。使用属性 radius 表示效果的程度,可以理解为笔触的大小。

  • operator:erode 腐蚀模式,dilate 为扩张模式,默认为 erode

  • radius:笔触的大小,接受一个数字,表示该模式下的效果程度,默认为 0

我们将这个滤镜简单的应用到文字上看看效果:

<div class="g-text">    <p>Normal Text</p>    <p class="dilate">Normal Text</p>    <p class="erode">Normal Text</p></div><svg width="0" height="0">    <filter id="dilate">        <feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="3"></feMorphology>    </filter>    <filter id="erode">        <feMorphology in="SourceAlpha" result="ERODE" operator="erode" radius="1"></feMorphology>    </filter></svg>
p {    font-size: 64px;}.dilate {    filter: url(#dilate);}.erode {    filter: url(#erode);}

效果如下:最左边的是正常文字,中间的是扩张的模式,右边的是腐蚀模式,看看效果,非常好理解:

CSS3+SVG滤镜如何实现不规则边框

借用 feMorphology 的扩张能力给不规则图形添加边框

利用 feMorphology 的扩张能力,我们可以提前准备好一个 SVG feMorphology 滤镜,其作用就是上述所说的:

复制一个原图形,再将其稍微放大一点点改变为边框的颜色,然后两个图形叠加在一起,就能够生成一个带边框的不规则图形了

并且 SVG 滤镜可以非常简单的通过 CSS Filter 的 url 模式引入到各个不同的图形当中去,复用性非常的高。

该滤镜的简单代码如下:

<svg width="0" height="0">    <filter id="outline">        <feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology>        <feMerge>            <feMergenode in="DILATED" />            <feMergeNode in="SourceGraphic" />        </feMerge>    </filter></svg>

简单浅析一下这段 SVG 滤镜代码:

  • <feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology> 将原图的不透明部分作为输入,采用了 dilate 扩张模式且程度为 radius="1",生成了一个比原图大 1px 的黑色图块

  • 使用 feMerge 将黑色图块和原图叠加在一起

我们还是给上述的 .arrow-button 添加一个 CSS filter filter: url(#outline),引入我们创建的 SVG 滤镜:

.arrow-button {    ...    filter: url(#outline);    ...}
url 是 CSS 滤镜属性的关键字之一,url 模式是 CSS 滤镜提供的能力之一,允许我们引入特定的 SVG 过滤器,这极大的增强 CSS 中滤镜的能力。

看看效果:

CSS3+SVG滤镜如何实现不规则边框

Wow,这下成功了,通过 feMorphology 滤镜,我们成功的实现了给不规则的图形添加了边框效果,我能可以通过控制滤镜中的 radius="1" 来控制边框的大小。

再将上述滤镜运用在各种不规则图形下看看效果:

CSS3+SVG滤镜如何实现不规则边框

效果还算可以,就是颜色是黑色的。如果我们希望边框的颜色是其他颜色,有没有办法呢?

辅以 feFloodfeComposite 改变边框颜色

通过 feFloodfeComposite 两个 SVG 滤镜,可以给生成的图块上不同的颜色,代码如下:

<svg width="0" height="0">    <filter id="outline">        <feMorphology in="SourceAlpha" result="DILATED" operator="dilate" radius="1"></feMorphology>        <feFlood flood-color="green" flood-opacity="1" result="flood"></feFlood>        <feComposite in="flood" in2="DILATED" operator="in" result="OUTLINE"></feComposite>        <feMerge>            <feMergeNode in="OUTLINE" />            <feMergeNode in="SourceGraphic" />        </feMerge>    </filter></svg>

通过 feFlood 中的 flood-color="green",即可控制生成的边框(图块)的颜色,这里设置为了绿色。应用到各个图形上的效果如下:

CSS3+SVG滤镜如何实现不规则边框

至此,我们实现了通过 SVG 滤镜实现对不规则图形添加不同颜色的边框。

完整的 DEMO,你可以戳这里:transparent 配合 SVG feMorphology 滤镜生成不规则边框

总结一下


简单的总结一下:

  • 使用 drop-shadow 可以实现给不规则图形添加阴影,但是无法实现给不规则图形添加实体不带模糊的边框

  • 使用 feMorphology SVG 滤镜可以实现给给不规则图形添加边框效果,通过控制 radius="1" 可以调节边框的大小

  • 使用 feMorphology 辅以 feFloodfeComposite 滤镜改变边框颜色

  • 通过 CSS Filter 的 url 模式,可以快速的将 SVG 滤镜引入 html 元素,例如 filter: url(#outline)

值得注意的是,由于图形高宽不是 1:1 的,并且 feMorphologydilate 模式也不会根据元素的高宽等比例的扩张,所以生成的边框是不一定在各处的均匀相等的,而 feMorphologyradius 属性可以传入两个值,使用空格分离,分别表示横向与纵向的扩张大小,实际使用的时候可以微调一下。

以上是“CSS3+SVG滤镜如何实现不规则边框”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: CSS3+SVG滤镜如何实现不规则边框

本文链接: https://lsjlt.com/news/269867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CSS3+SVG滤镜如何实现不规则边框
    这篇文章主要介绍CSS3+SVG滤镜如何实现不规则边框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!需求背景,给不规则图形添加边框在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些:使用纯 CSS,搭...
    99+
    2023-06-14
  • css3如何写出不规则五边形
    这篇文章主要介绍“css3如何写出不规则五边形”,在日常操作中,相信很多人在css3如何写出不规则五边形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css3如何写出不规则五...
    99+
    2024-04-02
  • 如何利用SVG和CSS3实现边框动画效果
    本篇内容主要讲解“如何利用SVG和CSS3实现边框动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何利用SVG和CSS3实现边框动画效果”吧!今天我们来...
    99+
    2024-04-02
  • css3如何实现花边边框
    这篇文章主要介绍“css3如何实现花边边框”,在日常操作中,相信很多人在css3如何实现花边边框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css3如何实现花边边框”的疑惑...
    99+
    2024-04-02
  • css3如何实现边框
    这篇文章将为大家详细讲解有关css3如何实现边框,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在CSS3中.边框多了4种新特性 1.Border-color(设置边框颜色...
    99+
    2024-04-02
  • css3如何实现边框凸起
    小编给大家分享一下css3如何实现边框凸起,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在css中...
    99+
    2024-04-02
  • css3如何实现圆角边框和边框阴影
    这篇文章主要讲解了“css3如何实现圆角边框和边框阴影”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3如何实现圆角边框和边框阴影”吧!border-radius向元素添加圆角边框,cs...
    99+
    2023-07-04
  • 如何使用CSS3实现SVG路径描边动画效果
    这篇文章将为大家详细讲解有关如何使用CSS3实现SVG路径描边动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。不依赖javascript,直接使用纯css实现 svg 的描边绘制动画效果,效果演示动...
    99+
    2023-06-08
  • SVG如何实现描边动画
    这篇文章给大家分享的是有关SVG如何实现描边动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:代码如下:<!DOCTYPE html> <h...
    99+
    2024-04-02
  • css3如何实现边框的圆角和阴影
    这篇文章主要介绍css3如何实现边框的圆角和阴影,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! css3中,可利用border-radius属性实现圆角,...
    99+
    2024-04-02
  • css3如何实现带边框的缺角矩形
    这篇文章主要为大家展示了“css3如何实现带边框的缺角矩形”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css3如何实现带边框的缺角矩形”这篇文章吧。 ...
    99+
    2024-04-02
  • css3如何实现三角形带边框效果
    这篇文章主要讲解了“css3如何实现三角形带边框效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3如何实现三角形带边框效果”吧! ...
    99+
    2024-04-02
  • CSS3 如何实现按钮边框动画功能
    本篇内容介绍了“CSS3 如何实现按钮边框动画功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先看效果:html<a hr...
    99+
    2023-06-08
  • 如何在CSS3中实现多样的边框效果
    今天就跟大家聊聊有关如何在CSS3中实现多样的边框效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现代码:<div>你能看到半透明的边框吗?</div>d...
    99+
    2023-06-08
  • css3如实现边框、背景、文本效果
    这篇文章主要介绍css3如实现边框、背景、文本效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、边框box-shadowbox-shadow: h-shadow v-shadow b...
    99+
    2023-06-08
  • css3如何实现过滤效果
    小编给大家分享一下css3如何实现过滤效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!上面的图片就是css3新特性的滤镜效果,...
    99+
    2024-04-02
  • OpenCV-Python如何实现怀旧滤镜与连环画滤镜
    这篇文章给大家分享的是有关OpenCV-Python如何实现怀旧滤镜与连环画滤镜的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。怀旧滤镜实现原理不管是荣耀华为手机还是其他的手机,我们都可以找到相机中的怀旧效果,这是...
    99+
    2023-06-15
  • canvas如何实现滤镜效果
    这篇文章给大家分享的是有关canvas如何实现滤镜效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下<!DOCTYPE html>  ...
    99+
    2024-04-02
  • CSS3如何实现文字描边
    小编给大家分享一下CSS3如何实现文字描边,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  问题    最近遇到一个需求,需要实现文字的描边效果,如下图  解决方...
    99+
    2023-06-08
  • 报表中如何实现不规则布局
    报表,我们习惯于认为主要用来呈现数据汇总、排序、分组对比的效果,一般都是“横平竖直”的效果,也就是我们常说的二维表格,最多也就是通过一些斜线、合并表示一些特殊的数据关系。事实上,报表还可以通过实行各种不规则的布局,来发挥更大的作用。首先,我...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作