奇技淫巧——CSS 实现波浪效果

点击右上方红色按钮关注“web秀”,让你真正秀起来

前言

一直以来,使用纯 CSS 实现波浪效果都是十分困难的。

奇技淫巧——CSS 实现波浪效果

CSS 实现波浪效果

因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法。 当然,借助其他力量(SVG、CANVAS),是可以很轻松的完成所谓的波浪效果的。

下面先来看看非 CSS 方式实现的波浪效果。

SVG 实现波浪效果

借助 SVG ,是很容易画出三次贝塞尔曲线的。

奇技淫巧——CSS 实现波浪效果

SVG 实现波浪效果

奇技淫巧——CSS 实现波浪效果

SVG 实现波浪效果

画出三次贝塞尔曲线的核心在于 这一段。感兴趣的可以自行去研究研究。

canvas 实现波浪效果

使用 canvas 实现波浪效果的原理与 SVG 一样,都是利用路径绘制出三次贝塞尔曲线并赋予动画效果。

奇技淫巧——CSS 实现波浪效果

canvas 实现波浪效果

奇技淫巧——CSS 实现波浪效果

canvas 实现波浪效果

可以复制上方代码至在线coding, 查看效果。

主要是利用了动态绘制 ctx.bezierCurveTo() 三次贝塞尔曲线实现波浪的运动效果,感兴趣的可以自行研究。

CSS实现波浪效果

最开始不是说css不能实现吗?是,我们没有办法直接绘制出三次贝塞尔曲线,但是我们可以利用一些讨巧的方法,模拟达到波浪运动时的效果,下面来看看这种方法。

原理

原理十分简单,我们都知道,一个正方形,给它添加 border-radius: 50%,将会得到一个圆形。

奇技淫巧——CSS 实现波浪效果

CSS实现波浪效果

width: 240px;
height: 240px;
background: #f13f84;
border-radius: 50%;

好的,如果 border-radius 没到 50%,但是接近 50% ,我们会得到一个这样的图形(注意边角,整个图形给人的感觉是有点圆,却不是很圆。)

奇技淫巧——CSS 实现波浪效果

CSS实现波浪效果

width: 240px;
height: 240px;

background: #f13f84;
border-radius: 40%;

好的,那整这么个图形又有什么用?还能变出波浪来不成?

我们让上面这个图形滚动起来(rotate) ,看看效果:

奇技淫巧——CSS 实现波浪效果

CSS实现波浪效果

@keyframes rotate{
from{transform: rotate(0deg)}
to{transform: rotate(359deg)}
}
.ripple{
width: 240px;

height: 240px;
background: #f13f84;
border-radius: 40%;
animation: rotate 3s linear infinite;
}

可能很多人看到这里还没懂旋转起来的意图,仔细盯着一边看,是会有类似波浪的起伏效果的。

而我们的目的,就是要借助这个动态变换的起伏动画,模拟制造出类似波浪的效果。

实现

当然,这里看到是全景实现图,所以感觉并不明显,OK,让我们用一个个例子看看具体实现起来能达到什么样的效果。

我们利用上面原理可以做到的一种波浪运动背景效果图:

奇技淫巧——CSS 实现波浪效果

CSS实现波浪效果

后面漂浮的波浪效果,其实就是利用了上面的 border-radius: 40% 的椭圆形,只是放大了很多倍,视野之外的图形都 是隐藏的 ,只留下了一条边的视野,并且增加了一些相应的transform 变换。

可能有部分同学,还存在疑问,OK,那我们把上面的效果隐藏部分显示处理,将视野之外的动画也补齐,那么其实生成波浪的原理是这样的:

奇技淫巧——CSS 实现波浪效果

CSS实现波浪效果

图中的红色框就是我们实际的视野范围。

值得注意的是,要看到,这里我们生成波浪,并不是利用旋转的椭圆本身,而是利用它去切割背景,产生波浪的效果。

公告


分享到:


相關文章: