Using CSS For Animation- Beginner’s Guide

In today’s digital era, websites do not necessarily need to be static, you can also create dynamic experiences to captivate and engage your users. CSS (Cascading Style Sheets) is one of the most robust tools to create visually impressive and interactive web designs. You can use CSS for animation to bring your web design ideas to life through animations, transitions, and transformations. This blog is all about how you can use CSS for animation and other related techniques to enhance your web projects in aspects of design.

Understanding CSS Animations

CSS Animations allow web developers to add motion and visual interest to the web elements. You can apply them to various properties including opacity, color, size, and position, it also enables you to create attractive effects. The starting and ending states of an element’s properties are defined by keyframes, which are the basis for CSS animations. The browser will then interpolate these keyframes to produce smooth, fluid animations.

  • CSS Keyframes Animations

The fundamental component of CSS animations is CSS keyframes animations. They let you describe the characteristics of each step as well as define multiple  CSS keyframes or steps. You can make intricate and subtle animations by specifying intermediate states. Here is a representation of a straightforward keyframe animation that slides an element through the screen:

@keyframes slide-in { 0% { transform: translateX(-100%); } 100% { transform: translateX(0); } } .element { animation: slide-in 1s ease-in-out; }
Code language: CSS (css)

In the above-mentioned example, the slide-in animation moves the element from being positioned off the left side of the screen to its usual position. We have applied the animation using the animation shorthand property, stating the animation name, duration, and timing function.

  • Transition Effects

With CSS transitions, you can seamlessly animate changes in property value in a specified time duration. CSS transitions are activated according to the changes in CSS properties. They are useful specifically for adding subtle effects to elements like menu transitions or CSS hover effects. Below, we have mentioned an example of a transition effect that changes the BG color of a button on hover:

.button { background-color: blue; transition: background-color 0.3s ease; } .button:hover { background-color: red; }
Code language: CSS (css)

In this example, When the user hovers over the button, the background-color property changes from blue to red. The timing and duration of the transition effect are specified by the transition effect.

  • Transformations

You may change the size, location, and shape of elements with CSS transformations. To create striking effects, they can be paired with animations or transitions. The transformation functions translate(), rotate(), scale(), and skew() are often used. Here is a demonstration of how to use the transform property to rotate an element:

.element { transform: rotate(45deg); transition: transform 1s ease-in-out; } .element:hover { transform: rotate(180deg); }
Code language: CSS (css)
  • Animation Timing & Easing 

The visual aspects and feel of CSS animations are significantly impacted by timing and easing features. Many timing functions are offered by CSS, including easy, linear, ease-in, ease-out, and ease-in-out. You can create various effects by using these routines to regulate the acceleration and deceleration of animations. You can make animations that look good and feel natural by experimenting with different timing functions.

How To Use CSS For Animation?

In CSS, input animation refers to applying animation effects to input elements, such as text field checkboxes, radio buttons, dropdown menus, and buttons. These animations can enhance the user experience by providing visual feedback or creating an interactive and engaging interface.

Input animation can be achieved using CSS transition or CSS keyframe animation. Here are some examples of input animation using CSS.

  • Highlight On Focus

When an input element receives focus (for example, when the user clicks on it or uses the Tab key to navigate to it), you can highlight the input field by changing its background color, adding a border, or applying an animation to a box-shadow 


