.hearts-container { display: block; position: fixed; overflow: hidden; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 10; contain: layout paint; } .heart { will-change: transform; position: fixed; bottom: -10%; z-index: 15; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: default; animation-name: heart-fall, heart-shake; animation-duration: 14s, 5s; animation-timing-function: linear, ease-in-out; animation-iteration-count: infinite, infinite; } @keyframes heart-fall { 0% { bottom: -10%; } 100% { bottom: 110%; } } @keyframes heart-shake { 0%, 100% { transform: translateX(0) } 50% { transform: translateX(80px) } } .heart:nth-of-type(0) { left: 1%; animation-delay: 0s, 0s } .heart:nth-of-type(1) { left: 10%; animation-delay: 1s, 1s } .heart:nth-of-type(2) { left: 20%; animation-delay: 6s, .5s } .heart:nth-of-type(3) { left: 30%; animation-delay: 4s, 2s } .heart:nth-of-type(4) { left: 40%; animation-delay: 2s, 2s } .heart:nth-of-type(5) { left: 50%; animation-delay: 8s, 3s } .heart:nth-of-type(6) { left: 60%; animation-delay: 6s, 2s } .heart:nth-of-type(7) { left: 70%; animation-delay: 2.5s, 1s } .heart:nth-of-type(8) { left: 80%; animation-delay: 1s, 0s } .heart:nth-of-type(9) { left: 90%; animation-delay: 3s, 1.5s } .heart:nth-of-type(10) { left: 25%; animation-delay: 2s, 0s } .heart:nth-of-type(11) { left: 65%; animation-delay: 4s, 2.5s }