DEV Community

Stanley
Stanley

Posted on

CSS ANIMATION

OUTLINE:

Here is a comprehensive outline for a tutorial on CSS animations:

  1. Introduction to CSS animations - Explanation of what CSS animations are and how they can be used to animate transitions from one CSS style configuration to another.
  2. Components of CSS animations - Overview of the two components of CSS animations: a style describing the CSS animation and a set of keyframes that indicate the start and end states of the animation's style, as well as possible intermediate waypoints.
  3. Advantages of CSS animations - Discussion of the key advantages of using CSS animations over traditional script-driven animation techniques, including ease of use, performance, and efficiency.
  4. Configuring an animation - Detailed explanation of how to create a CSS animation sequence by styling the element you want to animate with the animation property or its sub-properties, including timing, duration, and other details.
  5. Animation sub-properties - In-depth exploration of the sub-properties of the animation property, including animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, and animation-timing-function.
  6. Defining the animation sequence using keyframes - Step-by-step guide to defining the appearance of an animation by establishing one or more keyframes using the @keyframes at-rule, including how to use percentages to indicate the time during the animation sequence at which keyframes take place.
  7. Examples and interactive demos - Hands-on practice with creating and configuring CSS animations using examples and interactive demos.

Introduction to CSS animations

CSS animations are a powerful tool for creating smooth, engaging animations on web pages. They allow you to animate transitions from one CSS style configuration to another, providing a way to create complex, interactive effects with just a few lines of code.

At its core, a CSS animation is made up of two parts: a style describing the animation, and a set of keyframes that indicate the start and end states of the animation's style, as well as any intermediate waypoints. By defining these keyframes, you can create animations that smoothly transition between different styles, creating engaging visual effects that can enhance the user experience on your website.

One of the key advantages of using CSS animations over traditional script-driven animation techniques is their ease of use. With CSS animations, you can create complex animations with just a few lines of code, without having to worry about the intricacies of JavaScript or other scripting languages. Additionally, CSS animations are typically more performant and efficient than script-driven animations, making them a great choice for creating smooth, responsive animations on your website.

CSS animations are also highly customizable and flexible. You can use the various sub-properties of the animation property to control the timing, duration, and other details of your animations. This allows you to create animations that are tailored to your specific needs and requirements.

Overall, CSS animations are a powerful tool for creating engaging, interactive effects on your website. By understanding how they work and how to use them effectively, you can create complex animations that will enhance the user experience and make your website stand out from the crowd.

Components of CSS animations

CSS animations are made up of two main components: a style describing the CSS animation and a set of keyframes that indicate the start and end states of the animation's style, as well as possible intermediate waypoints.

The first component, the style describing the CSS animation, is defined using the animation property or its sub-properties. This property allows you to specify the details of the animation, such as its duration, timing function, and delay. You can also use the sub-properties of the animation property to control these details individually.

The second component, the set of keyframes, is defined using the @keyframes at-rule. This rule allows you to specify the start and end states of the animation's style, as well as any intermediate waypoints. You can use percentages to indicate the time during the animation sequence at which each keyframe takes place.

By combining these two components, you can create complex animations that smoothly transition between different styles. For example, you could use keyframes to define an animation that changes an element's background color from red to blue over a period of 2 seconds. Then, by applying this animation to an element using the animation property, you could create a smooth transition between these two states.

Overall, understanding the two components of CSS animations - the style describing the animation and the set of keyframes - is essential for creating effective animations on your website.

Advantages of CSS animations

CSS animations have several key advantages over traditional script-driven animation techniques. Some of these advantages include:

  1. Ease of use: CSS animations are relatively easy to use and require less coding than script-driven animations. With just a few lines of code, you can create complex animations that would be much more difficult to achieve using JavaScript or other scripting languages.
  2. Performance: CSS animations are typically more performant than script-driven animations. This is because the browser can optimize the rendering of CSS animations, making them run more smoothly and efficiently.
  3. Efficiency: CSS animations are also more efficient than script-driven animations. Since they are handled by the browser's rendering engine, they can take advantage of hardware acceleration and other performance optimizations that are not available to script-driven animations.

These are just a few of the many advantages of using CSS animations. By using this powerful tool, you can create engaging, interactive effects on your website with ease and efficiency.

Configuring an animation
Configuring a CSS animation involves styling the element you want to animate with the animation property or its sub-properties. This allows you to specify the details of the animation, such as its timing, duration, and other details.

