CSS Animation

    In this CSS advance tutorial, we will be going through the animation property and all the other properties associated with it including the @keyframes rules.

    CSS Animation

    In CSS we can create animation on an HTML element without using JavaScript and Flash. Using the animation, we can gradually change the style of an element from one to another with a specified time. And here in this tutorial, we will be going to discuss the following properties.

    • @keyframes
    • animation-name
    • animation-duration
    • animation-delay
    • animation-iteration-count
    • animation-direction
    • animation-timing-function
    • animation-fill-mode
    • animation

    Note: Many old browser versions do not support CSS animation so make sure that you have the latest browser version.

    The @keyframes Rule

    When we define CSS animation for an element, first we need to specify some keyframe rules. And the keyframe defines the different styling for the element at different times. The @keyframe rule holds the two selectors from and to. The from define the actual or current styling of the element and to define the new styling that should be applied to the element according to the animation-duration.

    Example

    Create a box whose actual color is green and it changes to blue within 4 seconds.

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    from{background-color: green;}
                    to{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 4s;
                }
            </style>
        </head>
    <body>
        <div>Changing Color</div>
    </body>
    </html>

    Note

    The animation will only remain for the animation-duration time. The animation-duration property defines the time period, how long it should take to complete the animation. The animation-name defines the name of the keyframe, that should be invoked for the animation. The from and to keywords of the keyframes can also be represented using percentage values 0% to 100%. Where 0% represents the animation starting point and 100% represent animation completion.

    Example

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    0%{background-color: green;}
                    25%{background-color: red;}
                    50%{background-color: yellow;}
                    75%{background-color: violet ;}
                    100%{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 6s;
                }
            </style>
        </head>
    <body>
        <div>Color Changing Animation</div>
    </body>
    </html>

    Delay Animation

    The animation-delay property halts the animation commencing for a specified time. It accepts value in seconds.

    Syntax

    {animation-delay: seconds;}

    Example

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    from{background-color: green;}
                    to{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 4s;
                    animation-delay: 2s;
                }
            </style>
        </head>
    <body>
        <div>Animation Begin after 2 seconds</div>
    </body>
    </html>

    How many times an Animation should run

    By default, an Animation runs only once and after running the element comes back to its original styling. But using the animation-iteration-count property we can set how many times an animation should be run.

    Example

    Create a color-changing animation that runs three times.

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    0%{background-color: green;}
                    25%{background-color: red;}
                    50%{background-color: yellow;}
                    75%{background-color: violet ;}
                    100%{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 6s;
                    animation-iteration-count: 3;
                }
            </style>
        </head>
    <body>
        <div>Color Changing Animation</div>
    </body>
    </html>

    To run animation for the infinite times set the animation-iteration-count to infinite

    Example

    CSS

                @keyframes box{
                    0%{background-color: green;}
                    25%{background-color: red;}
                    50%{background-color: yellow;}
                    75%{background-color: violet ;}
                    100%{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 6s;
                    animation-iteration-count: infinite;
                }

    CSS animation-direction Property

    The animation-direction property defines how should the animation perform on the element. By default, the animation starts from 0% and go to 100% but this flow can be altered or manipulated using animation-duration property. It can accept one of these four values

    • normal is the default value for animation-direction and in this the animation play from 0 to 100% in forward direction.
    • reverse run the animation in backward order 100% to 0% or to to
    • alternate first run the animation in forward order then backward.
    • alternate-reverse first, run the animation backward then forward.

    Example

    Play animation in reverse order

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    0%{background-color: green;}
                    25%{background-color: red;}
                    50%{background-color: yellow;}
                    75%{background-color: violet ;}
                    100%{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 6s;
                    animation-direction: reverse;
                }
            </style>
        </head>
    <body>
        <div></div>
    </body>
    </html>

    Speed rate of the Animation

    With the help of animation-timing-function property, we can define the speed rate of the animation. This property does not affect the overall duration of animation specified using animation-duration property, it just paces up some parts and slows down other parts of the animation and completes the animation in a specified duration. It can accept one of these 6 values.

    • ease start the animation at slow speed, then fast, and at last end with slow speed.
    • linear value maintains the constant speed.
    • ease - in value commences the animation with slow speed.
    • ease-out value ends the animation with slow speed.
    • ease-in-out start and end the animation with slow speed.
    • cubic-bezier(a,b,c,d) let us define a custom speed for the animation.

    Example

    Create animation with a slow starting speed.

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    0%{background-color: green;}
                    25%{background-color: red;}
                    50%{background-color: yellow;}
                    75%{background-color: violet ;}
                    100%{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: green;
                    animation-name: box;
                    animation-duration: 6s;
                    animation-timing-function: ease-in;
                }
            </style>
        </head>
    <body>
        <div></div>
    </body>
    </html>

    Animation fill-mode property

    By default, if an element animation-duration ends or it does not have infinite animation-infinite-count, then it comes back to its normal styling. But this behavior of the element coming back to its defined styling can be altered using animation-fill-mode property. The animation-fill-mode defines a target styling for the element once the animation is over. It can accept one of the following properties.

    • none is the default value for the animation-fill-mode property and it does not specify any specific animation styling to the element once the animation is over.
    • forwards value specifies that the element will have the last keyframe or 100% styling properties.
    • backwords value specifies that the element will have the first keyframe or 0% styling properties, and completion of the animation.
    • both values specify that the element will have the expending properties in both directions.

    Example

    <!DOCTYPE html>
    <html>
        <head>
            <style>
                @keyframes box{
                    0%{background-color: green;}
                    25%{background-color: red;}
                    50%{background-color: yellow;}
                    75%{background-color: violet ;}
                    100%{background-color: blue;}
                }
                div{
                    width: 70px;
                    height:70px;
                    background-color: black;
                    animation-name: box;
                    animation-duration: 6s;
                    animation-delay: 1s;
                    animation-fill-mode: forwards;
                }
            </style>
        </head>
    <body>
        <div></div>
    </body>
    </html>

    The Animation property

    The animation property is a shorthand for all the properties we have mentioned above.

    Syntax

    {animation: animation-name animation-duration animation-timing-function animation-delay animation-iteration-count animation-duration}

    Example CSS

     {
      animation-name: box;
      animation-duration: 6s;
      animation-timing-function: linear;
      animation-delay: 1s;
      animation-iteration-count: infinite;
      animation-direction: alternate;
    }

    Or

    {
      animation: example 6s linear 1s infinite alternate;
    }

    Summary

    • Animation changes the styling of an element smoothly.
    • The @keyframe rule defines what animation styling should be performed on the element.
    • The animation-name defines the name of the animation that used along with @keyframe rule.
    • The animation-duration set the time duration of animation completion
    • The animation-timing-function alters the rate of animation.
    • The animation-delay property halts the animation commencement for a specified amount of time.
    • The animation-iteration-count can repeat the animation more than one time or infinite.
    • The animation-direction property specifies the flow of keyframe rule execution.