.form__group input:focus, .form__group input:valid { outline: none; border-bottom-color: #ffe600; }
Code language: CSS (css)
  • Placeholder Animation

You can animate the placeholder text of an input field so that it fades in/out when the field gains or loses focus. This can be useful for providing additional instructions or visual cues to the user.

HTML Code:

<div class="main__container"> <h1>Animation</h1> <form class="form__box"> <div class="form__group"> <input type="text" required/> <label>Name</label> </div> <div class="form__group"> <input type="text" required/> <label>Email</label> </div> <div class "form__group"> <input type="password" required/> <label>Password</label> </div> <button class="btn">Submit</button> </form> </div>
Code language: HTML, XML (xml)

CSS Code:

.main__container { text-align: center; } .form__box { max-width: 500px; background-color: #33c4d1; margin: auto; padding: 30px; } .form__group { position: relative; margin: 10px 0; width: 100%; } .form__group input { background-color: transparent; border: none; border-bottom: 1px solid #fff; display: block; width: 100%; padding: 15px 0 5px; font-size: 16px; color: #000; } .form__group input:focus, .form__group input:valid { outline: none; border-bottom-color: #ffe600; } .form__group label { position: absolute; top: 15px; left: 0; pointer-events: none; color: #fff; } .form__group label span { display: inline-block; font-size: 18px; min-width: 5px; transition: 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); } .form__group input:focus+label span, .form__group input:valid+label span { color: #ffe600; transform: translateY(-18px); }
Code language: CSS (css)

Custom Javascript:

const labels = document.querySelectorAll(".form__group label"); labels.forEach((label) => { label.innerHTML = label.innerText .split("") .map((letter, idx) => `<span style="transition-delay:${idx * 50}ms">${letter}</span>`) .join(""); });
Code language: JavaScript (javascript)
  • Checkbox / Radio Button Animation

When a checkbox or radio button is clicked or selected, you can apply a visual animation to indicate the selection state, such as a checkmark appearing or a color filling.

Checkbox Animation- 

You can use the ‘:checked’ pseudo-class and CSS animation to animate a checkbox. Here’s a demonstration that animates the look of a checkbox when checked:


<input type="checkbox" id="myCheckbox"> <label for="myCheckbox">Check me</label>
Code language: HTML, XML (xml)


input[type="checkbox"] { display: none; } input[type="checkbox"] + label:before { content: ""; display: inline-block; width: 20px; height: 20px; border: 2px solid #ccc; transition: border-color 0.3s ease; } input[type="checkbox"]:checked + label:before { border-color: #f00; animation: checkboxAnimation 0.5s ease-in-out; } @keyframes checkboxAnimation { 0% { transform: scale(0); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } }
Code language: CSS (css)

With the help of a label element and an a:before pseudo-element, we can in this example hide the DEFAULT checkbox input and create a unique visual representation. The checkbox animation set in checkboxAnimation keyframes is started when the checkbox is checked, and a border colour change is applied using the:checked selector.

A simple animation effect is produced by the checkboxAnimation keyframes, which gradually scale the checkbox from 0 to 1.2 and back to 1.

Radio-Button Animation-

Radio buttons can also be animated using CSS animation. Here is a demonstration of how a chosen radio button will animate its appearance:


<input type="radio" id="myRadio" name="myRadioGroup"> <label for="myRadio">Select me</label>
Code language: HTML, XML (xml)


input[type="radio"] { display: none; } input[type="radio"] + label:before { content: ""; display: inline-block; width: 20px; height: 20px; border-radius: 50%; border: 2px solid #ccc; transition: border-color 0.3s ease; } input[type="radio"]:checked + label:before { border-color: #f00; animation: radioAnimation 0.5s ease-in-out; } @keyframes radioAnimation { 0% { transform: scale(0); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } }
Code language: CSS (css)

In the above mentioned example, we have followed an approach like that of checkbox animation, The CSS radio bustton input is unrevealed and the custom representation is created by using a ‘label’ element and a ‘:before’ pseudo-element. The ‘:checked’ selector has been used to show a color changed border and activate the animation specified in keyframes ‘radioAnimation’ .

The ‘radioAnimation’  keyframes  is used to scale the radio button from O to 1.2 and back to 1 which further creates a subtle animation effect.

After applying the above mentioned steps, you have to adjust the styling, animation properties, and keyframes based on your design preferences. 

By using these techniques, you can animate radio buttons and checkboxes to provide delightful visual feedback and beautify user interaction on your web forms.

  • Button Hover Effect

When a user hovers over a button, you can apply animation effects such as changing the button’s color, size or adding a subtle transition to make it visually interactive and responsive.

Button HTML:

<button <em>class</em>="button--itzel">Sign Up</button>
Code language: JavaScript (javascript)


.button--itzel { border: none; padding: 0px; overflow: hidden; width: 255px; position: relative; min-height: 70px; background-color: blue; color: #fff; margin-top: 30px; } .button--itzel::before { content: 'Submit'; position: absolute; top: 0; background-color: yellow; left: 0; bottom: 0; width: 100%; color: #000; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; border: 2px solid transparent; border-radius: inherit; transform: translate3d(0, 100%, 0) translate3d(0, -2px, 0); transform-origin: 50% 100%; } .button--itzel.button--border-thin::before { border: 1px solid; transform: translate3d(0, 100%, 0) translate3d(0, -1px, 0); } .button--itzel.button--border-thick::before { border: 3px solid; transform: translate3d(0, 100%, 0) translate3d(0, -3px, 0); } .button--itzel::before, .button--itzel .button__icon { transition: transform 0.3s; transition-timing-function: cubic-bezier(0.75, 0, 0.125, 1); } .button--itzel .button__icon { position: absolute; top: 100%; left: 50%; padding: 20px; font-size: 20px; transform: translate3d(-50%, 0, 0); } .button--itzel > span { display: block; padding: 20px; transition: transform 0.3s, opacity 0.3s; transition-delay: 0.3s; } .button--itzel:hover::before { transform: translate3d(0, 0, 0); border: 2px solid white; } .button--itzel:hover .button__icon { transition-delay: 0.1s; transform: translate3d(-50%, -100%, 0); } .button--itzel:hover > span { opacity: 0; transform: translate3d(0, -50%, 0); transition-delay: 0s; }
Code language: CSS (css)

CSS Animation Best Practices

Using CSS for animation opens up a pool of possibilities for designing engaging, intuitive, and interactive web designs. By utilizing CSS keyframe animations, transitions, and transformations, you can transform static elements into dynamic and grab your user’s attention further providing them with a better and more immersive browsing experience.

Below We have mentioned CSS Animation Best Practices which are essential to keep in mind while using CSS for animation:

  • Optimize Performance: Animations usually takes the involvement of a significant amount of system resources. You’ll have to optimize your animations by reducing the no. of animated properties and elements, so as to ensure that it works smoothly, Moreover, you should consider the usage of hardware acceleration and apply the ‘transform’ property to the animated elements whenever required and possible.
  • Browser Compatibility: CSS animations are mostly supported by most of the modern browsers however It is still essential to test your animations on all the browsers and versions. You should be aware of various vendor prefixes such as ‘-moz’, ‘-webkit-‘ and ‘-o-‘ for checking on compatibility.
  • Responsiveness: Ensure that your animations are responsive and can adjust to a variety of screen sizes and devices. To guarantee your animations scale and adjust correctly, think about using media queries and relative units (such as percentages or vw/vh).
  • Accessibility: Always emphasize accessibility when using CSS for animations. For users who could be visually challenged or have other problems, offer alternative content or design fallbacks. Be careful not to employ animations that could induce seizures or vertigo, and make sure that critical information is not only communicated through animations
  • Simple, Subtle & Purposeful Animations: Always keep in mind that your animations should improve the user experience rather than confuse or overwhelm them. Therefore, you need to keep animations subtle, intuitive, and in line with the overall design and outlook of your website. 


These are just a few examples, and the possibilities for using CSS for animation. You can combine various CSS properties and animation techniques to create unique and eye-catching effects for your input elements.

With the help of CSS animations, you may unleash your creativity and add uniqueness to your website designs. You can give your users visually appealing and captivating experiences by mastering keyframe animations, transitions, and transformations.

To get the intended result from your animations, don’t forget to explore, iterate, and enhance them. You can use CSS to make your web projects come to life and create engaging interactions that leave a lasting impression with a little practise and a keen eye for design.




Recent Post

Click to Copy