DEV Community

Cover image for Let's Implement a Really Cool Loading Animation with Only CSS or Sass πŸ‘©β€πŸŽ¨πŸ‘¨β€πŸŽ¨
Renan Ferro
Renan Ferro

Posted on

5

Let's Implement a Really Cool Loading Animation with Only CSS or Sass πŸ‘©β€πŸŽ¨πŸ‘¨β€πŸŽ¨

Hey guys, how are you?!

I'm thinking about creating some small, direct articles to talk/implement/show something cool, like:

  • An interesting Javascript thing
  • A cool CSS animation
  • An interesting Angular tip

And other things in a simple, demonstrative and direct way! So let's try it and see how it goes!

So, let's start it!


🎨 Loading Animation

First, we need to create the css or sass file. I'll show how we can implement animation with css and sass.

So please create the css or sass file and import it into your project!

The animation will look like below:

Image description

The animations are not cool in the gif because it is not in high quality and my tool broke the gif a little.

Now, let's implement it!


🧩 The HTML Balls Structure:

Basically we need a div and three span with the ball selector, so the structure will be like below:



<div class="content-balls">
  <span class="ball-0"></span>
  <span class="ball-1"></span>
  <span class="ball-2"></span>
</div>


Enter fullscreen mode Exit fullscreen mode

πŸ‘©β€πŸŽ¨ CSS Implementation:

First, we will implement it with just css. So, we will implement it in css:

  • The content style of the balls (To center the balls)
  • The style of balls (Called ball-0, ball-1, ball-2)
  • Keyframe animation (Called animatedBall to make ball transitions)


.content-balls {
    position: relative;
    text-align: center;
    padding: 1rem 0;
}

.ball-0 {
    background-color: #dc3545;
    padding: 0.4rem;
    border-radius: 50%;
    margin: 0 0.25rem;
    display: inline-block;
    animation: animatedBall 1s ease-in;
    animation-iteration-count: infinite;
    animation-delay: 0s;
}

.ball-1 {
    background-color: #0dcaf0;
    padding: 0.4rem;
    border-radius: 50%;
    margin: 0 0.25rem;
    display: inline-block;
    animation: animatedBall 1s ease-in;
    animation-iteration-count: infinite;
    animation-delay: 0.25s;
}

.ball-2 {
    background-color: #ffc107;
    padding: 0.4rem;
    border-radius: 50%;
    margin: 0 0.25rem;
    display: inline-block;
    animation: animatedBall 1s ease-in;
    animation-iteration-count: infinite;
    animation-delay: 0.5s;
}

@keyframes animatedBall {
    0% {
      transform: translateY(0);
    }
    25% {
      transform: translateY(50%);
    }
    50% {
      transform: translateY(70%);
    }
    75% {
      transform: translateY(-50%);
    }
    100% {
      transform: translateY(0);
    }
}


Enter fullscreen mode Exit fullscreen mode

πŸ‘¨β€πŸŽ¨ SASS Implementation:

With sass we can improve the code structure and do the same thing with less code (Sass is really cool, if you don't know it, please learn it!)

Then, the structure will be as below:



@for $item from 0 through 2 {
  .ball-#{$item} {
    padding: .4rem;
    border-radius: 50%;
    margin: 0 .25rem;
    display: inline-block;
    animation: animatedBall 1s ease-in;
    animation-iteration-count: infinite;
    animation-delay: #{$item * .25}s;
  }
}

.content-balls {
    position: relative;
    text-align: center;
    padding: 1rem 0;
}

@keyframes animatedBall {
  0% {
    transform: translateY(0);
  }
  25% {
    transform: translateY(50%);
  }
  50%{
    transform: translateY(70%);
  }
  75% {
    transform: translateY(-50%);
  }
  100%{
    transform: translateY(0);
  }
}


Enter fullscreen mode Exit fullscreen mode

🧠 Understanding the block's of code:

Let's look and understand some interesting parts of the codes.

🎯 Balls Structure:

Let's understand some interesting properties in the .ball-* class structure:

  • Using CSS:


.ball-* {
    padding: 0.4rem;
    border-radius: 50%;
    margin: 0 0.25rem;
    display: inline-block;
    animation: animatedBall 1s ease-in;
    animation-iteration-count: infinite;
    animation-delay: 0s; // This property has variations
}


Enter fullscreen mode Exit fullscreen mode
  • Using SASS:

To optimize our development we can use @for from sass, which is an excellent option because all of our ball classes share the same properties:



@for $item from 0 through 2 {
  .ball-#{$item} {
    padding: .4rem;
    border-radius: 50%;
    margin: 0 .25rem;
    display: inline-block;
    animation: animatedBall 1s ease-in;
    animation-iteration-count: infinite;
    animation-delay: #{$item * .25}s;
  }
}


Enter fullscreen mode Exit fullscreen mode
  • animation-iteration-count: Property so that the animation is infinite, it does not end.
  • animation-delay: Important property, you can see that each class has a type of delay, this causes each ball to be animated after a certain time in relation to the other.

🎯 Transition Structure:



@keyframes animatedBall {
  0% {
    transform: translateY(0);
  }
  25% {
    transform: translateY(50%);
  }
  50%{
    transform: translateY(70%);
  }
  75% {
    transform: translateY(-50%);
  }
  100%{
    transform: translateY(0);
  }
}


Enter fullscreen mode Exit fullscreen mode

Here is the core of the animation, we transition the balls in the Y shape making them go from bottom to top using @keyframes and the animation percentage.


And now we have our wonderful animation, now we can use it anywhere, making our website more beautiful and with a better user experience!

Even though the animation is simple, it's always cool to do some to practice our creativity.

You can see them working on my website, take a look at how they look: Live Demo

I hope you liked it and that this animation helps you or inspires you to create others!

If you have any questions, suggestions or anything else, please leave a comment!

See you soon 😁🀘

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, β€œnot bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay