CSS圆角大杀器,使用滤镜构建圆角及波浪效果

简介: CSS圆角大杀器,使用滤镜构建圆角及波浪效果

1,border-radius实现圆角

通常我们加个 border-radius就可实现一个div盒子的圆角效果,如图下:

<div class="container">
  </div>
.container {
  width: 300px;
  height: 80px;
  margin: auto;
  border-radius: 80px;
  background-color: #b06161;
}

圆角效果:

2,filter: contrast() 配合 filter: blur() 实现圆角

两个滤镜,它们的作用分别是:

  • filter: blur(): 给图像设置高斯模糊效果。
  • filter: contrast(): 调整图像的对比度。

先看看之前的一个例子:

代码:

<div class="g-container">
      <div class="g-content">
          <div class="g-filter"></div>
      </div>
  </div>
.g-container {
    position: relative;
    width: 300px;
    height: 100px;
    padding-top: 100px;
    padding-bottom: 100px;
    margin: auto;
}
.g-content {
    height: 100px;
}
.g-filter {
    height: 100px;
    background: radial-gradient(circle at 50% -10px, transparent 0, transparent 39px, #d9363e 40px, #000);
}

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

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

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

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

.g-container {
    position: relative;
    width: 300px;
    height: 100px;
    padding-top: 100px;
    padding-bottom: 100px;
    margin: auto;
}
.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 39px, #d9363e 40px, #d9363e);
}

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

我们得到了这样一个效果:

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

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

能将锐利的直角转化成圆角。我们尝试一下:

<!-- 实现波浪 -->
 <div class="b-container">
     <div class="b-inner"></div>
 </div>
.b-container {
    position: relative;
    margin: auto;
    width: 500px;
    height: 200px;
    padding-top: 100px;
    filter: contrast(20);
    background-color: #fff;
    overflow: hidden;
}
.b-inner {
    position: relative;
    width: 1000px;
    height: 200px;
    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #00f 21px, #00f 40px);
    background-size: 80px 100%;
    filter: blur(10px)
}

效果:

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

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

.b-container {
    position: relative;
    margin: auto;
    width: 500px;
    height: 200px;
    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;
    }
}
.b-inner {
    position: relative;
    width: 1000px;
    height: 200px;
    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #00f 21px, #00f 40px);
    background-size: 80px 100%;
    filter: blur(5px)
}

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

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

.b-container {
    position: relative;
    margin: auto;
    width: 500px;
    height: 200px;
    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;
    }
}
.b-inner {
    position: relative;
    width: 1000px;
    height: 200px;
    background: radial-gradient(circle at 20px 0, transparent, transparent 20px, #00f 21px, #00f 40px);
    background-size: 80px 100%;
    filter: blur(5px);
    animation: move1 1s infinite linear;
}
@keyframes move1 {
    100% {
        transform: translate(-80px, 0);
    }
}

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

目录
相关文章
|
2月前
|
前端开发 架构师 容器
CSS Flexbox与Grid:构建响应式布局的艺术
本文介绍了Flex弹性布局和Grid网格布局。Flex布局中,`display: flex`开启布局,`flex-direction`定义主轴方向,`flex-wrap`控制换行,`justify-content`和`align-items`分别调整主轴和交叉轴对齐。Grid布局中,`display: grid`开启布局,`grid-template-columns/rows`定义网格轨道,`grid-gap`设置间距。两者结合可创建复杂响应式布局。选择Flexbox处理一维布局,Grid则适合二维布局。
33 0
|
10天前
|
编解码 前端开发 容器
CSS Flex布局实战案例:构建响应式卡片组件
【7月更文挑战第17天】通过上述步骤,我们成功地使用CSS Flex布局构建了一个响应式的卡片组件。Flexbox不仅简化了布局代码,还让我们能够轻松实现复杂的布局效果,如响应式设计。在实战中,掌握Flexbox将大大提高前端开发的效率和网页布局的质量。希望这个案例能够帮助你更好地理解和应用Flexbox布局。
|
25天前
|
前端开发
css 鼠标悬浮时,下划线变成会动的波浪线
css 鼠标悬浮时,下划线变成会动的波浪线
7 1
|
25天前
|
前端开发
CSS特效-超链接动感波浪线
CSS特效-超链接动感波浪线
12 0
|
2月前
|
存储 移动开发 前端开发
使用HTML5和CSS3构建现代网页:技术详解与实践
【5月更文挑战第28天】本文详细介绍了使用HTML5和CSS3构建现代网页的技术与实践。HTML5新增语义化标签、多媒体支持、本地存储和表单验证等功能,提升了网页开发效率和用户体验。CSS3则带来了更多选择器、盒模型改进、背景与边框样式以及动画过渡效果,使网页设计更具视觉冲击力。通过实例展示了如何结合两者创建结构清晰、交互丰富、响应式的现代网页。
|
1月前
|
前端开发
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影二
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影二
26 0
|
1月前
|
前端开发 容器
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影(一)
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影一
36 0
|
2月前
|
前端开发 测试技术 定位技术
【专栏:HTML 与 CSS 实战项目篇】构建一个企业级网站:HTML 与 CSS 实战
【4月更文挑战第30天】本文介绍了使用HTML和CSS构建企业级网站的实战步骤,包括项目概述、页面结构设计、HTML结构搭建、CSS样式设计、具体页面实现、优化与提升。通过合理布局、美观样式和响应式设计,创建现代、简洁的网站,包含主页、关于我们、产品展示、新闻动态和联系我们等页面。优化图片和代码,确保性能,助力企业在数字时代树立良好形象并提升沟通效率。
|
2月前
|
前端开发 搜索推荐 SEO
【专栏:HTML 与 CSS 实践篇】使用 HTML 与 CSS 构建个人博客网站
【4月更文挑战第30天】本文介绍了使用HTML和CSS构建个性化个人博客网站的步骤。首先,规划设计网站主题、风格和结构;接着,利用HTML搭建首页、文章列表页和文章详情页的结构;然后,通过CSS设计整体风格、布局和交互效果;填充内容并进行SEO优化;最后,通过实际案例展示HTML和CSS的应用。构建博客网站不仅是展示自我和分享知识的平台,也是提升技能和创意实践的好机会。
|
2月前
|
前端开发 算法
前端 CSS 经典:filter 滤镜
前端 CSS 经典:filter 滤镜
32 0