<div class="wrapper">
  <div class="snow layer1 delay"></div>
  <div class="snow layer1"></div>
  <div class="snow layer2 delay"></div>
  <div class="snow layer2"></div>
  <div class="snow layer3 delay"></div>
  <div class="snow layer3"></div>

</div>
body {
  margin: 0;
}

.wrapper {
  width: 100vw;
  height: 100vh;
  background: radial-gradient(farthest-corner at 30vw 20vh, #7397a1 1%, #3f2c41 100%);
}

$s1: "";
$s2: "";
$s3: "";

@for $i from 1 through 400 {
  $s1: $s1 + random(1000)*0.1vw + " " + random(1000)*0.1vh + " " + 0 + " " + random(50)*-0.01rem + #fff;
  $s2: $s2 + random(1000)*0.1vw + " " + random(1000)*0.1vh + " " + 0 + " " + random(50)*-0.01rem + #fff;
  $s3: $s3 + random(1000)*0.1vw + " " + random(1000)*0.1vh + " " + 0 + " " + random(50)*-0.01rem + #fff;
  @if $i < 400 {
    $s1: $s1 + ",";
    $s2: $s2 + ",";
    $s3: $s3 + ",";
  }
}

.snow {
  border-radius: 50%;
  opacity: .8;
  position: absolute;
  top: -100vh;
  animation-name: fall;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
}

.layer1 {
  width: 1.5rem;
  height: 1.5rem;
  filter: blur(1.5px);
  box-shadow: #{$s1};
  
  animation-duration: 6s;
  &.delay {
    animation-delay: -3s;
  }
}

.layer2 {
  width: 1.2rem;
  height: 1.2rem;
  filter: blur(3px);
  box-shadow: #{$s2};
  
  animation-duration: 8s;
  &.delay {
    animation-delay: -4s;
  }
}

.layer3 {
  width: 0.8rem;
  height: 0.8rem;
  filter: blur(6px);
  box-shadow: #{$s3};
  
  animation-duration: 10s;
  &.delay {
    animation-delay: -5s;
  }
}

@keyframes fall {
  100% { transform: translateY(200vh); }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.