DEV Community


Loading Animation with pure CSS

moenupa profile image Moenupa WANG ・2 min read

This article introduces a method to create a simple loading animation with PURE CSS, as demonstrated below (powered by


This implementation needs only one line of HTML code, like what's below:

<div class="loading">Loading</div>
Enter fullscreen mode Exit fullscreen mode


Then we move on to the major part, the CSS code.

Because we have only one related html element, we use a :before or :after selector to implement the spinning circle. Setting its content, width, height, etc. to let it show up.

.loading, .loading:before {
  position: fixed;
  top: 50%;
  left: 50%;
  width: 16rem;
  height: 16rem;
.loading:before {
  content: "";
  border-radius: 50%;
  border: 1rem solid;
  border-color: black transparent;
Enter fullscreen mode Exit fullscreen mode

Then we will have two none-spinning quarter-circles, which is due to the border-color: black transparent; setting top/bottom's color to black, and left/right's color to transparent.


Note that position: fixed aligns the top-left corner to the 50%/50% position. so to align the center point to the center view point, we do the following modification to the css

.loading:before {
  margin: -5rem;

.loading {
  padding: 4.7rem 1rem;
  font-size: 2rem;
  text-align: center;
Enter fullscreen mode Exit fullscreen mode


Then we shall define the spinning animation, using CSS @keyframes to implement.

.loading:before {
  animation: loading 1.5s linear infinite;

@keyframes loading {
  from {
    transform: rotate(0deg);
  to {
    transform: rotate(360deg);
Enter fullscreen mode Exit fullscreen mode

You can also define the animation with keywords like 0% {...} 100% {...}.

Finally, a bit beautifying work and variable-replacement for future modification.

Discussion (0)

Editor guide