To create a CSS animation sequence, you first need to define the animation using the @keyframes at-rule. This rule allows you to specify the start and end states of the animation's style, as well as any intermediate waypoints. You can use percentages to indicate the time during the animation sequence at which each keyframe takes place.

Once you have defined your keyframes, you can apply the animation to an element by styling it with the animation property. This property is a shorthand property that combines several sub-properties into a single declaration. These sub-properties include animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, and animation-play-state.

Each of these sub-properties allows you to control a specific aspect of the animation. For example, the animation-duration property specifies the length of time that an animation should take to complete one cycle, while the animation-timing-function property specifies the pacing of the animation.

By using these sub-properties, you can create complex animations that are tailored to your specific needs and requirements. You can control the timing, duration, and other details of your animations to create engaging visual effects that enhance the user experience on your website.

Overall, configuring a CSS animation involves defining keyframes using the @keyframes at-rule and then applying the animation to an element using the animation property or its sub-properties. By understanding how to use these tools effectively, you can create complex animations that smoothly transition between different styles.

*Animation sub-properties *

The animation property in CSS is a shorthand property that combines several sub-properties into a single declaration. These sub-properties allow you to control various aspects of the animation, including its timing, duration, and other details. Here is an in-depth exploration of the sub-properties of the animation property:

  1. animation-delay: This property specifies the amount of time to wait from the time the animation is applied to the element before the animation begins. This property can take a value specified in seconds or milliseconds. For example, animation-delay: 2s specifies a delay of 2 seconds, while animation-delay: 2000ms specifies a delay of 2000 milliseconds (equivalent to 2 seconds). This example shows how to use the animation-delay property to delay the start of an animation by 2 seconds:
.example {
  animation-name: example-animation;
  animation-duration: 4s;
  animation-delay: 2s;
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-direction: This property specifies whether the animation should play forwards, backwards, or alternate between playing forwards and backwards. This property can take one of four values: normal, reverse, alternate, or alternate-reverse. The normal value specifies that the animation should play forwards, while the reverse value specifies that it should play backwards. The alternate value specifies that the animation should alternate between playing forwards and backwards, while the alternate-reverse value specifies that it should alternate between playing backwards and forwards.

This example shows how to use the animation-direction property to make an animation alternate between playing forwards and backwards:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
  animation-direction: alternate;
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-duration: This property specifies the length of time that an animation should take to complete one cycle. This property can take a value specified in seconds or milliseconds. For example, animation-duration: 4s specifies a duration of 4 seconds, while animation-duration: 4000ms specifies a duration of 4000 milliseconds (equivalent to 4 seconds).

This example shows how to use the animation-duration property to specify that an animation should take 4 seconds to complete one cycle:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-fill-mode: This property specifies how the element should be styled before and after the animation is executed. This property can take one of four values: none, forwards, backwards, or both. The none value specifies that the element should not retain any styles applied by the animation before or after it is executed. The forwards value specifies that the element should retain the style defined by the final keyframe after the animation has completed. The backwards value specifies that the element should retain the style defined by the first keyframe before the animation begins. The both value specifies that the element should retain both the style defined by the first keyframe before the animation begins and the style defined by the final keyframe after it has completed.

This example shows how to use the animation-fill-mode property to specify that an element should retain its final style after the animation has completed:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
  animation-fill-mode: forwards;
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-iteration-count: This property specifies the number of times the animation should repeat. This property can take a positive integer value or the keyword infinite. A positive integer value specifies the number of times the animation should repeat, while the infinite keyword specifies that it should repeat indefinitely.

This example shows how to use the animation-iteration-count property to specify that an animation should repeat 3 times:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
  animation-iteration-count: 3;
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-name: This property specifies the name of the @keyframes at-rule that defines the keyframes for the animation.

This example shows how to use the animation-name property to specify the name of the @keyframes at-rule that defines the keyframes for an animation:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
}

@keyframes example-animation {
  from { background-color: red; }
  to { background-color: blue; }
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-play-state: This property can take one of two values: running or paused. The running value specifies that the animation is currently running, while the paused value specifies that it is currently paused.

This example shows how to use the animation-play-state property to pause and resume an animation:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
}

