#sky
  .bird
    - for (var i = 0; i < 10; i++)
      .wind
    .bird_body
      .bird_head
      .bird_wing_left
        .bird_wing_left_top
      .bird_wing_right
        .bird_wing_right_top
      .bird_tail_left
      .bird_tail_right
View Compiled
@function randomColor() {
  @return rgba(random(100) + 100, random(100) + 100, random(55) + 200, 1);
}

body {
  background: #eef;
  height: 100vh;
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
}
#sky {
  margin-top: -60px;
  perspective: 400px;
  filter: drop-shadow(0px 150px 10px rgba(0, 0, 0, 0.2));
  
  // filter+transfrom-style do not working on Firefox...
  @-moz-document url-prefix() {
    filter: none;
  }
  div {
    transform-style: preserve-3d;
  }
  .bird {
    animation: fly 10000ms linear infinite;
    
    .wind {
      position: absolute;
      left: 50%;
      width: 4px;
      height: 200px;
      margin-left: -2px;
      border-radius: 999px;
      overflow: hidden;
      
      @for $i from 1 through 11 {
        &:nth-child(#{$i}) {
          transform: translate3d(#{random(400) - 200}px, #{random(300) - 150}px, #{random(200) - 100}px) rotateY(90deg);
          
          &::before {
            content: '';
            position: absolute;
            width: 4px;
            height: 300px;
            background: rgba(100, 200, random(255), 0.3);
            border-radius: 999px;
            transform: translateY(-300px);
            animation: wind #{random(2000) + 1000}ms #{random(4000) + 1000}ms linear infinite;
          }
        }
      }
    }
    
    &_body {
      position: relative;
      width: 30px;
      height:40px;
      background: randomColor(); 
    }
    &_head {
      position: absolute;
      top: -30px;
      border-right: 15px solid transparent;
      border-bottom: 30px solid randomColor();
      border-left: 15px solid transparent;
      transform-origin: 50% 100%;
      transform: rotateX(-20deg);
    }
    &_wing_left {
      position: absolute;
      left: -30px;
      height: 30px;
      border-right: 30px solid randomColor();
      border-bottom: 10px solid transparent;
      transform-origin: 100% 0;
      animation: wingLeft 1000ms cubic-bezier(0.360, 0.100, 0.160, 1.000) infinite alternate;
      
      &_top {
        position: absolute;
        left: -30px;
        border-right: 30px solid randomColor();
        border-bottom: 30px solid transparent;
        transform-origin: 100% 0;
        animation: wingLeft 1000ms cubic-bezier(0.545, 0.080, 0.520, 0.975) infinite alternate;
      }
    }
    &_wing_right {
      position: absolute;
      left: 30px;
      height: 30px;
      border-left: 30px solid randomColor();
      border-bottom: 10px solid transparent;
      transform-origin: 0 0;
      animation: wingRight 1000ms cubic-bezier(0.360, 0.100, 0.160, 1.000) infinite alternate;
      
      &_top {
        position: absolute;
        border-left: 30px solid randomColor();
        border-bottom: 30px solid transparent;
        transform-origin: 0 0;
        animation: wingRight 1000ms cubic-bezier(0.545, 0.080, 0.520, 0.975) infinite alternate;
      }
    }
    &_tail_left {
      position: absolute;
      top: 40px;
      border-right: 30px solid transparent;
      border-top: 40px solid randomColor();
      transform-origin: 50% 0;
      transform: rotateX(-20deg);
    }
    &_tail_right {
      position: absolute;
      top: 40px;
      border-left: 30px solid transparent;
      border-top: 40px solid randomColor();
      transform-origin: 50% 0;
      transform: rotateX(-20deg);
    }
  }
}

@keyframes fly {
  0% {
    transform: rotateX(-120deg) rotateZ(0deg) rotateX(10deg);
  }
  100% {
    transform: rotateX(-120deg) rotateZ(360deg) rotateX(10deg);
  }
}
@keyframes wingLeft {
  0% {
    transform: rotateY(-40deg);
  }
  100% {
    transform: rotateY(40deg);
  }
}
@keyframes wingRight {
  0% {
    transform: rotateY(40deg);
  }
  100% {
    transform: rotateY(-40deg);
  }
}
@keyframes wind {
  0% {
    transform: translateY(-300px);
  }
  100% {
    transform: translateY(200px);
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.