.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) } }