This is not a loop problem.
background-size: cover has terrible performance.
You can ease the pain by adding transform: translate3d(0,0,0) to the slides, but it will still be volatile.
Replacing the background with the actual image usually increases performance for me, like this script . Although, the larger the image, the slower the performance will be in any browser; rendering large moving images is difficult for them.
Then it's just a matter of calibrating and positioning the images, for which you can use something like:
.homepage-carousel-item > img, .homepage-carousel-info { position:absolute; } .homepage-carousel-item > img { min-width:100%; min-height:100%; width:auto; height:auto; top:50%; left:50%; transform:translate(-50%,-50%); }
If you need to support legacy browsers, then you run a routine through images for size and offset as it does .
There are other solutions that work only in certain browsers (for example, object-fit: cover ), but these options should work in all browsers.
source share