svg loader

by Alexandru Gatea

HTML

<div class="loader">
  <svg id="loaderShape" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 109.4">
    <path d="M0,0C121.44,0,101.4,109.4,250,109.4S378.56,0,500,0Z" />
  </svg>

  <div class="loader-content">
    <p class="loader-text">Gathering Data</p>
    <div class="loader-spinner">
      <span class="loader-percent">100 <span>%</span></span>
<!--       <div class="sk-cube-grid">
        <div class="sk-cube sk-cube1"></div>
        <div class="sk-cube sk-cube2"></div>
        <div class="sk-cube sk-cube3"></div>
        <div class="sk-cube sk-cube4"></div>
        <div class="sk-cube sk-cube5"></div>
        <div class="sk-cube sk-cube6"></div>
        <div class="sk-cube sk-cube7"></div>
        <div class="sk-cube sk-cube8"></div>
        <div class="sk-cube sk-cube9"></div>
      </div> -->
      <div class="planet"></div>
    </div>
  </div>

</div>

SCSS

@import url('https://fonts.googleapis.com/css2?family=Lato&family=Raleway:wght@400;500;600;700;900&display=swap');


$loaderWidth: minmax(350px, 26vw);
$loaderContentWidth: minmax(200px, 15vw);

$brand-dark: #0e0727;
$brand-dark-medium: #221c3a;
$brand-light: #a59fb8;
$brand-accent: #42B98B;

$brand-title: 'Raleway',
sans-serif;
$brand-text: 'Lato',
sans-serif;

.loader {
  position: fixed;
  display: grid;
  grid-template-columns: $loaderWidth;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  transform-origin: top center;
  overflow: hidden;
  
  #loaderShape {
    path {
      fill: $brand-dark;
    }
  }
  
  &-content {
    position: absolute;
    display: grid;
    grid-template-columns: $loaderContentWidth;
    grid-gap: 10px;
    align-items: center;
    justify-items: center;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    color: $brand-light;
    padding: 10px 0;
  }
  &-text {
    font-family: $brand-title;
    text-transform: uppercase;
    font-size: 12px;
    line-height: 12px;
    font-weight: 900;
    letter-spacing: 2px;
    text-align: center;
  }
  
  &-percent {
    font-family: $brand-text;
    font-size: 12px;
    position: absolute;
  }
  
  &-spinner {
    display: flex;
    align-items: center;
    justify-content: center;
  }
}
.sk-cube-grid {
  width: 44px;
  height: 44px;
  border-radius: 44px;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-gap: 1px;
}

.sk-cube-grid .sk-cube {
  width: 100%;
  height: 100%;
  border-radius: 2px;
  
  background-color: $brand-accent;
  animation: sk-cubeGridScaleDelay 0.1s infinite linear; 
}
.sk-cube-grid .sk-cube1 {background-color: $brand-light; animation-delay: 0.2s; }
.sk-cube-grid .sk-cube2 {background-color: $brand-accent;animation-delay: 0.3s; }
.sk-cube-grid .sk-cube3 {background-color: $brand-light;animation-delay: 0.4s; }
.sk-cube-grid .sk-cube4 {background-color: $brand-accent;animation-delay: 0.1s; }
.sk-cube-grid .sk-cube5 {background-color:...