.wrap-loader
  .loader
    - for (var i = 1; i <= 4; i++)
      .box
    .wrap-text  
      .text
        each val in ['L', 'O', 'A', 'D', 'I', 'N', 'G', '...']
          span= val
  .loader-text wait please
View Compiled
// Fonts & Typography
@import url('https://fonts.googleapis.com/css?family=Exo:300');
$main-font: 'Exo', sans-serif;
$letterDim: 40px;
$letterSize: 2em;
$letterEasing: ease-in;
$letterSpeed: 8s;

// Colors
$white: #fff;
$black: #000;
$palette: #4185F3, #33A753, #FABB04, #E94234;

// Loader Settings
$dim: 20rem;
$fadeStart: .1;
$fadeEnd: 1;
$speed: 4s;
$easing: ease-out;
$type: normal;  //normal / reverse / alternate / alternate-reverse


// Generals
*,*::before,*::after{
  box-sizing: border-box;
}
body{
  font-family: $main-font;
  font-size: 16px;
}


// Loader styles
.wrap-loader{
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background: $black;
}
.loader{
  position: relative;
  width: $dim;
  height: $dim;
  &::before{
    z-index: 1;
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: $dim / 2.3;
    height: $dim / 2.3;
    background: $black;
    border-radius: 50%;
  }
  
  .box{
    position: absolute;
    width: $dim / 2;
    height: $dim / 2;
    overflow: hidden;
    &::before{
      content: '';
      position: absolute;
      width: 100%;
      height: 100%;
      border-radius: 50%;
      opacity: $fadeStart;
    } 
    &:nth-child(1){
      top: 0;
      left: 0;
      &::before{
        top: 50%;
        left: 50%;
        background: nth($palette, 1);
        animation: lightMe1 $speed $easing infinite $type;
      }
    }
    &:nth-child(2){
      top: 0;
      right: 0;
      &::before{
        top: 50%;
        right: 50%;
        background: nth($palette, 2);
        animation: lightMe2 $speed $easing infinite $type;
      }
    }
    &:nth-child(3){
      bottom: 0;
      right: 0;
      &::before{
        bottom: 50%;
        right: 50%;
        background: nth($palette, 3);
        animation: lightMe3 $speed $easing infinite $type;
      }
    }
    &:nth-child(4){
      bottom: 0;
      left: 0;
      &::before{
        bottom: 50%;
        left: 50%;
        background: nth($palette, 4);
        animation: lightMe4 $speed linear infinite $type;
      }
    }
  }
  
  .wrap-text{
    z-index: 2;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: $letterDim;
    height: $letterDim;
    overflow: hidden;
  }
  .text{
    position: relative;
    width: $letterDim;
    height: $letterDim;
    line-height: $letterDim;
    animation: slider $letterSpeed $letterEasing infinite;
    span{
      display: block;
      width: $letterDim;
      height: $letterDim;
      line-height: $letterDim;
      text-align: center;
      font-size: $letterSize;
      color: $white;
    }
  }
}

.loader-text{
  color: $white;
  transform: translateY(-2rem);
  letter-spacing: 6px;
  opacity: .2;
  animation: blink $speed/4 $easing infinite alternate;
}


// Animations
@keyframes lightMe1{
  0%{
    opacity: $fadeStart;
  }
  25%{
    opacity: $fadeEnd;
  }
  100%{
    opacity: $fadeEnd;
  }
}
@keyframes lightMe2{
  0%{
    opacity: $fadeStart;
  }
  25%{
    opacity: $fadeStart;
  }
  50%{
    opacity: $fadeEnd;
  }
  100%{
    opacity: $fadeEnd;
  }
}
@keyframes lightMe3{
  0%{
    opacity: $fadeStart;
  }
  50%{
    opacity: $fadeStart;
  }
  75%{
    opacity: $fadeEnd;
  }
  100%{
    opacity: $fadeEnd;
  }
}
@keyframes lightMe4{
  0%{
    opacity: $fadeStart;
  }
  75%{
    opacity: $fadeStart;
  }
  100%{
    opacity: $fadeEnd;
  }
}

@keyframes slider{
  0%{
    transform: translateY(0);
  }
  10.5%{
    transform: translateY(0);
  }
  12.5%{
    transform: translateY(-$letterDim);
  }
  23%{
    transform: translateY(-$letterDim);
  }
  25%{
    transform: translateY(-$letterDim * 2);
  }
  35%{
    transform: translateY(-$letterDim * 2);
  }
  37.5%{
    transform: translateY(-$letterDim * 3);
  }
  47.5%{
    transform: translateY(-$letterDim * 3);
  }
  50%{
    transform: translateY(-$letterDim * 4);
  }
  60%{
    transform: translateY(-$letterDim * 4);
  }
  62.5%{
    transform: translateY(-$letterDim * 5);
  }
  72.5%{
    transform: translateY(-$letterDim * 5);
  }
  75%{
    transform: translateY(-$letterDim * 6);
  }
  85%{
    transform: translateY(-$letterDim * 6);
  }
  87.5%{
    transform: translateY(-$letterDim * 7);
  }
  100%{
    transform: translateY(-$letterDim * 7);
  }
}

@keyframes blink{
  from{
    opacity: .2;
  }
  to{
    opacity: .75;
  }
}
View Compiled
/*

  Simple Loader with CSS3 Animations
  
*/

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.