浅谈我对CSS动画属性的理解

一、CSS3动画的作用

通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。

二、transition: 平衡过渡

1)作用

css3的transition允许css的属性值在一定的时间区间内平滑地过渡。这种效果可以在鼠标单击、获得焦点、被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值

2)速度效果的速度曲线(动画的速度曲线):

linear 线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
ease 平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
ease-in 由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
ease-out 由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
ease-in-out

由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)

step-start 马上跳到动画每一结束桢的状态

 

 

 

 

 

曲线图如下:

简写:transition:all/具体属性值 运动时间s/ms 延迟时间s/ms 动画类型

案例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{padding: 0;margin: 0;}
        .box{
            width: 1020px;
            height: 800px;
            margin: 0 auto;
        }
        .con{
            width: 500px;
            height: 394px;
            background:url(./images/bg.jpg);
            margin: 10px 10px 6px 0;
            float: left;
            position: relative;
            overflow: hidden;
        }
        .con img{
            position: absolute;
            transition-duration: 2s;
        }
        .con img:nth-child(1){
            left: 30px;top: 34px;
            width: 437px;height: 317px;
        }
        .con:hover img:nth-child(1){
            width: 285px;height: 203px;
        }
        .con img:nth-child(2){
            left:350px;top: -100px;
        }
        .con:hover img:nth-child(2){
            left:350px;top: 34px;
        }
        .con img:nth-child(3){
            left:100%;top: 143px;
        }
        .con:hover img:nth-child(3){
            left:350px;
        }
        .con img:nth-child(4){
            left:350px;top: 100%;
        }
        .con:hover img:nth-child(4){
            top: 258px;
        }
        .con img:nth-child(5){
            left:184px;top: 100%;
        }
        .con:hover img:nth-child(5){
            top: 258px;
            transition-delay: 0.3s;
        }
        .con img:nth-child(6){
            left:30px;top: 100%;
        }
        .con:hover img:nth-child(6){
            top: 258px;
            transition-delay: 0.5s;
        }
        .con4 img:nth-child(1){
            left:118px;top: 29px;
            width: 257px;height: 340px;
        }
        .con4:hover img:nth-child(1){
            left: 23px;
            width: 257px;height: 340px;
        }
        .con4 img:nth-child(2){
            left:100%;bottom: 100%;
        }
        .con4:hover img:nth-child(2){
            left:335px;bottom:198px;
        }
        .con4 img:nth-child(3){
            left:100%;top: 100%;
        }
        .con4:hover img:nth-child(3){
            left:335px;top:207px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="con">
            <img src="./images/con1-1.jpg" alt="">
            <img src="./images/con1-2.jpg" alt="">
            <img src="./images/con1-3.jpg" alt="">
            <img src="./images/con1-4.jpg" alt="">
            <img src="./images/con1-5.jpg" alt="">
            <img src="./images/con1-6.jpg" alt="">
        </div>
        <div class="con">
            <img src="./images/con2-1.jpg" alt="">
            <img src="./images/con2-2.jpg" alt="">
            <img src="./images/con2-3.jpg" alt="">
            <img src="./images/con2-4.jpg" alt="">
            <img src="./images/con2-5.jpg" alt="">
            <img src="./images/con2-6.jpg" alt="">
        </div>
        <div class="con">
            <img src="./images/con3-1.jpg" alt="">
            <img src="./images/con3-2.jpg" alt="">
            <img src="./images/con3-3.jpg" alt="">
            <img src="./images/con3-4.jpg" alt="">
            <img src="./images/con3-5.jpg" alt="">
            <img src="./images/con3-6.jpg" alt="">
        </div>
        <div class="con4 con">
            <img src="./images/con4-1.jpg" alt="">
            <img src="./images/con4-2.jpg" alt="">
            <img src="./images/con4-3.jpg" alt="">
        </div>
    </div>
</body>
</html>

通过结合以上知识点,可以实现的效果如下,当你鼠标放到盒子里面时,图片飘进来到达指定位置,鼠标滑走之后,图片消失,只剩下一张大图:

三、animation: 动画

      一般通过@keyframes 规则,创建动画。 在动画过程中,您能够多次改变这套 CSS 样式。以百分比来规定改变发生的时间,或者通过关键词 "from" 和 "to",等价于 0% 和 100%。0% 是动画的开始时间,100% 动画的结束时间。

animation  vs  transition

    相同点:都是随着时间改变元素的属性值。
    不同点:transition需要触发一个事件(hover事件或click事件等)才会随时间改变其css属性;
      而animation在不需要触发任何事件的情况下也可以显式的随着时间变化来改变元素css的属性值,从而达        
      到一种动画的效果,css3的animation就需要明确的动画属性值

     animation的属性设置

animation-name

调用关键帧的名称

animation-duration

动画的持续的时间

animation-timing-function

动画运用的类型(匀速linear、加速度、减速度、贝塞尔曲线)

animation-delay

动画的延迟

animation-iteration-count 

动画运动的次数(默认情况下运动1次) infinite(无限循环)

animation-direction

运动的方向

属性值:

            - reverse:反方向运行 ( 让关键帧从后往前执行 )

            - alternate:动画先正常运行再反方向运行,并持续交替运行

            - alternate-reverse:动画先反运行再正方向运行,并持续交替运行

animation-play-state

属性值:   paused暂停        running运动

 

 

 

 

 

 

 

 

 

 

常用的写法:animation:关键帧的名称  动画运动的时间  linear(匀速)  动画延迟的时间

四、关键帧的定义

不同于过渡动画只能定义首尾两个状态,关键帧动画可以定义多个状态,或者用关键帧的话来说,过渡动画只能定义第一帧和最后一帧这两个关键帧,而关键帧动画则可以定义任意多的关键帧,因而能实现更复杂的动画效果。

@keyframes mymove{
 from{初始状态属性}
to{结束状态属性}
}
或
@keyframes mymove{
 0%{初始状态属性}
50%(中间再可以添加关键帧)
100%{结束状态属性}
}

例子:

<!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>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            height:100%;
        }
        img{
            display:block;
        }
        .fixed{
            position:fixed;
            left:0;right:0;
            top:0;bottom:0;
            margin:auto;
        }
        body{
            background:url(./images/2.jpg) no-repeat;
            /* 设置图片大小 */
            background-size:100% 100%;
        }
        /* 轮牌转动 */
        .bigImg{
            animation: imgRotate 20s linear infinite;
        }


        .box{
            width:768px;
            height:768px;
            animation: imgRotate 20s linear infinite;
        }
        /* 把小孩的图片定位在box里面 */
        .box img{
            /* 改变变形原点 */
            transform-origin:center 20px;
            /* 让图片反方向转动  reverse*/
            animation: imgRotate 20s reverse linear infinite;
        }
        .pic1{
            position:absolute;
            left: 43%;
            top: 29px;
            
        }
        .pic2{
            position:absolute;
            left: 43%;
            bottom: -84px;
        }
        .pic3{
            position:absolute;
            left: 12%;
            bottom: -22px;
        }
        .pic4{
            position:absolute;
            left: 73%;
            bottom: -6px;
        }
        .pic5{
            position:absolute;
            left: 88%;
            bottom: 234px;
        }
        .pic6{
            position:absolute;
            left: -3%;
            bottom: 226px;
        }
        .pic7{
            position:absolute;
            left: 15%;
            bottom: 480px;
        }
        .pic8{
            position:absolute;
            left: 83%;
            bottom: 440px;

        }

        .box_tit{
            position: absolute;
            left: 0;top: 0;
            right: 0;bottom: 0;
            margin: auto;
        }
        /* 关键帧 */
        @keyframes imgRotate{
            0%{
                transform:rotate(0);
            }
            100%{
                transform:rotate(360deg);
            }
        }
    </style>
</head>
<body>
    <img src="./images/fsw.png" alt="" class="bigImg fixed">
    <img src="./images/big-title.png" alt="" class="box_tit">
    <div class="box fixed">
        <img class="pic1" src="./images/girl.png" alt="">
        <img class="pic2" src="./images/girls.png" alt="">
        <img class="pic3" src="./images/boy.png" alt="">
        <img class="pic4" src="./images/dog.png" alt="">
        <img class="pic5" src="./images/hairboy.png" alt="">
        <img class="pic6" src="./images/mimi.png" alt="">
        <img class="pic7" src="./images/mudog.png" alt="">
        <img class="pic8" src="./images/shamegirl.png" alt="">
    </div>
</body>
</html>

效果图:

好了,今天的CSS动画讲解就到这里,有疑问的欢迎评论区告诉我,我会给你们解答的

猜你喜欢

转载自blog.csdn.net/u011313034/article/details/104576223