Direkt zur Hauptnavigation springen Direkt zum Inhalt springen

Ein Schmetterling mit animierten Flügeln CSS snippet

Der Schmetterling bewegt seine Flügel in unregelmäßigen Abständen, die sich sechsmal wiederholen. Da die Berechnung der Bewegung hohe Auswirkungen auf den CPU hat, wird die Animation nicht endlos wiederholt. Mit einem Schatten (Filter: Drop-Shadow...) wäre die Animation natürlich noch schöner, aber das frisst leider auch CPU.

So sieht der Schmetterling aus

Der Quellcode

CSS

html{
scroll-behavior: smooth;
will-change: transform;
}

.moving {
width:200px;
height:150px;
margin:auto;
padding:50px;
overflow:visible;
transform:rotate(-10deg);
}
.butterfly {
position:relative;
width:100%;
height:130%;
display: flex;
perspective: 290px;
}
img{
width:100%;
height:auto;
}
.b-body{
z-index: 2;
}
.wing-l{
margin-right: -21%;
}
.wing-r{
margin-left: -22%;
}
.wing-l, .wing-r{
transform-origin: 0% center;
transform-box: fill-box;
transform-style: preserve-3d;
animation-timing-function: cubic-bezier(.18,-0.05,.57,.95);
animation-iteration-count: 6;
animation-duration:20s; 
z-index: 1;
}
.wing-l{
animation-name: movel;
transform-origin: 100% bottom;
}
.wing-r{
animation-name: mover;
transform-origin: 0% bottom;
}

@keyframes movel{
0%{transform: rotatey(0deg);}
5%{transform: rotatey(45deg);}
10%{transform: rotatey(0deg);}
15%{transform: rotatey(45deg);}
20%{transform: rotatey(0deg);}
30%{transform: rotatey(0deg);}
35%{transform: rotatey(45deg);}
40%{transform: rotatey(0deg);}
60%{transform: rotatey(0deg);}
65%{transform: rotatey(45deg);}
70%{transform: rotatey(0deg);}
80%{transform: rotatey(0deg);}
85%{transform: rotatey(45deg);}
90%{transform: rotatey(0deg);}
100%{transform: rotatey(0deg);}
}
@keyframes mover{
0%{transform: rotatey(0deg);}
5%{transform: rotatey(-45deg);}
10%{transform: rotatey(0deg);}
15%{transform: rotatey(-45deg);}
20%{transform: rotatey(0deg);}
30%{transform: rotatey(0deg);}
35%{transform: rotatey(-45deg);}
40%{transform: rotatey(0deg);}
60%{transform: rotatey(0deg);}
65%{transform: rotatey(-45deg);}
70%{transform: rotatey(0deg);}
80%{transform: rotatey(0deg);}
85%{transform: rotatey(-45deg);}
90%{transform: rotatey(0deg);}
100%{transform: rotatey(0deg);}
}

HTML

<div class="moving">
  <div class="butterfly">
    <div class="wing-l"><img src="butterfly/wing-l.png"></div>
    <div class="b-body"><img src="butterfly/body.png"></div>
    <div class="wing-r"><img src="butterfly/wing-r.png"></div>
  </div>
</div>
back to top