• 技术文章 >web前端 >css教程

    如何使用纯CSS实现宝路薄荷糖的动画(附源码)

    不言不言2018-10-08 16:41:13转载797
    本篇文章给大家带来的内容是关于如何使用纯CSS实现宝路薄荷糖的动画(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    效果预览

    1367959997-5bb0db68b8c45_articlex.gif

    源代码下载

    https://github.com/comehope/front-end-daily-challenges

    代码解读

    定义 dom,只有 1 个元素:

    <div class="spinner"></div>

    居中显示:

    body {
        margin: 0;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: silver;
    }

    定义容器尺寸:

    .spinner {
        width: 50vmin;
        height: 50vmin;
        position: relative;
    }

    before 伪元素画出 1 个像宝路薄荷糖状的黑色圆环:

    .spinner::before {
        content: '';
        position: absolute;
        box-sizing: border-box;
        width: inherit;
        height: inherit;
        border: 12.5vmin solid;
        border-radius: 50%;
    }

    接下来制作动画效果。
    设置透视景深:

    body {
        perspective: 400px;
    }

    让圆环在 z 轴上运动:

    .spinner::before {
        animation: spin 1.5s ease-in-out infinite both reverse;
    }
    
    @keyframes spin {
        0%, 100% {
            transform: translateZ(10vmin);
        }
    
        60% {
            transform: translateZ(-10vmin);
        }
    }

    让圆环在 z 轴距离较大时稍稍倾斜:

    @keyframes spin {
        0%, 100% {
            transform: translateZ(10vmin) rotateX(25deg);
        }
    
        60% {
            transform: translateZ(-10vmin);
        }
    }

    增加缩放效果:

    @keyframes spin {
        0%, 100% {
            transform: translateZ(10vmin) rotateX(25deg);
        }
    
        33% {
            transform: translateZ(-10vmin) scale(0.4);
        }
    
        60% {
            transform: translateZ(-10vmin);
        }
    }

    after 伪元素再画出一个白色的圆环,并且让它的动画延迟动画总长的一半时间:

    .spinner::before,
    .spinner::after {
        /*略*/
        animation: spin 1.5s ease-in-out infinite both reverse;
    }
    
    .spinner::after {
        border-color: white;
        animation-delay: -0.75s;
    }

    接下来制作容器的动画效果,为了不受子元素动画的影响,先暂时屏蔽伪元素的动画效果。

    .spinner::before,
    .spinner::after {
        /* animation: spin 1.5s ease-in-out infinite both reverse; */
    }

    增加容器沿 x 轴旋转的动画效果,动画时间为子元素动画时间的2倍:

    .spinner {
        animation: wobble 3s ease-in-out infinite;
    }
    
    @keyframes wobble {
        0%, 100% {
            transform: rotateX(15deg);
        }
        
        50% {
            transform: rotateX(60deg);
        }
    }

    增加容器沿 y 轴旋转的动画效果:

    @keyframes wobble {
        0%, 100% {
            transform: rotateX(15deg) rotateY(60deg);
        }
        
        50% {
            transform: rotateX(60deg) rotateY(-60deg);
        }
    }

    增加容器整体旋转的动画效果:

    @keyframes wobble {
        0%, 100% {
            transform: rotateX(15deg) rotateY(60deg);
        }
        
        50% {
            transform: rotateX(60deg) rotateY(-60deg) rotate(180deg);
        }
    }

    打开子元素的动画效果,使子元素的动画效果和容器的动画效果叠加:

    .spinner::before,
    .spinner::after {
        animation: spin 1.5s ease-in-out infinite both reverse;
    }

    最后,使子元素在 3d 空间上运动:

    .spinner {
        transform-style: preserve-3d;
    }

    大功告成!

    以上就是如何使用纯CSS实现宝路薄荷糖的动画(附源码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault思否,如有侵犯,请联系admin@php.cn删除
    专题推荐:css css3 html html5 前端
    上一篇:如何使用纯CSS实现从按钮两侧滑入元素的悬停效果(附源码) 下一篇:如何使用CSS和D3实现一个舞动的画面(附源码)
    Web大前端开发直播班

    相关文章推荐

    • 如何使用纯CSS实现切换按钮时背景的悬停动画效果• 如何使用纯CSS实现类似脉动的loader(附源码)• 如何使用纯CSS实现从按钮两侧滑入装饰元素的悬停特效(附源码)• 如何使用纯CSS实现按钮的悬停效果(附源码)• 如何使用纯CSS实现从按钮两侧滑入元素的悬停效果(附源码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网