.paused {
  animation-play-state: paused;
}
Enter fullscreen mode Exit fullscreen mode
  1. animation-timing-function: The animation-timing-function property in CSS specifies how intermediate property values are calculated for each keyframe during the animation. This property can take one of several predefined keyword values, such as linear, ease, ease-in, ease-out, and ease-in-out.

  2. linear: The linear value specifies that the animation should progress at a constant pace from start to finish. This means that the intermediate property values are calculated using a linear function, resulting in a smooth and steady animation.

  3. ease: The ease value specifies that the animation should start slowly, accelerate in the middle, and then slow down again at the end. This creates a smooth and natural-looking animation that mimics the way objects move in the real world.

  4. ease-in: The ease-in value specifies that the animation should start slowly and then gradually accelerate. This creates an animation that starts off gently and then picks up speed as it progresses.

  5. ease-out: The ease-out value specifies that the animation should start quickly and then gradually decelerate. This creates an animation that starts off fast and then slows down as it reaches its end.

  6. ease-in-out: The ease-in-out value specifies that the animation should start slowly, accelerate in the middle, and then slow down again at the end. This creates a smooth and natural-looking animation that is similar to the ease value, but with more pronounced acceleration and deceleration.

This example shows how to use the animation-timing-function property to specify that an animation should use the ease-in-out timing function:

.example {
  animation-name: example-animation;
  animation-duration: 4s;
  animation-timing-function: ease-in-out;
}
Enter fullscreen mode Exit fullscreen mode

In addition to these predefined keyword values, you can also use a cubic-bezier function or a step function to specify a custom timing function for your animation. A cubic-bezier function allows you to define your own curve for calculating intermediate property values, while a step function allows you to create animations with discrete steps.

Cubic-bezier function: The cubic-bezier function is a CSS timing function that allows you to create custom easing effects for animations and transitions. It is used with the animation-timing-function and transition-timing-function properties to specify how intermediate property values are calculated for each keyframe during the animation or transition.

A cubic-bezier curve is defined by four points: P0, P1, P2, and P3. In CSS, P0 and P3 are fixed as the coordinates are ratios. P0 is (0, 0) and represents the initial time and the initial state, while P3 is (1, 1) and represents the final time and the final state. The cubic-bezier function takes four arguments that represent the x and y coordinates of points P1 and P2, respectively. These points control the shape of the curve, allowing you to create custom easing effects.

Here is an example that demonstrates how to use the cubic-bezier function to create a custom easing effect for a transition:

.example {
  width: 100px;
  height: 100px;
  background: red;
  transition: width 2s;
  transition-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
}

