Skip to content

Instantly share code, notes, and snippets.

@reanaagrawal
Created November 2, 2020 09:38
Show Gist options
  • Save reanaagrawal/207913d68f144fd04bc7a98893852a48 to your computer and use it in GitHub Desktop.
Save reanaagrawal/207913d68f144fd04bc7a98893852a48 to your computer and use it in GitHub Desktop.
Candy Cornfetti
<div class="confetti-land">
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
<div class="confetti"></div>
</div>
var confettiPlayers = [];
function makeItConfetti() {
var confetti = document.querySelectorAll('.confetti');
if (!confetti[0].animate) {
return false;
}
for (var i = 0, len = confetti.length; i < len; ++i) {
var candycorn = confetti[i];
candycorn.innerHTML = '<div class="rotate"><div class="askew"></div></div>';
var scale = Math.random() * .7 + .3;
var player = candycorn.animate([
{ transform: `translate3d(${(i/len*100)}vw,0,0) scale(${scale}) rotate(0turn)`, opacity: scale },
{ transform: `translate3d(${(i/len*100 + 10)}vw,100vh,0) scale(${scale}) rotate(${ Math.random() > .5 ? '' : '-'}2turn)`, opacity: 1 }
], {
duration: Math.random() * 3000 + 3000,
iterations: Infinity,
delay: -(Math.random() * 5000)
});
confettiPlayers.push(player);
}
}
makeItConfetti();
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/61811/web-animations-next-2.2.1.min.js"></script>
* {
box-sizing: border-box;
}
body {
background: #C4E4FF;
background: radial-gradient(circle, hsl(223, 20%,12%), hsl(223, 20%,22%));
overflow: hidden;
height: 100vh;
width: 100%;
user-select: none;
padding: 0;
margin: 0;
}
.confetti {
width: 1rem;
height: 1rem;
display: inline-block;
position: absolute;
top: -1rem;
left: 0;
z-index: 150;
}
.confetti .rotate {
animation: driftyRotate 1s infinite both ease-in-out;
perspective: 1000;
}
.confetti .askew {
background: linear-gradient(
var(--grad-direction, to bottom),
hsl(63, 100%, 50%) 25%,
hsl(23, 100%, 50%) 0% 66.667%,
hsl(43, 100%, 100%) 0% 100%);
transform: skewY(10deg);
width: 2rem;
height: 3.2rem;
animation: drifty 1s infinite alternate both ease-in-out;
perspective:1000;
clip-path: polygon(0% 0%, 100% 0%, 50% 100%);
}
.confetti:nth-of-type(7n) .askew {
animation-delay: -.6s;
animation-duration: 2.25s;
}
.confetti:nth-of-type(7n + 1) .askew {
animation-delay: -.879s;
animation-duration: 3.5s;
}
.confetti:nth-of-type(7n + 2) .askew {
animation-delay: -.11s;
animation-duration: 1.95s;
}
.confetti:nth-of-type(7n + 3) .askew {
animation-delay: -.246s;
animation-duration: .85s;
}
.confetti:nth-of-type(7n + 4) .askew {
animation-delay: -.43s;
animation-duration: 2.5s;
}
.confetti:nth-of-type(7n + 5) .askew {
animation-delay: -.56s;
animation-duration: 1.75s;
}
.confetti:nth-of-type(7n + 6) .askew {
animation-delay: -.76s;
animation-duration: 1.5s;
}
.confetti:nth-of-type(9n) .rotate {
animation-duration: 2s;
}
.confetti:nth-of-type(9n + 1) .rotate {
animation-duration: 2.3s;
}
.confetti:nth-of-type(9n + 2) .rotate {
animation-duration: 1.1s;
}
.confetti:nth-of-type(9n + 3) .rotate {
animation-duration: .75s;
}
.confetti:nth-of-type(9n + 4) .rotate {
animation-duration: 4.3s;
}
.confetti:nth-of-type(9n + 5) .rotate {
animation-duration: 3.05s;
}
.confetti:nth-of-type(9n + 6) .rotate {
animation-duration: 2.76s;
}
.confetti:nth-of-type(9n + 7) .rotate {
animation-duration: 7.6s;
}
.confetti:nth-of-type(9n + 8) .rotate {
animation-duration: 1.78s;
}
@keyframes drifty {
0% {
transform: skewY(10deg) translate3d(-250%, 0, 0);
}
100% {
transform: skewY(-12deg) translate3d(250%, 0, 0);
}
}
@keyframes driftyRotate {
0% {
transform: rotateX(0);
}
100% {
transform: rotateX(359deg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment