<div class="rocket-loader">
  <div class="rocket">
    <div class="rocket-extras"></div>
    <div class="jet"><span></span></div>
  </div>
</div>
@import url('https://fonts.googleapis.com/css?family=Ubuntu:400,400i,700,700i');


*, *:before, *:after {
	margin: 0;
	padding: 0;
	word-break: break-all;
  box-sizing: border-box;
}

html {
  font-size: 10px;
}

body {
	font-family: 'Ubuntu', sans-serif;
	color: #6e6e6e;
	font-size: 1.6rem;
}

header, footer {
  display: block;
}

a, a:link, a:visited {
  color: lighten(black, 30);
  text-decoration: none;
}

img {
	border: 0;
}

ul {
	list-style: none;
}

.center {
  margin: auto;
  width: 110rem;
}


.rocket-loader { // Moving particles
  animation: moveParticles 6s linear infinite;
  background: linear-gradient(90deg, gray, transparent 10%) 0 20%/180% 0.2rem repeat-x, linear-gradient(90deg, gray, transparent 20%) 0 80%/150% 0.2rem repeat-x, linear-gradient(90deg, gray, transparent 5%) 0 65%/100% 0.2rem repeat-x, linear-gradient(90deg, gray, transparent 5%) 0 40%/220% 0.2rem repeat-x, linear-gradient(0, white, white);
  border: 1px solid rgba(0, 0, 0, 0.1);
  border-radius: 50%;
  box-shadow: inset 0 0 60px 0 rgba(0, 0, 0, 0.1);
  height: 125px;
  left: 50%;
  overflow: hidden;
  position: absolute;
  text-align: center;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 125px;
  
  &::before {
    animation: blink 1s infinite;
    bottom: 6%;
    content: "Loading...";
    font-size: 12px;
    left: 0;
    position: absolute;
    right: 0;
  }
}

@keyframes moveParticles {
  100% {
    background-position-x: -500rem;
  }
}

.rocket {
  animation: moveRocket 2s linear infinite;
  background: lightgray;
  background: linear-gradient(darken(red, 20), red, darken(red, 20));
  border-left: 3px solid rgba(0, 0, 0, 0.4);
  border-radius: 50%/30%;
  height: 15%;
  left: 50%;
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 35%;
  
  &::before,
  &::after {
    content: "";
    position: absolute;
  }
  
  &::before { // Rocket fin
    animation: rotateFins 1s infinite;
    background: darken(lightgray, 10);
    background: linear-gradient(darken(red, 20), red, darken(red, 20));
    border: 2px solid transparent;
    border-radius: 0 50% 50% 0;
    height: 140%;
    top: 50%;
    transform: translate(0, -50%);
    left: 6px;
    width: 20%;
  }
  
  &::after { // Rocket tip
    border: 7px solid transparent;
    border-left: 14px solid rgba(0, 0, 0, 0.4);
    border-radius: 15%;
    right: -16px;
    top: 2px;
  }
  
  &-extras { // Rocket body mark
    animation: moveExtras 1s infinite;
    background: rgba(0, 0, 0, 0.4);
    height: 2px;
    left: 12px;
    margin: -2px 0 0;
    position: absolute;
    top: 50%;
    transform: translate(0, -50%);
    width: 10px;

    &::before,
    &::after {
      content: "";
      position: absolute;
    }

    &::before { // Rocket eye
      background: white;
      border-radius: 50%;
      height: 5px;
      right: -7px;
      top: -1px;
      width: 5px;
    }

    &::after { // Rocket 3rd small fin
      background: darken(red, 10);
      border-top: 1px solid darken(red, 30);
      height: 1px;
      left: -10px;
      top: 1px;
      width: 6px;
    }
  }
}

@keyframes moveRocket {
  0%, 100% {
    transform: translate(-50%, calc(-50% - 1rem));
  }
  
  50% {
    transform: translate(-50%, calc(-50% + 1rem));
  }
}

@keyframes rotateFins {
  0%, 100% {
    height: 140%;
  }
  
  50% {
    border-top: 2px solid darken(red, 30);
    border-bottom: 2px solid darken(red, 30);
    height: 110%;
  }
}

@keyframes moveExtras {
  0%, 100% {
    transform: translate(0, calc(-50% + 0.1rem));
  }
  
  50% {
    transform: translate(0, calc(-50% - 0.1rem));
  }
}

.jet {
  height: 10px;
  left: -10px;
  position: absolute;
  top: calc(50% - 5px);
  width: 10px;
  
  &::before, &::after, span {
    animation: moveSmoke 0.3s infinite;
    background: darken(orange, 6);
    border-radius: 50%;
    content: "";
    filter: blur(2px);
    height: 8px;
    left: -6px;
    opacity: 1;
    position: absolute;    
    transform: translate(0, 0) scale(1);
    top: 1px;
    width: 15px;
  }
  
  &::after {
    animation-delay: 0.1s;
  }
  
  span {
    animation-delay: 0.2s;
  }
}

@keyframes moveSmoke {  
  100% {
    filter: blur(3px);
    opacity: 0;
    transform: translate(-40px, 0) scale(2);
  }
}

@keyframes blink {
  0%, 100% {
    opacity: 1;
  }
  
  50% {
    opacity: 0.2;
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.