如何用css实现波纹动画效果

波纹效果可以用css的 animation 动画来实现,animation 相比 单纯用 transform 能实现更为复杂的效果。


效果图:

下面三张图分别为 原图、效果图和去掉背景图片后的效果图,虽然可能效果图中的“波纹”颜色比较浅,但是并不妨碍最终完成动画效果。

           


实现思路

1 先写一个圆形的div(调整宽高和边框角度即可)作为波纹中心,写这个波纹中心主要是作为父盒子,并把这个波纹中心定位到背景中某个位置。

2 在这个波纹中心内,再写三个同心的圆形盒子(绝对定位居中即可),作为波纹

3 给这三个波纹盒子设置有颜色的边框,并且添加 animation 动画效果,然后分两到三步让波纹盒子宽高逐渐变大,并且让波纹盒子透明度从1到最终变为0,然后就会有一种波纹淡开的效果了。可是因为动画是同时开始的,所以看到的动画可能没有太多层次感,还需要最后的调整。

4 给这三个波纹盒子的动画设置不同的延迟开始时间,并且将动画设置为不断循环进行。

5 这样就能看到真正的波纹效果了。


具体代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body>div {
            position: relative;
            overflow: hidden;
            width: 480px;
            height: 318px;
            background: url("../images/气功.jpg") no-repeat;
        }

        body div[class^="attack"] {
            position: absolute;
            background-color: white;
        }

        body div .attack1 {
            width: 73px;
            height: 73px;
            border-radius: 73px;
            top: 227px;
            left: 81px;
        }

        body div .attack2 {
            width: 71px;
            height: 71px;
            border-radius: 71px;
            top: 83px;
            left: 209px;
        }

        body div .attack3 {
            width: 65px;
            height: 65px;
            border-radius: 65px;
            top: 91px;
            left: 421px;
        }

        @keyframes move {
            0% {
                width: 65px;
                height: 65px;
                border-radius: 65px;
                box-shadow: 0 0 0 2px #ABF8F4;
            }

            50% {
                opacity: 1;
            }

            100% {
                width: 120px;
                height: 120px;
                border-radius: 120px;
                box-shadow: 0 0 0 2px #ABF8F4;
                opacity: 0;
            }
        }

        body div[class^="pulse"] {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 65px;
            height: 65px;
            border-radius: 65px;
            /* border: #ABF8F4 solid 2px; */
            transform: translate(-50%, -50%);
            animation-name: move;
            animation-duration: .8s;
            animation-iteration-count: infinite;
        }

        body div .pulse2 {
            animation-delay: 0.2s;
        }

        body div .pulse3 {
            animation-delay: 0.4s;
        }
    </style>
</head>

<body>
    <div>
        <div class="attack1">
            <div class="pulse1"></div>
            <div class="pulse2"></div>
            <div class="pulse3"></div>
        </div>
        <div class="attack2">
            <div class="pulse1"></div>
            <div class="pulse2"></div>
            <div class="pulse3"></div>
        </div>
        <div class="attack3">
            <div class="pulse1"></div>
            <div class="pulse2"></div>
            <div class="pulse3"></div>
        </div>
    </div>
</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值