Bouncing loader
Creates a bouncing loader animation.
<div class="bouncing-loader">
<div></div>
<div></div>
<div></div>
</div>
@keyframes bouncing-loader {
to {
opacity: 0.1;
transform: translate3d(0, -1rem, 0);
}
}
.bouncing-loader {
display: flex;
justify-content: center;
}
.bouncing-loader > div {
width: 1rem;
height: 1rem;
margin: 3rem 0.2rem;
background: #8385aa;
border-radius: 50%;
animation: bouncing-loader 0.6s infinite alternate;
}
.bouncing-loader > div:nth-child(2) {
animation-delay: 0.2s;
}
.bouncing-loader > div:nth-child(3) {
animation-delay: 0.4s;
}
Explanation
Note: 1rem
is usually 16px
.
@keyframes
defines an animation that has two states, where the element changesopacity
and is translated up on the 2D plane usingtransform: translate3d()
. Using a single axis translation ontransform: translate3d()
improves the performance of the animation..bouncing-loader
is the parent container of the bouncing circles and usesdisplay: flex
andjustify-content: center
to position them in the center..bouncing-loader > div
, targets the three childdiv
s of the parent to be styled. Thediv
s are given a width and height of1rem
, usingborder-radius: 50%
to turn them from squares to circles.margin: 3rem 0.2rem
specifies that each circle has a top/bottom margin of3rem
and left/right margin of0.2rem
so that they do not directly touch each other, giving them some breathing room.animation
is a shorthand property for the various animation properties:animation-name
,animation-duration
,animation-iteration-count
,animation-direction
are used.nth-child(n)
targets the element which is the nth child of its parent.animation-delay
is used on the second and thirddiv
respectively, so that each element does not start the animation at the same time.