<div class="spinners">
  <h1>SPINNERS</h1>
  <div class="spinner spinner-1">
    <div class="spinner spinner-1--sub">
      <div class="spinner spinner-1--sub" id="subsub">
      </div>
    </div>
  </div>
  <div class="spinner spinner-2"></div>
  <div class="spinner spinner-3">
    <div class="spinner-3__container">
      <div class="spinner-3__bar spinner-3__bar--1"></div>
      <div class="spinner-3__bar spinner-3__bar--2"></div>
      <div class="spinner-3__bar spinner-3__bar--3"></div>
    </div>
  </div>
  <div class="spinner spinner-4">
    <div class"spinner-4__ring spinner-4__ring--1"></div>
    <div class"spinner-4__ring spinner-4__ring--2"></div>
    <div class"spinner-4__ring spinner-4__ring--3"></div>
  </div>
  <div class="spinner spinner-5">
    <div class="spinner-5__face">
      <div class="spinner-5__eye spinner-5__eye--1"></div>
      <div class="spinner-5__eye spinner-5__eye--2"></div>
      <div class="spinner-5__mouth"></div>
    </div>
  </div>
  <div class="spinner spinner-6"></div>
</div>
// variables
$primary: #00e673;

// general
body {
  background-color: #f2f2f2;
  padding: 10px;
  font-family: sans-serif;
}

h1 {
  color: $primary;
}

// spinners
.spinners {
  background-color: #fff;
  padding: 30px;
  text-align: center;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
}

.spinner {
  background-color: #eee;
  height: 100px;
  width: 100px;
  border-radius: 50%;
  position: relative;
  margin: 50px;
  display: inline-block;
  
  &:before, &:after {
    content: '';
    display: block;
    height: 100px;
    width: 100px;
    border-radius: 50%;
  }
}

.spinner-1 {
  &:before, &:after {
    border: 4px solid transparent;
    position: absolute;
    top: -4px;
    left: -4px;
  }
  
  &:before {
    border-bottom-color: $primary;
    animation: orbit 2s linear infinite;
  }
  
  &:after {
    border-top-color: $primary;
    animation: orbit 1s linear infinite;
  }
  
  &--sub {
    position: absolute;
    top: -44%;
    left: -44%;
    height: 80px;
    width: 80px;
    
    &:before, &:after {
      position: absolute;
      top: 0;
      left: 0;
      height: 80px;
      width: 80px;
      border: 4px solid transparent;
    }
    
    &:before {
      border-bottom-color: $primary;
      animation: orbit 1s linear infinite;
    }
    
    &:after {
      border-top-color: $primary;
      animation: orbit 2s linear infinite;
    }
    
    #subsub {
      position: absolute;
      top: -50%;
      left: -50%;
      height: 60px;
      width: 60px;
      
      &:before, &:after {
        height: 60px;
        width: 60px;
        position: absolute;
        top: 0;
        left: 0;
      }
      
      &:before {
        border-bottom-color: $primary;
        animation: orbit 2s linear infinite;
      }

      &:after {
        border-top-color: $primary;
        animation: orbit 1s linear infinite;
      }
    }
  }
}

.spinner-2 {
  border-radius: 5%;
  border: 4px solid $primary;
  animation: round 4s ease-in-out infinite;
  
  &:before {
    border-radius: 5%;
    height: 70px;
    width: 70px;
    border: 4px solid $primary;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    animation: round 4s ease-in-out .2s infinite;
  }
  
  &:after {
    border-radius: 5%;
    height: 40px;
    width: 40px;
    border: 4px solid $primary;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    animation: round 4s ease-in-out .2s infinite;
  }
}

.spinner-3 {
  border-radius: 0;
  
  &__container {
    height: 100%;
    width: 100%;
    position: absolute;
    top: 0;
    left: 0;
  }
  
  &__bar {
    height: 20px;
    width: auto;
    background-color: $primary;
    margin: 10px;
    
    &--1 {
      animation: stretch 2s ease-in-out .2s infinite;
    }
    
    &--2 {
      animation: stretch 2s ease-in-out .4s infinite;
    }
    
    &--3 {
      animation: stretch 2s ease-in-out .6s infinite;
    }
  }
}

.spinner-4 {
  border-radius: 0;
  
  &:before {
    height: 25px;
    width: 25px;
    border: 5px solid $primary;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    animation: to_square 2s ease-in-out infinite;
  }
  
  &:after {
    height: 90px;
    width: 90px;
    border-radius: 0%;
    border: 5px solid $primary;
    animation: to_circle 2s ease-in-out infinite;
  }
}

.spinner-5 {
  animation: rotate 5s ease-in-out infinite;
  
  &__face {
    height: 100px;
    width: 100px;
    position: absolute;
    top: 0;
    left: 0;
  }
  
  &__eye {
    height: 10px;
    width: 10px;
    border-radius: 50%;
    background-color: $primary;
    display: inline-block;
    animation: blink 1s linear infinite;
    
    &--1 {
      position: absolute;
      top: 40%;
      left: 10%;
    }
    
    &--2 {
      position: absolute;
      top: 40%;
      left: 80%;
    }
  }
  
  &__mouth {
    content: '';
    display: block;
    height: 60px;
    width: 30px;
    border-radius: 50%;
    border: 3px solid transparent;
    border-bottom-color: $primary;
    position: absolute;
    top: -12%;
    left: 30%;
  }
}

.spinner-6 {
  
}

// keyframes
@keyframes orbit {
  0% {
    transform: rotate(0deg);
  }
  
  100% {
    transform: rotate(360deg);
  }
}

@keyframes round {
  0%, 100%{
    border-radius: 5%;
  }
  
  50% {
    border-radius: 50%;
    transform: rotate(360deg);
  }
}

@keyframes stretch {
  0%, 100% {
    width: 10px;
  }
  
  50% {
    width: 80%;
  }
}

@keyframes to_square {
  0%, 100% {
    border-radius: 50%;
  }
  
  50% {
    border-radius: 0%;
    height: 60px;
    width: 60px;
  }
}

@keyframes to_circle {
  0%, 100% {
    border-radius: 0%;
  }
  
  50% {
    border-radius: 50%;
    transform: scale(.15);
  }
}

@keyframes rotate {
  0%, 100% {
    transform: rotate(0deg);
  }
  
  50% {
    transform: rotate(360deg);
  }
}

@keyframes blink {
  0% {
    height: 0px;
  }
  
  25% {
    height: 10px;
  }
  
  50% {
    height: 10px;
  }
  
  100% {
    height: 0px;
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.