30分钟玩转css3动画, transition,animation

其实css3动画是就是2种实现,一种是transition,另一种就是animation。transition实现的话就是只能定制开始帧,和结束2帧;而animation实现的话可以写很多关键帧。
没有前戏,直进主题。

transition

包含4个值,例如:-webkit-transition:all .5s ease 1s;
 分别顺序是(m代表必须): 变换的属性(m)、变换过渡的时间(m)、变换的速率、变换延时执行的时间

来个小demo:

<!DOCTYPE html>

<html>

<head>

    <title></title>

    <meta charset="utf-8">

    <style>

        .transition {

            width:30px;

            height: 30px;

            line-height: 30px;

            border-radius: 50%;

            text-align: center;

            display: inline-block;

            background:lightblue;

            -webkit-transition:all .5s ease;

            transition:all .5s ease;

            color:#fff;

        }

        .transition:hover {

            -webkit-transform:rotate(360deg);

            transform:rotate(360deg);

        }

    </style>

</head>

<body>

    <div class="transition">×</div>

</body>

</html>

 

应用例子:
http://skyweaver213.github.io/slide/widget/slide2/slide.html
http://skyweaver213.github.io/slide/widget/slide3/slide.html

animation:

就是一个动画对应一个keyframes,然后一个keyframes 里可以有N多个关键帧。
例如一个keyframes里我们可以这样写:
@-webkit-keyframes go {

    0%, 100% {

        -webkit-transform: translateX(0);

    }

    50% {

        -webkit-transform: translateX(500px);

    }

}

然后我们需要在应用这个keyframes的元素上写一个animation,
例如:-webkit-animation:go 2.5s ease infinite 0;  
参数顺序分别是(m代表必须):动画名字(m)、执行的时间(m)、过渡的速率、执行多小次、延迟执行的时间

小demo:
<!DOCTYPE html>

<html>

<head>

    <title></title>

    <style>

        .animation {

            width: 100px;

            height: 100px;

            display: block;

            background: pink;

            -webkit-animation: go 2.5s infinite;

            /*-webkit-animation: go 2.5s cubic-bezier(.25, -0.25, .75, 1.25) infinite;*/

        }



        @-webkit-keyframes go {

            0%, 100% {

                -webkit-transform: translateX(0);

            }

            50% {

                -webkit-transform: translateX(500px);

            }

        }

    </style>

</head>

<body>



<div class="animation"></div>



</body>

</html>

应用deom:loading状态、三条线变箭头。
http://skyweaver213.github.io/slide/widget/slide1/slide.html
30分钟玩转css3动画, transition,animation

<!DOCTYPE html>

<html>

<head>

    <title></title>

    <style>

        .loading {

            position: relative;

            width: 40px;

            height: 40px;

            margin: 40px auto;

            -webkit-transform:rotate(165deg);

        }

        .loading:before, .loading:after {

            content: '';

            position: absolute;

            width: 8px;

            height: 8px;

            top: 50%;

            left: 50%;

            display: inline-block;

            border-radius: 4px;

            -webkit-transform: translate(-50%, -50%);

        }

        .loading:before {

            -webkit-animation:before 2s infinite;

        }

        .loading:after {

            -webkit-animation:after 2s infinite;

        }



        @-webkit-keyframes before {

            0% {

                width: 8px;

                box-shadow: 16px -8px rgba(225, 20, 98, 0.75), -16px 8px rgba(111, 202, 220, 0.75);

            }



            35% {

                width: 40px;

                box-shadow: 0 -8px rgba(225, 20, 98, 0.75), 0 8px rgba(111, 202, 220, 0.75);

            }



            70% {

                width: 8px;

                box-shadow: -16px -8px rgba(225, 20, 98, 0.75), 16px 8px rgba(111, 202, 220, 0.75);

            }



            100% {

                box-shadow: 16px -8px rgba(225, 20, 98, 0.75), -16px 8px rgba(111, 202, 220, 0.75);

            }

        }



        @-webkit-keyframes after {

            0% {

                height: 8px;

                box-shadow: 8px 16px rgba(61, 184, 143, 0.75), -8px -16px rgba(233, 169, 32, 0.75);

            }



            35% {

                height: 40px;

                box-shadow:8px 0 rgba(61, 184, 143, 0.75),-8px 0 rgba(233, 169, 32, 0.75);

            }



            70% {

                height: 8px;

                box-shadow:  8px -16px rgba(61, 184, 143, 0.75), -8px 16px rgba(233, 169, 32, 0.75);

            }



            100% {

                box-shadow:  8px 16px rgba(61, 184, 143, 0.75),  -8px -16px rgba(233, 169, 32, 0.75);

            }

        }



    </style>

