先上效果图

codepen: https://codepen.io/linghucq1/pen/zQjqZv?editors=1100

简单画一下原理

图中的波浪线 L 就是我们要的,它是沿着上下两排相切圆的切线画出来的,只要画出 A 段然后重复,就可以得到我们想要的波浪效果。

首先要解决怎么画圆的问题,这里就要用到 css3 radial-gradient 属性,不了解这个属性的可以看一下mdn或者10个demo示例学会CSS3 radial-gradient径向渐变。我们这里要做的,就是画出两种颜色的圆并让它们相切。

先搞一个装波浪的框

<div class="wave"></div>
复制代码
.wave {height: 100px;background-color: blue;margin-top: 100px;
}
复制代码

得到一个蓝色的长方形,现在我们在它的上边缘画一个圆。

.wave {height: 100px;background-color: blue;margin-top: 100px;position: relative;&::before {content: '';position: absolute;height: 100px;width: 100%;top: -50px;background: radial-gradient(50px circle, blue 50px, transparent)}
}
复制代码

用 background-size 让它重复

&::before {content: '';position: absolute;height: 100px;width: 100%;top: -50px;background: radial-gradient(50px circle, blue 50px, transparent) repeat-x;background-size: 100px;}
复制代码

这里已经可以看到雏形了,如果我们把间隔拉大然后在中间加入白色圆

  &::before {content: '';position: absolute;height: 100px;width: 100%;top: -50px;background: radial-gradient(50px circle at 50px 50px, #fff 50px, transparent), radial-gradient(50px circle at 150px 50px, blue 50px, transparent);background-size: 200px 100px;}
复制代码

一个圆圆的波浪就完成了,现在我们要做的,就是调整圆的位置。根据开始的手绘图,我们可以计算出上下圆圆心的水平和垂直距离。其中水平距离为圆的半径 R,垂直距离为 √3R 也就是 1.732R。而且我们只要画出一个周期的波段(A)然后重复就行了。

  &::before {@height: 50px * 1.732;content: '';position: absolute;height: 100px;width: 100%;top: -@height/2;background: radial-gradient(50px circle at 0 0, #f0f 50px, transparent), radial-gradient(50px circle at 50px @height, blue 50px, transparent), radial-gradient(50px circle at 100px 0, #f0f 50px, transparent);background-size: 100px 100px;background-repeat: no-repeat;}
复制代码

我们先把背景重复关掉来看单独的一段长什么样,

这里特意用了一个颜色作为区分,需要注意的是 top 的值为上下圆心垂直距离的一半。

把上面颜色改成白色就是一个波浪效果了。

现在再加一个平移动画和另一层波浪和半透明,就可以实现最开始的效果。

但是,如果你去尝试把 codepen 代码里面的 wave2 往上移,就会发现这个方案并不完美,目前还没有想到解决方案,不知道各位有什么好点子?

这里顺便安利一个 chrome 插件: web maker,可以实时预览 html css js 编辑效果,还可以在线保存之前的代码,没事的时候就鼓捣鼓捣,很好用。

转载于:https://juejin.im/post/5ce945e95188252a4f229454

用 radial-gradient 实现波浪效果相关推荐

  1. 纯 CSS 实现波浪效果!

    一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CAN ...

  2. android动态波浪效果,android贝塞尔曲线实现波浪效果

    本文实例为大家分享了android贝塞尔曲线实现波浪效果的具体代码,供大家参考,具体内容如下 因为手机录制gif不知道下什么软件好,所以暂时就先忽略效果图了 我在屏幕外多画了1.5个波浪,延伸至屏幕内 ...

  3. android波浪动画简书,Android贝塞尔曲线————波浪效果(大波浪)

    Hello大家好,很高兴又一次与大家见面,今天是农历丁酉鸡年(大年初四),现在跟大家拜年有点晚,算是拜晚年,祝大家晚年幸福. 这么快大伙都到了晚年了,Android贝塞尔曲线我也准备以一个大波浪来结束 ...

  4. html5制作波浪,技能get:用HTML5实现波浪效果

    rr Document .box{ width: 500px; height: 500px; margin:100px auto; background:hotpink; border-radius: ...

  5. android录音波浪动画_Android实现波浪效果 - WaveView

    效果图 先上效果图 screenshot.gif 实现 WaveView的属性 WaveView的属性 Wate Level(水位) - 波浪静止时水面距离底部的高度 Amplitude(振幅) - ...

  6. Cesium创建任意位置和形状的水纹波浪效果

    参考文章: https://www.jianshu.com/p/a3335efd7d1f 目标: 实现Cesium三维地球上任意位置绘制水纹波浪效果 效果图:  视频演示地址: https://liv ...

  7. 前端必学的CSS3波浪效果演示

    目录 文章目录 前言 CSS3波浪效果 1.Html构建 2.CSS编写 3.完整代码 index.html文件 style.css文件 总结 前言 随着前端技术的不断发展与进步,界面交互的样式要求和 ...

  8. android 光圈动画,Android 自定义View学习(4)波浪效果+光圈扩散效果

    这篇博客的效果是我仿照WPJY大神的一篇博客做的,加入了一些我自己的改动 先来看下效果 效果图上可能有些卡,但实际运行很流畅 上代码喽~~ /** * 外层的几层光环 */ private Paint ...

  9. android录音波浪动画_Android语音输入的波浪效果 – WaveView

    效果展示 源码地址 实现思路 绘制正弦波形 水平移动波形,即可得到破浪效果. 正弦波形的绘制 private void createShader() { ... Bitmap bitmap = Bit ...

最新文章

  1. arcgis 投影变换与坐标转换研究
  2. Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)...
  3. MySQL双主一致性架构优化
  4. java1.5以后的一些新特性
  5. mysql的in和not in的用法(特别注意not in结果集中不能有null)
  6. python比较两个数的和_Python中的is和==比较两个对象的两种方法
  7. web前端常用代码于面试等资源
  8. linux用户和用户组
  9. VB 字符串续行符最多25行…………
  10. sql统计各科成绩大于平均分的人_SQL第三关:汇总分析
  11. 在FTP服务器上搜索指定文件
  12. linux 下压缩解压命令
  13. 关于各式竞赛书籍的点评
  14. 基于FPGA的数据采集系统(一)
  15. 阿里云API-python脚本开发-云监控数据对接nightingale监控
  16. Arranging Coins 排列硬币
  17. 【复】一次流量分析经历
  18. 【编译原理】 NFA转变为DFA的子集构造法
  19. appium 报错:Original error:Could not proxy command to remote server. Original error:socket hang up
  20. 2.0 案例2:爬取房源信息以及分析房价

热门文章

  1. Java基础之创建对象的五种方式
  2. first-class type 一等类型的含义
  3. Swift 3: let sortedNumbers = numbers.sort { $0 $1 } print(sortedNumbers) 结果显示为()
  4. 【mac】Snagit截图时候鼠标变大太大的解决方法
  5. mysql闩_Oracle闩:Cache Buffers chains
  6. 通用方法 Java实现excel表格转成json
  7. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException
  8. 主从复制2——拥有海量数据主服务器的主从复制模型详细实现;
  9. Burpsuite中protobuf数据流的解析
  10. hiho 第118周 网络流四·最小路径覆盖