聊聊怎么使用CSS滤镜实现圆角及波浪效果

怎么利用css实现圆角及波浪效果?下面本篇文章带大家了解一下怎么巧用css滤镜构建圆角及波浪效果,希望对大家有所帮助!

聊聊怎么使用CSS滤镜实现圆角及波浪效果

本文,将另辟蹊径,介绍一种使用滤镜去构建圆角的独特方式。【推荐学习:css视频教程】

首先,我们来看这样一个图形:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

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

一个矩形,没什么特别的,代码如下:

div {    width: 200px;    height: 40px;    background-color: #000;}

如果,我们现在需要给这个矩形的两端加上圆角,像是这样,该怎么做呢:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

So easy,不过就是加个 border-radius 而已:

div {    width: 200px;    height: 40px;  + border-radius: 40px;    background-color: #000;}

好,那如果,不再是直线,而是一条曲线,希望曲线两端,带有圆角,像是这样,又该怎么办呢:

image

到这,基本上触及了传统 CSS 的天花板,想通过一个属性搞定这个效果是不太可能了。

当然,有这样一种方式,通过首尾两端,利用两个伪元素,实现两个圆形,叠加上去:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

emm,这也是一个可行的方案,主要是定位会稍微有点点麻烦。那么除了这个方式以及直接使用 SVG 外,还有没有其他方法能够实现带圆角的曲线?

有!在 CSS 中,我们还可以通过 filter: contrast() 配合 filter: blur() 这对组合来实现这个图形。

filter: contrast() 配合 filter: blur() 的奇妙化学作用

在 神奇的滤镜!巧妙实现内凹的平滑圆角 一文中,其实已经介绍过这个组合的另类用法。

经常阅读我的文章的小伙伴,对 filter: contrast() 配合 filter: blur() 的组合一定不陌生,上经典的一张图:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

单独将两个滤镜拿出来,它们的作用分别是:

filter: blur(): 给图像设置高斯模糊效果。

filter: contrast(): 调整图像的对比度。

但是,当他们“合体”的时候,产生了奇妙的融合现象。

仔细看两圆相交的过程,在边与边接触的时候,会产生一种边界融合的效果,通过对比度滤镜把高斯模糊的模糊边缘给干掉,利用高斯模糊实现融合效果。

当然,重点来了,blur 与 contrast 滤镜的组合不仅能用于这种融合效果,其特殊的性质使得它们的组合可以将直角变成圆角!

先看看之前的一个例子:

首先,我们只需要实现这样一个图形:

.g-container {    position: relative;    width: 300px;    height: 100px;        .g-content {        height: 100px;                .g-filter {            height: 100px;            background: radial-gradient(circle at 50% -10px, transparent 0, transparent 39px, #000 40px, #000);        }    }}

得到这样一个简单的图形:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

看到这里,肯定会疑惑,为什么这个图形需要用 3 层 div 嵌套的方式?不是一个 div 就足够了吗?

是因为我们又要运用 filter: contrast()filter: blur() 这对神奇的组合。

我们简单改造一下上述代码,仔细观察和上述 CSS 的异同:

.g-container {    position: relative;    width: 300px;    height: 100px;        .g-content {        height: 100px;        filter: contrast(20);        background-color: white;        overflow: hidden;                .g-filter {            filter: blur(10px);            height: 100px;            background: radial-gradient(circle at 50% -10px, transparent 0, transparent 29px, #000 40px, #000);        }    }}

我们给 .g-content 添加了 filter: contrast(20)background-color: white,给 .g-filter 添加了 filter: blur(10px)

神奇的事情发生了,我们得到了这样一个效果:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

通过对比度滤镜把高斯模糊的模糊边缘给干掉,将原本的直角,变成了圆角,Amazing。

通过一个 Gif 图更直观的感受:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

完整的代码你可以戳这里:CodePen Demo – Smooth concave rounded corners By filterhttps://codepen.io/Chokcoco/pen/JjroBPo

通过滤镜实现圆角圆弧

到这里,你应该知道如何通过直角圆弧得到圆角圆弧了。就是借助 filter: contrast() 配合 filter: blur() 的组合。

直接上代码:

div {    position: relative;    width: 250px;    height: 250px;    filter: contrast(20);    background-color: #fff;    overflow: hidden;}div::before {    content: "";    position: absolute;    top: 0;    left: 0;    bottom: 0;    right: 0;    filter: blur(7px);    border: 25px solid transparent;    border-bottom: 25px solid #000;    border-radius: 50%;}

效果如下:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

通过 Gif 看,更加直观:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

CodePen Demo — Arc with rounded corners

https://codepen.io/Chokcoco/pen/bGveoPY

使用 filter: contrast() 配合 filter: blur() 实现波浪效果

好了,有了上面的铺垫,我们再来看一个有意思的。使用 filter: contrast() 配合 filter: blur() 实现波浪效果。

在之前,我们如果想使用纯 CSS,实现下述的波浪效果,是非常的困难的:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

这种波浪效果,通常会使用在优惠券等切图中:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

在之前,我们是怎么去做的呢?如果不切图,使用纯 CSS 的话,需要使用两层渐变进行叠加,大概是这样,感受一下:

bgg2

其代码也比较复杂,需要不断的调试渐变,使两个径向渐变吻合:

div {    position: relative;    width: 400px;    height: 160px;    background: linear-gradient(90deg, #945700 0%, #f49714 100%);        &::before,    &::after {        content: "";        position: absolute;        top: 0;        right: 0;        bottom :0;    }    &::before {        width: 10px;        background-image: radial-gradient(circle at -5px 10px, transparent 12px, #fff 13px, #fff 0px);        background-size: 20px 20px;        background-position: 0 15px;    }    &::after {        width: 15px;        background-image: radial-gradient(circle at 15px 10px, #fff 12px, transparent 13px, transparent 0px);        background-size: 20px 40px;        background-position: 0 15px;    }}

那么,如果使用 filter: contrast() 配合 filter: blur() 的话,整个过程将会变得非常简单。

我们只需要实现这样一个图形:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

这个图形使用渐变是容易得到的:

div {    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #000 21px, #000 40px);    background-size: 80px 100%;}

按照上文介绍的技巧,只需要应用上 filter: contrast() 配合 filter: blur(),就能将锐利的直角转化成圆角。我们尝试一下:

.g-container {    position: relative;    margin: auto;    height: 200px;    padding-top: 100px;    filter: contrast(20);    background-color: #fff;    overflow: hidden;}.g-inner {    position: relative;    height: 200px;    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #000 21px, #000 40px);    background-size: 80px 100%;    filter: blur(10px)}

可以写在 1 个 DIV 里面(通过元素和它的伪元素构造父子关系),也可以用 2 个,都可以,问题不大。

得到如下所示的波浪图形:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

我们希望它波浪的地方的确是波了,但是我们不希望的地方,它也变成了圆角:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

这是 filter: blur() 的一个问题,好在,我们是可以使用 backdrop-filter() 去规避掉这个问题的,我们简单改造下代码:

.g-container {    position: relative;    width: 380px;    padding-top: 100px;    filter: contrast(20);    background-color: #fff;    overflow: hidden;        &::before {        content: "";        position: absolute;        top: 0;        left: 0;        bottom: 0;        right: 0;        backdrop-filter: blur(10px);        z-index: 1;    }}.g-inner {    position: relative;    width: 380px;    height: 100px;    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #000 21px, #000 40px);    background-size: 80px 100%;}

这样,我们就实现了一份完美的波浪效果:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

部分同学可能对上面的 padding-top 100px 有所疑惑,这个也是目前我所发现的一个 BUG,暂未解决,不影响使用,你可以尝试将 padding-top: 100px 替换成 height: 100px。

基于这种方式实现的波浪效果,我们甚至可以给它加上动画,让他动起来,也非常的好做,简单改造下代码:

.g-inner {    position: relative;  - width: 380px;  + width: 480px;    height: 100px;    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #000 21px, #000 40px);    background-size: 80px 100%;  + animation: move 1s infinite linear; }@keyframes move {    100% {        transform: translate(-80px, 0);    }}

通过一个简单的位移动画,并且使之首尾帧一致,看上去就是连续的:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

完整的代码,你可以戳这里:CodePen Demo — Pure CSS Wave

https://codepen.io/Chokcoco/pen/PoRzeav

SVG 滤镜,让使用更简单

这就结束了吗?没有!上述双滤镜的组合固然强大,确实还是有一点麻烦。

在强大的群友的补充下,再补充一种 SVG 滤镜的方案。这里,对于大部分场景,我们可以借助 SVG 滤镜,在 CSS 中一行引入,实现同样的功能。

看这样一个 DEMO,我们有这样一个三角形:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

我们想通过它得到一个圆角三角形:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

借助 SVG 滤镜,其实也可以快速达成,省去了上面还需要叠加一个 filter: contrast() 的烦恼:

div {        border: 60px solid transparent;        border-left: 120px solid #f48;        filter: url(#blur);}

效果如下:

聊聊怎么使用CSS滤镜实现圆角及波浪效果

是的,利用 filter: url(xxx) 可以快速引入一个定义好的 SVG 滤镜。也可以这样,直接嵌入到 URL 中:

div {        border: 60px solid transparent;        border-left: 120px solid #f48;        filter: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='blur' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='10'/%3E%3CfeComponentTransfer%3E%3CfeFuncA type='table' tableValues='0 0 10'/%3E%3C/feComponentTransfer%3E%3C/filter%3E%3C/svg%3E#blur");}

完整的代码,你可以戳这里:CodePen Demo — triangle with rounded corners and shadow

https://codepen.io/Chokcoco/pen/QWmEXPY

总结一下

本文介绍了一种使用 filter: contrast() 配合 filter: blur() 的方式,将直角图形变为圆角图形的方式,在一些特定的场景下,可能有着妙用。同时,在很多场景下,可以使用 SVG 滤镜简化操作。

不过,这种方式也有几个小缺陷:

使用了 filter: contrast() 之后,图形的尺寸可能相对而言会缩小一点点,要达到固定所需尺寸的话,要一定的调试

此方式产生的图形,毕竟经过了一次 filter: blur(),放大来看图形会有一定的锯齿,可以通过调整 contrast 和 blur 的大小尽可能的去除,但是没法完全去掉

当然,我觉得这两个小缺点瑕不掩瑜,在特定的场景下,此方式还是有一定的用武之地的。

原文地址:https://segmentfault.com/a/1190000042217200

作者:chokcoco

(学习视频分享:web前端入门)

以上就是聊聊怎么使用CSS滤镜实现圆角及波浪效果的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 08:29:52
下一篇 2025年12月24日 08:30:08

相关推荐

  • 聊聊CSS中如何利用柏林噪声绘制炫酷图形!

    什么是白噪声?css中如何利用柏林噪声绘制炫酷图形?下面本篇文章给大家介绍一下利用噪声构建美妙的 css 图形的方法,希望对大家有所帮助! 在平时,我非常喜欢利用 CSS 去构建一些有意思的图形。【推荐学习:css视频教程】 我们首先来看一个简单的例子。首先,假设我们实现一个 10×10 …

    2025年12月24日 好文分享
    000
  • 聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

    如何使用css实现更加立体的阴影效果?下面本篇文章给大家聊聊css 阴影进阶,介绍一下巧用使用css实现立体阴影效果的方法,希望对大家有所帮助! CSS 阴影的存在,让物体看上去更加有型立体。【推荐学习:css视频教程】 然而,在最简单的阴影使用之上,我们可以实现更多有意思且更加立体的阴影效果。 C…

    2025年12月24日 好文分享
    000
  • CSS宽度、高度属性详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于设置元素高度和宽度属性的相关问题,height和width属性用于设置元素的高度和宽度,height和width属性不包括内边距、边框或外边距。下面一起来看一下,希望对大家有帮助。. (学习视频分享:css视频教程、html视频教程) CS…

    2025年12月24日 好文分享
    000
  • CSS定位属性之固定fixed属性详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css定位属性中fixed 定位的相关问题,fixed定位表示元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) CSS定位属性之固定…

    2025年12月24日
    000
  • CSS定位属性之相对定位relative属性详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css定位属性中relative相对定位的相关问题,相对定位是元素在移动位置的时候,是相对于它原来的位置来说的,设置为相对定位的元素框会偏移某个距离,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) …

    2025年12月24日 好文分享
    000
  • CSS相对定位和绝对定位的关系解析

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css的绝对定位和相对定位的相关问题,相对定位是元素在移动位置的时候,是相对于它原来的位置来说的,绝对定位是元素在移动位置的时候,是相对于它的祖先元素来说的,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频…

    2025年12月24日 好文分享
    000
  • css定位详解–相对定位、绝对定位和固定定位

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css的相对定位、绝对定位和固定定位的相关问题,css中的position属性,position有四个值:relative(相对定位)、absolute(绝对定位)、static(静态定位)和fixed(固定定位),通过top、left、b…

    2025年12月24日 好文分享
    000
  • 详解CSS中的基本选择器,并聊聊选择器优先级

    本篇文章带大家了解一下css的5种基本选择器:元素选择器、类选择器、id选择器、通配符选择器、属性选择器,并聊聊这基本选择器的优先级,希望对大家有所帮助! 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 什么是选择器 CSS选择器 的作用是按照C…

    2025年12月24日 好文分享
    000
  • CSS布局属性控制元素的隐藏与显示

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于元素显示与隐藏相关属性的问题,包括了display、visibility、overflow和opacity,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) CSS中提供了一些可以使元素显示与隐藏的属…

    2025年12月24日 好文分享
    000
  • CSS利用float属性控制div左右浮动详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了float属性控制div左右浮动的相关问题,浮动,顾名思义,就是漂浮的意思。指的是一个元素脱离文档流,悬浮在父元素之上的现象,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) 一、什么是浮动? 浮动,顾名…

    2025年12月24日 好文分享
    000
  • web前端笔试题库之CSS篇

    之前的文章《web前端笔试题库之html篇》中,我们分享了一些关于html的前端面试题。下面本篇文章就接着上一篇,分享css部分的笔试题(附答案),大家快看看能答对几个! 1、Q: CSS 属性是否区分大小写? “` ul { MaRGin: 10px; } “` A: 不区分。 HTML,CS…

    2025年12月24日
    000
  • 手把手带你使用CSS绘制一个可爱卡通狮子动画

    怎么利用css绘制狮子动画?下面本篇文章手把手带大家一步步利用css绘制一个可爱卡通狮子动画,希望对大家有所帮助。 本期我们要使用纯css来绘制出一个乖巧可爱的卡通狮子,通过这个栗子我们可以熟悉更多的css绘制技巧,相信在以后的界面绘制任务中更加得心应手。【推荐学习:css视频教程】 演示 正文 基…

    2025年12月24日 好文分享
    000
  • 快看!10个不错的CSS实用小技巧(分享)

    本篇文章给大家分享10个不错的css实用小技巧,让前端开发更轻松,快来收藏吧,希望对大家有所帮助! CSS 大约有两百个属性。很多属性都是相互关联的,理清楚每一个属性细节是不可能的。所以,本文分享一些有用的 CSS 小技巧,方便开发者和设计师参考。【推荐学习:css视频教程】 1、 打字效果 立即学…

    2025年12月24日 好文分享
    000
  • 原来利用纯CSS也能实现文字轮播与图片轮播!

    怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯css也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助! 今天,分享一个实际业务中能够用得上的动画技巧。【推荐学习:css视频教程】 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • 一文了解CSS3中的新属性object-view-box

    本篇文章带大家一起深入了解一下css3中的新特性object-view-box属性,聊聊新属性的作用和使用方法,希望对大家有所帮助! 在开发时,一直希望有一种原生的CSS方式来裁剪图片,并将其定位在我需要的任何方向。这可以通过使用一个额外的HTML元素和不同的CSS属性来实现,后面解释。 在这篇文章…

    2025年12月24日 好文分享
    000
  • CSS变量是怎么工作的?如何使用内联CSS变量进行布局?

    本篇文章带大家了解一下css变量,聊聊css变量是怎么工作的,并介绍一下如何使用内联css变量,以提高灵巧布局效率,希望对大家有所帮助! 有些情况下,我需要用一种简单的方法来创建网格布局。 例如,每次我改变主意时,在不修改CSS的情况下快速画出五列网格。 在本文中,我们一起探索一些用例,并思考如果实…

    2025年12月24日 好文分享
    000
  • 深入探究CSS鼠标指针交互效果

    今天,来实现这样一个有意思的交互效果,通过这个交换效果来聊聊前端鼠标指针交互,希望对大家有所帮助! 将原本的鼠标指针样式,修改成自己想要的效果,并且添加上一些特殊的交互效果。【推荐学习:css视频教程】 修改鼠标样式 首先,第一个问题,我们可以看到,上图中,鼠标指针的样式被修改成了一个圆点: 立即学…

    2025年12月24日 好文分享
    000
  • CSS3动画实战之:超酷炫的粘性气泡效果

    本篇文章带大家聊聊css3动画,看看怎么使用纯 css 实现超酷炫的粘性气泡效果,希望对大家有所帮助! 最近,在 CodePen 上看到这样一个非常有意思的效果: 这个效果的核心难点在于气泡的一种特殊融合效果。【推荐学习:css视频教程】 立即学习“前端免费学习笔记(深入)”; 其源代码在:Code…

    2025年12月24日 好文分享
    000
  • 什么是BFC?深入了解BFC,聊聊作用

    什么是bfc?下面本篇文章带大家了解一下bfc,并聊聊bfc的作用。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 之前在面试字节的时候,面试官问了我有了解BFC吗,我当时其实有看很多文章,但是总是记不住,感觉每个文章讲的都差不多,然后面试时候也没答出来,但是在听了王红元老师讲解的…

    2025年12月24日 好文分享
    000
  • 利用纯CSS如何在滚动时自动添加头部阴影

    利用纯css如何在滚动时自动添加头部阴影?下面本篇文章给大家介绍一下css层级小技巧!看看在滚动时自动添加头部阴影的方法,希望对大家有所帮助! 在网页中,经常会用阴影来突出层级关系,特别是顶部导航,但有时候设计觉得没必要一开始就显示阴影,只有滚动后才出现。比如下面这个例子,注意观察头部阴影。【推荐学…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信