</head>

<body>

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

</body>

</html>


变换成箭头:

<!DOCTYPE html>

<html>

<head>

    <title></title>

    <style>

        * {

            margin:0;

            padding:0;

        }

        .arrow_div {

            width: 100px;

            height: 100px;

            background: #000;

            position: relative;

        }

        .arrow {

            width: 33px;

            height: 4px;

            display: inline-block;

            background: #fff;

            position: absolute;

            left:0;

            right:0;

        }



        .arrow_body {

            margin: auto;

            top:40px;

            -webkit-animation: 2s linear body_kf infinite;

        }



        @-webkit-keyframes body_kf {

            0% {



            }

            30%, 50% {

                -webkit-transform: rotate(180deg);

            }

            80%, 100% {

                -webkit-transform: rotate(360deg);

            }





        }



        .sleft {

            width: 33px;

            height: 33px;

            border: transparent;

            position: absolute;

            top: 25px;

            margin: 0 auto;

            left: 0;

            right: 0;

            -webkit-animation: 2s linear sleft_kf infinite;

        }

        .sleft:before {

            content: '';

            width: 33px;

            height: 4px;

            display: inline-block;

            background: #fff;

            top: 0;

            position: absolute;

            -webkit-animation: 2s linear sleft_before_kf infinite;

        }

        @-webkit-keyframes sleft_kf {

            0% {}

            30%, 50% {

                -webkit-transform: rotate(222deg);

            }

            80%,100% {

                -webkit-transform: rotate(360deg);

            }

        }

        @-webkit-keyframes sleft_before_kf {

            0%, 100%{}

            20% {

                width: 28px;

                top: 1px;

                left: 3px;

            }

            25% {

                width: 26px;

                top: 2px;

                left: 6px;

            }

            30%, 40%, 50% {

                width: 22px;

                top: 3px;

                left: 8px;

            }

            80% {

                width: 33px;

                top:0;

                left:0;

            }

        }

        .sright {

            width: 33px;

            height: 33px;

            border: transparent;

            position: absolute;

            margin: 0 auto;

            left: 0;

            right: 0;

            top: 25px;

            position: absolute;

            -webkit-animation: 2s linear sright_kf infinite;



        }



        .sright:before {

            content: '';

            width: 33px;

            height: 4px;

            display: inline-block;

            background: #fff;

            bottom: 0;

            position: absolute;

            -webkit-animation: 2s linear sright_before_kf infinite;

        }

        @-webkit-keyframes sright_kf {

            0% {}

            30%, 50% {

                -webkit-transform: rotate(135deg);

            }

            80%,100% {

                -webkit-transform: rotate(360deg);

            }

        }

        @-webkit-keyframes sright_before_kf {

            0%,100% {}

            20% {

                width: 28px;

                bottom: 1px;

                right: 1px;

            }

            25% {

                width: 25px;

                bottom: 2px;

                right: 2px;

            }

            30%, 40%, 50% {

                width: 22px;

                bottom: 3px;

                right: 3px;

            }



            80% {

                width: 33px;

                bottom: 0;

                right:0;

            }

        }



    </style>

</head>

<body>

    <div class="arrow_div">

        <div class="sleft"></div>

        <i class="arrow arrow_body"></i>

        <div class="sright"></div>

    </div>

</body>

</html>




你可能感兴趣的:(transition)