用css3制作旋转加载动画的几种方法

以WebKit为核心的浏览器,例如Safari和Chrome,对html5有着很好的支持,在移动平台中这两个浏览器对应的就是IOS和Android。最近在开发一个移动平台的web app,那么就有机会利用css3去实现一些很酷的效果,这些效果原来更多的是利用图片来实现。最近的一个改进就是利用css3制作旋转加载动画。以下将分别介绍几种实现的方案。

方案1,图片辅助

传统做法是直接用动态的GIF图片,这个方案是用PNG图片加上背景颜色来模拟静止的加载图片,然后利用css中的animation处理图片的旋转。相比传统方案,这个方案的好处是可以直接通过修改CSS来改变背景色,可以修改大小和旋转速度。如下是具体的CSS代码:

HTML:

<div class="loading"></div>

<div class="abgne-loading-20140104-2">
  <div class="loading"></div>
  <div class="word"></div>
</div>

CSS

body {
    background-color: #eee;
}
.loading {
    border: 3px solid #3a3;
    border-right: 3px solid #fff;
    border-bottom: 3px solid #fff;
    height: 50px;
     50px;
    border-radius: 50%;
    -webkit-animation: loading 1s infinite linear;
    -moz-animation: loading 1s infinite linear;
    -o-animation: loading 1s infinite linear;
    animation: loading 1s infinite linear;
}
@-webkit-keyframes loading {
    from {
        -webkit-transform: rotate(0deg);
    }
    to {
        -webkit-transform: rotate(360deg);
    }
}
@-moz-keyframes loading {
    from {
        -moz-transform: rotate(0deg);
    }
    to {
        -moz-transform: rotate(360deg);
    }
}
@-o-keyframes loading {
    from {
        -o-transform: rotate(0deg);
    }
    to {
        -o-transform: rotate(360deg);
    }
}
@keyframes loading {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}
.abgne-loading-20140104-2 {
    position: relative;
    height: 100px;
     100px;
}
.abgne-loading-20140104-2 .loading {
    border: 6px solid #168;
    border-right: 6px solid #fff;
    border-bottom: 6px solid #fff;
    height: 100%;
     100%;
    border-radius: 50%;
    -webkit-animation: loading 1s infinite linear;
    -moz-animation: loading 1s infinite linear;
    -ms-animation: loading 1s infinite linear;
    -o-animation: loading 1s infinite linear;
    animation: loading 1s infinite linear;
}
.abgne-loading-20140104-2 .word {
    color: #168;
    position: absolute;
    top: 0;
    left: 0;
    display: inline-block;
    text-align: center;
    font-size: 72px;
    line-height: 72px;
    font-family: 微軟正黑體, arial;
    margin: 18px 0 0 20px;
    padding: 0;
}

形如:

方案2, 纯CSS实现

方案的思路是,首先用css渲染12个静态的bar,每个bar间隔30度的角度,给每个bar添加背景变淡的动画,但是相邻bar的动画效果延迟1/12秒,来保证12个bar是按顺序变亮然后变暗。从而模拟出旋转的效果。

这个旋转效果是伪旋转,所有的bar都没有真正做到旋转。

HTML

<div class="spinner">
    <div class="bar1"> </div>
    <div class="bar2"> </div>
    <div class="bar3"> </div>
    <div class="bar4"> </div>
    <div class="bar5"> </div>
    <div class="bar6"></div>
    <div class="bar7"> </div>
    <div class="bar8"> </div>
    <div class="bar9"> </div>
    <div class="bar10"> </div>
    <div class="bar11"></div>
    <div class="bar12"></div>
</div>

CSS

 <style type="text/css">

        @-webkit-keyframes fade {
            from {opacity: 1;}
            to {opacity: 0.25;}
        }
        div.spinner {
            position: relative;
            width: 80px;
            height: 80px;
            display: inline-block;
        }
        div.spinner div {
            width: 20%;
            height: 40%;
            background: #000;
            position: absolute;
            left: 100%;
            top: 100%;
            opacity: 0;
           -webkit-animation: fade 1s linear infinite;
            -webkit-border-radius: 30px;
        }
        div.spinner div.bar1 {-webkit-transform:rotate(0deg) translate(0, -142%); -webkit-animation-delay: 0s;}
        div.spinner div.bar2 {-webkit-transform:rotate(30deg) translate(0, -142%); -webkit-animation-delay: -0.9167s;}
        div.spinner div.bar3 {-webkit-transform:rotate(60deg) translate(0, -142%); -webkit-animation-delay: -0.833s;}
        div.spinner div.bar4 {-webkit-transform:rotate(90deg) translate(0, -142%); -webkit-animation-delay: -0.75s;}
        div.spinner div.bar5 {-webkit-transform:rotate(120deg) translate(0, -142%); -webkit-animation-delay: -0.667s;}
        div.spinner div.bar6 {-webkit-transform:rotate(150deg) translate(0, -142%); -webkit-animation-delay: -0.5833s;}
        div.spinner div.bar7 {-webkit-transform:rotate(180deg) translate(0, -142%); -webkit-animation-delay: -0.5s;}
        div.spinner div.bar8 {-webkit-transform:rotate(210deg) translate(0, -142%); -webkit-animation-delay: -0.41667s;}
        div.spinner div.bar9 {-webkit-transform:rotate(240deg) translate(0, -142%); -webkit-animation-delay: -0.333s;}
        div.spinner div.bar10 {-webkit-transform:rotate(270deg) translate(0, -142%); -webkit-animation-delay: -0.25s;}
        div.spinner div.bar11 {-webkit-transform:rotate(300deg) translate(0, -142%); -webkit-animation-delay: -0.1667s;}
        div.spinner div.bar12 {-webkit-transform:rotate(330deg) translate(0, -142%); -webkit-animation-delay: -0.0833s;}

    </style>

 形如:

原文地址:https://www.cnblogs.com/laneyfu/p/4325987.html