css实现波浪纹

78 篇文章 2 订阅
40 篇文章 1 订阅
<template>
    <div class="flex">
        <div>
            <div>扩散原理</div>
            <div class="diffusion">
                <div class="diffusion-child"></div>
            </div>
        </div>

        <div>
            <div>多重扩散</div>
            <div class="diffusion">
                <div class="diffusion-child inset "></div>
                <div class="diffusion-child inset delay-1s"></div>
                <div class="diffusion-child inset delay-2s"></div>
            </div>
        </div>
        <div>
            <div>换个角度</div>
            <div class="diffusion">
                <div class="layout">
                    <div class="diffusion-child inset "></div>
                    <div class="diffusion-child inset delay-1s"></div>
                    <div class="diffusion-child inset delay-2s"></div>
                </div>
            </div>
        </div>
        <div>
            <div>透视效果</div>
            <div class="diffusion d3d">
                <div class="layout">
                    <div class="diffusion-child inset "></div>
                    <div class="diffusion-child inset delay-1s"></div>
                    <div class="diffusion-child inset delay-2s"></div>
                </div>
            </div>
        </div>
    </div>

</template>
<script setup>

</script>
<style lang="less" scoped>
.diffusion {
    width: 100px;
    height: 100px;
    position: relative;

    &-child {
        width: 100%;
        height: 100%;
        /* 用 transform: scale 不改变元素位置的特性,来固定动画所在位置,也就不用去更改元素宽高来形成扩散效果*/
        transform: scale(0);
        border-radius: 50%;
        background-color: rgba(127, 255, 212, 0.5);
        animation: diffusion linear infinite 3s;
        position: absolute;
        top: 0;
        left: 0;

        &.inset {
            background-color: transparent;
            box-shadow: inset 0px 0px 20px rgba(127, 255, 212, 0.5);
        }

        &.delay-1s {
            /* 给第二个圆 一个延时动画,错开动画的时间轴,实现多重扩散效果 */
            animation-delay: 1s;
        }

        &.delay-2s {
            /* 给第二个圆 一个延时动画,错开动画的时间轴,实现多重扩散效果 */
            animation-delay: 2s;
        }
    }

    .layout {
        /* 
        // 由于 perspective 只能对其子集的3D变换属性起效果,对于 其自身的 3D变换 不起效果,
        // 所以需要额外嵌套一层进行 3D 变换
        */
        width: 100%;
        height: 100%;
        transform: rotateX(70deg);
    }

    &.d3d {
        /* 开启3D透视, 视距 里目标点 150 像素(距离越小,透视效果越明显, 距离越大,越接近俯视) */
        perspective: 150px;
    }

}

.flex {
    display: flex;
    text-align: center;
    justify-content: space-between;
}

@keyframes diffusion {

    /* 扩散其实就是从透明,中心点缩放为0,到不透明,缩放为100% 的过程 */
    0% {
        opacity: 0;
        transform: scale(0);
    }

    /* 
    // 中间插入两个关键帧,用于更改动画的视觉效果,
    // 原理跟动画曲线类似,但是由于关键帧可以单独控制每个属性的过程,
    // 相对比较简单一些。
     */
    30% {
        opacity: 1;
        transform: scale(0.3);
    }

    90% {
        opacity: 1;
        transform: scale(0.9);
    }

    100% {
        opacity: 0;
        transform: scale(1);
    }
}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值