.example:hover {
  width: 300px;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use the cubic-bezier function to specify a custom timing function for the transition property. The four arguments passed to the cubic-bezier function represent the x and y coordinates of points P1 and P2, respectively. These points control the shape of the curve, creating a custom easing effect for the transition.

When you hover over the element with class .example, its width will transition from 100px to 300px over a period of 2 seconds. The transition will use the custom easing effect specified by the cubic-bezier function.

Animation Shorthand Property
The animation shorthand property in CSS is used to specify multiple animation properties at once. It combines several sub-properties into a single declaration, allowing you to specify the details of an animation in a more concise and readable manner.

Here is the syntax for the animation shorthand property:

animation: [animation-name] [animation-duration] [animation-timing-function] [animation-delay] [animation-iteration-count] [animation-direction] [animation-fill-mode] [animation-play-state];
Enter fullscreen mode Exit fullscreen mode

Each of these sub-properties can be specified in any order, and any sub-properties that are not specified will take on their default values.

Here are some examples that demonstrate how to use the animation shorthand property:

  1. Specifying multiple animation properties: This example shows how to use the animation shorthand property to specify multiple animation properties at once:
.example {
  animation: example-animation 2s ease-in-out 1s infinite alternate;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use the animation shorthand property to specify the animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, and animation-direction properties all at once. The animation will have a name of example-animation, a duration of 2 seconds, an easing function of ease-in-out, a delay of 1 second, an iteration count of infinite, and a direction of alternate.

  1. Omitting unspecified properties: This example shows how to omit unspecified properties when using the animation shorthand property:
.example {
  animation: example-animation 2s;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we only specify the animation-name and animation-duration properties using the animation shorthand property. All other sub-properties will take on their default values.

  1. Using multiple animations: This example shows how to use the animation shorthand property to specify multiple animations for a single element:
.example {
  animation: example-animation-1 2s, example-animation-2 4s;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we use the animation shorthand property to specify two animations for the element with class .example. The first animation has a name of example-animation-1 and a duration of 2 seconds, while the second animation has a name of example-animation-2 and a duration of 4 seconds.

AnimationEvent

The AnimationEvent interface represents events providing information related to animations. It is part of the Web APIs and is used in conjunction with CSS animations. The AnimationEvent object has several properties that provide information about the animation, such as the animationName property, which contains the value of the animation-name that generated the animation, and the elapsedTime property, which gives the amount of time the animation has been running when the event fired.

Here is a list of the properties of the AnimationEvent interface:

  • animationName: This property returns a DOMString containing the value of the animation-name that generated the animation.
  • elapsedTime: This property returns a float giving the amount of time the animation has been running, in seconds, when the event fired. This value is not affected by the animation-play-state or the animation-delay CSS properties.
  • pseudoElement: This property returns a DOMString, starting with "::", containing the name of the pseudo-element that generated the animation, if any. If no pseudo-element was involved, an empty string is returned.

Here are some examples that demonstrate how to use these properties:

  1. Accessing AnimationEvent properties: This example shows how to access the properties of an AnimationEvent object within an event listener:
element.addEventListener('animationend', (event) => {
  console.log(`Animation ${event.animationName} ended after ${event.elapsedTime} seconds`);
});
Enter fullscreen mode Exit fullscreen mode
  1. Using AnimationEvent with addEventListener: This example shows how to use the addEventListener method to register an event listener for an animation event:
element.addEventListener('animationend', (event) => {
  console.log(`Animation ${event.animationName} ended`);
});
Enter fullscreen mode Exit fullscreen mode
  1. Using AnimationEvent with removeEventListener: This example shows how to use the removeEventListener method to unregister an event listener for an animation event:
const handleAnimationEnd = (event) => {
  console.log(`Animation ${event.animationName} ended`);
};

element.addEventListener('animationend', handleAnimationEnd);

// Later on...
element.removeEventListener('animationend', handleAnimationEnd);
Enter fullscreen mode Exit fullscreen mode
  1. Using AnimationEvent with inline event handlers: This example shows how to use inline event handlers to register an event listener for an animation event:
<div id="example" style="animation: example-animation 2s;" onanimationend="handleAnimationEnd(event)">
  ...
</div>

<script>
  function handleAnimationEnd(event) {
    console.log(`Animation ${event.animationName} ended`);
  }
</script>
Enter fullscreen mode Exit fullscreen mode
  1. Using AnimationEvent with jQuery: This example shows how to use jQuery to register an event listener for an animation event:
$('#example').on('animationend', (event) => {
  console.log(`Animation ${event.originalEvent.animationName} ended`);
});
Enter fullscreen mode Exit fullscreen mode

These examples demonstrate how you can use the properties of the AnimationEvent interface to interact with CSS animations through JavaScript, allowing you to create more dynamic and interactive web pages.

Defining the animation sequence using keyframes

Defining the animation sequence using keyframes is an essential step in creating CSS animations. The @keyframes at-rule in CSS is used to define the keyframes for an animation. Keyframes specify the styles that the element will have at certain times during the animation. By defining multiple keyframes, you can create complex animations that smoothly transition between different styles.

Each keyframe is defined using a percentage value that indicates the time during the animation sequence at which the keyframe takes place. For example, a keyframe defined with 0% represents the start of the animation, while a keyframe defined with 100% represents the end of the animation. You can also define intermediate keyframes using percentage values between 0% and 100%.

Here are 5 examples that demonstrate how to define the animation sequence using keyframes:

  1. Simple animation: This example shows how to create a simple animation that changes the background color of an element from red to blue over a period of 2 seconds:
@keyframes change-color {
  from { background-color: red; }
  to { background-color: blue; }
}

.example {
  animation-name: change-color;
  animation-duration: 2s;
}
Enter fullscreen mode Exit fullscreen mode
  1. Multiple keyframes: This example shows how to use multiple keyframes to create a more complex animation that changes the background color of an element from red to green to blue over a period of 4 seconds:
@keyframes change-color {
  0% { background-color: red; }
  50% { background-color: green; }
  100% { background-color: blue; }
}

.example {
  animation-name: change-color;
  animation-duration: 4s;
}
Enter fullscreen mode Exit fullscreen mode
  1. Intermediate waypoints: This example shows how to use intermediate waypoints to create an animation that moves an element from left to right and then back again over a period of 4 seconds:
@keyframes move {
  from { transform: translateX(0); }
  50% { transform: translateX(100px); }
  to { transform: translateX(0); }
}

.example {
  animation-name: move;
  animation-duration: 4s;
}
Enter fullscreen mode Exit fullscreen mode
  1. Multiple properties: This example shows how to animate multiple properties at once by defining keyframes for each property. In this example, we create an animation that changes the background color and position of an element over a period of 4 seconds:
@keyframes change-color-and-move {
  from {
    background-color: red;
    transform: translateX(0);
  }

  to {
    background-color: blue;
    transform: translateX(100px);
  }
}

.example {
  animation-name: change-color-and-move;
  animation-duration: 4s;
}
Enter fullscreen mode Exit fullscreen mode
  1. Animation shorthand: This example shows how to use the animation shorthand property to specify multiple animation properties at once. In this example, we create an animation that changes the background color of an element from red to blue over a period of 2 seconds, with a delay of 1 second before the animation starts:
@keyframes change-color {
  from { background-color: red; }
  to { background-color: blue; }
}

.example {
  animation: change-color 2s ease-in-out 1s;
}
Enter fullscreen mode Exit fullscreen mode

These examples demonstrate how you can use the @keyframes at-rule and percentages to define the animation sequence using keyframes. By establishing one or more keyframes, you can create complex animations that smoothly transition between different styles.
Sure! Here are some more examples that demonstrate how to define the animation sequence using keyframes:

  1. Bouncing ball: This example shows how to create an animation that simulates a bouncing ball using keyframes and the animation-timing-function property:
@keyframes bounce {
  0%, 20%, 50%, 80%, 100% {
    transform: translateY(0);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  40%, 43% {
    transform: translateY(-30px);
    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
  }

  70% {
    transform: translateY(-15px);
    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
  }

  90% {
    transform: translateY(-4px);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }
}

.example {
  animation-name: bounce;
  animation-duration: 2s;
}
Enter fullscreen mode Exit fullscreen mode
  1. Pulse effect: This example shows how to create a pulse effect by animating the transform property using keyframes:
@keyframes pulse {
  from { transform: scale3d(1,1,1); }

  50% { transform: scale3d(1.05,1.05,1.05); }

  to { transform: scale3d(1,1,1); }
}

.example {
  animation-name: pulse;
  animation-duration: 2s;
}
Enter fullscreen mode Exit fullscreen mode
  1. Fade in and out: This example shows how to create a fade in and out effect by animating the opacity property using keyframes:
@keyframes fade-in-out {
  from { opacity: 0; }

  to { opacity: 1; }
}

.example {
   animation-name: fade-in-out;
   animation-duration:2s;
   animation-iteration-count: infinite;
   animation-direction: alternate;
}
Enter fullscreen mode Exit fullscreen mode
  1. Rotate: This example shows how to create a rotation effect by animating the transform property using keyframes:
@keyframes rotate {
   from { transform: rotate(0deg); }
   to { transform: rotate(360deg); }
}

.example {
   animation-name: rotate;
   animation-duration:2s;
   animation-iteration-count: infinite;
}
Enter fullscreen mode Exit fullscreen mode
  1. Shake: This example shows how to create a shake effect by animating the transform property using keyframes:
@keyframes shake {
   from,
   to { transform: translateX(0); }

   /* Move left */
   10%, 
   /* Move right */
   /* Move left */
   /* Move right */
   /* Move left */
   /* Move right */
   /* Move left */
   /* Move right */
   /* Move left */
   /* Move right */
}

.example {
   animation-name: shake;
   animation-duration:.5s;
}
Enter fullscreen mode Exit fullscreen mode

CSS animations examples and interactive demos

Examples and interactive demos are a great way to get hands-on practice with creating and configuring CSS animations. By working through examples and experimenting with interactive demos, you can learn how to use the various properties and techniques involved in creating CSS animations, and gain a deeper understanding of how they work.

There are many resources available online that provide examples and interactive demos of CSS animations. Some popular sites that offer a wide range of examples and demos include CodePen¹, 1stWebDesigner⁴, Mockplus³, Slider Revolution⁵ and many others. These sites allow you to browse through a variety of CSS animation examples, and often provide the code for each example so you can see how it was created.

Interactive demos are particularly useful for learning about CSS animations, as they allow you to experiment with different properties and values in real-time. By adjusting the values of various properties, you can see how they affect the animation, and gain a better understanding of how to create the effects you want.

Overall, examples and interactive demos are an excellent way to get hands-on practice with creating and configuring CSS animations. By working through examples and experimenting with interactive demos, you can learn the techniques involved in creating CSS animations, and gain the skills you need to create your own animations.

(1) 75+ Mind-Blowing CSS Animation Examples (Free Code + Demos). .
(2) 150 Amazing Examples of CSS Animation & Effects - 1stWebDesigner. .
(3) 30 Cool CSS Animation Examples to Create Amazing Animation ... - Mockplus.
(4) Cool CSS Animation Examples You Can Use Too - Slider Revolution.
(5) 24 Creative and Unique CSS Animation Examples to Inspire Your Own.

Top comments (0)