zoukankan      html  css  js  c++  java
  • CSS3之animation属性

    CSS中的animation属性可用于为许多其他CSS属性设置动画,例如颜色,背景色,高度或宽度。 每个动画都需要使用@keyframes这种at-rule语句定义,然后使用animation属性来调用它,如下所示:

    .element {
      animation: pulse 5s infinite;
    }
    
    @keyframes pulse {
      0% {
        background-color: #001F3F;
      }
      100% {
        background-color: #FF4136;
      }
    }
    

      

    <!DOCTYPE html>
    <html>
    <head lang="zh-CN">
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    
        <title></title>
        <style>
            .element {
                 100%;
                height: 100%;
                animation: pulse 5s infinite;
            }
    
            @keyframes pulse {
                0% {
                    background-color: #001F3F;
                }
    
                100% {
                    background-color: #FF4136;
                }
            }
            html,
            body {
                height: 100%;
            }
        </style>
    </head>
    <body>
        <div class="element"></div>
    </body>
    </html>
    

      

    每个@keyframes的 at-rule CSS语句规则都定义了在动画过程中的特定时刻应该发生的情况。 例如,0%是动画的开始,而100%是动画的结束。可以通过简写animation属性或它的八个子属性控制这些关键帧,以更好地控制应该如何操纵这些关键帧。

    子属性

    animation-name:声明要操纵的@keyframes规则的名称。

    animation-duration:动画完成一个周期所需的时间。

    animation-timing-function:建立预设的加速曲线,例如缓动或线性。

    animation-delay:加载元素到动画序列开始之间的时间。

    animation-direction:设置循环后动画的方向。 其默认值在每个周期重置。

    animation-iteration-count:应该执行动画的次数。

    animation-fill-mode:设置在动画之前/之后应用的值。

    例如,您可以将动画的最后状态设置为保留在屏幕上,或者可以将其设置为切换回动画开始之前的状态。

    animation-play-state:暂停/播放动画。

    可以如下面所示使用这些子属性:

    @keyframes stretch {
      /* 这里声明动画动作 */
    }
    
    .element {
      animation-name: stretch;
      animation-duration: 1.5s; 
      animation-timing-function: ease-out; 
      animation-delay: 0s;
      animation-direction: alternate;
      animation-iteration-count: infinite;
      animation-fill-mode: none;
      animation-play-state: running; 
    }
    
    /* 等同于*/
    
    .element {
      animation: 
        stretch
        1.5s
        ease-out
        0s
        alternate
        infinite
        none
        running;
    }
    

      

    <!DOCTYPE html>
    <html>
    
    <head lang="zh-CN">
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    
        <title></title>
        <style>
            .element {
                height: 250px;
                 250px;
                margin: 0 auto;
                background-color: red;
                animation-name: stretch;
                animation-duration: 1.5s;
                animation-timing-function: ease-out;
                animation-delay: 0;
                animation-direction: alternate;
                animation-iteration-count: infinite;
                animation-fill-mode: none;
                animation-play-state: running;
            }
    
            @keyframes stretch {
                0% {
                    transform: scale(.3);
                    background-color: red;
                    border-radius: 100%;
                }
    
                50% {
                    background-color: orange;
                }
    
                100% {
                    transform: scale(1.5);
                    background-color: yellow;
                }
            }
    
            body,
            html {
                height: 100%;
            }
    
            body {
                display: flex;
                align-items: center;
                justify-content: center;
            }
        </style>
    </head>
    
    <body>
        <div class="element"></div>
    </body>
    
    </html>
    

      

    以下是这些子属性中每个属性可以采用的值的完整列表:

     
    animation-timing-function
    ease, ease-out, ease-in, ease-in-out, linear, cubic-bezier(x1, y1, x2, y2) (e.g. cubic-bezier(0.5, 0.2, 0.3, 1.0))
    animation-duration
    Xs or Xms
    animation-delay
    Xs or Xms
    animation-iteration-count
    X
    animation-fill-mode
    forwards, backwards, both, none
    animation-direction
    normal, alternate
    animation-play-state
    paused, running, running
     

    多个步骤

    如果动画具有相同的开始和结束属性,则在@keyframes中用逗号分隔0%和100%值很有用:

    @keyframes pulse {
      0%, 100% {
        background-color: yellow;
      }
      50% {
        background-color: red;
      }
    }
    

      

    多个动画

    您也可以用逗号分隔值,以在选择器上声明多个动画。 在下面的示例中,我们想在@keyframe中更改圆的颜色,同时还要将其与另一边左右轻轻一碰。

    .element {
      animation: 
        pulse 3s ease infinite alternate, 
        nudge 5s linear infinite alternate;
    }
    

      

    <!DOCTYPE html>
    <html>
    
    <head lang="zh-CN">
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
    
        <title></title>
        <style>
            .element {
                height: 400px;
                 400px;
                background-color: red;
                animation:
                    pulse 3s ease infinite alternate,
                    nudge 5s linear infinite alternate;
                border-radius: 100%;
            }
    
            @keyframes pulse {
    
                0%,
                100% {
                    background-color: red;
                }
    
                50% {
                    background-color: orange;
                }
            }
    
            @keyframes nudge {
    
                0%,
                100% {
                    transform: translate(0, 0);
                }
    
                50% {
                    transform: translate(150px, 0);
                }
    
                80% {
                    transform: translate(-150px, 0);
                }
            }
    
    
            html,
            body {
                height: 100%;
            }
    
            body {
                display: flex;
                align-items: center;
                justify-content: center;
            }
        </style>
    </head>
    
    <body>
        <div class="element"></div>
    </body>
    
    </html>
    

      

    性能

    对大多数属性进行动画处理是性能方面的考虑,因此在对任何属性进行动画处理之前,我们应谨慎行事。 但是,可以安全地对某些组合进行动画处理:

    transform: translate()

    transform: scale()

    transform: rotate()

    opacity

    哪些属性可以设置动画?

    MDN有一个可以设置动画的CSS属性列表。 可设置动画的属性倾向于颜色和数字。 不可动画属性的一个示例是背景图像。

  • 相关阅读:
    微信——获取用户基本信息及openid 、access_token、code
    Java中的标记接口(zz)
    深入理解Java的注解(Annotation):注解处理器(3)
    深入理解Java的注解(Annotation):自定义注解入门(2)
    深入理解Java的注解(Annotation):基本概念(1)
    TCP 粘包及其解决方案(zz)
    TCP,UDP,IP包头格式及说明(zz)
    python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?
    mysql:functional dependency
    什么是“几何级数”?什么是“算数级数”?有啥区别?
  • 原文地址:https://www.cnblogs.com/f6056/p/11635785.html
Copyright © 2011-2022 走看看