February 24, 2026

Infinite Scroll Company Logo Carousel (Using CSS Only)

First, Create the two container like this

<div id='container'>
	<div id='img-wrapper'>
    <!-- content -->
  </div>
</div>

And insert the logos

<div class='container'>
	<div class='img-wrapper'>
    <img class='logo' alt='oo-company-logo' src='01.png' />
    <img class='logo' alt='oo-company-logo' src='02.png' />
    <img class='logo' alt='oo-company-logo' src='03.png' />
    <img class='logo' alt='oo-company-logo' src='04.png' />
    <img class='logo' alt='oo-company-logo' src='05.png' />
    <img class='logo' alt='oo-company-logo' src='06.png' />
    <img class='logo' alt='oo-company-logo' src='07.png' />
    <img class='logo' alt='oo-company-logo' src='08.png' />
    <img class='logo' alt='oo-company-logo' src='09.png' />
    <img class='logo' alt='oo-company-logo' src='10.png' />
  </div>
</div>

Final, Use CSS for make beautiful and magic things!

@keyframes slide {
  from {
    transform: translateX(0);
  }
  to {
    /* 
      -180px is a width of one round (all images scrolling on one round)
      roundWidth = images.length * (imageWidth + iconGap)
    */
    transform: translateX(-180px);
  }
}

.container {
   padding: 0px;
   white-space: nowrap;
   overflow: hidden;
   /* Make fade in & fade out filter */
  -webkit-mask-image: linear-gradient(to right, transparent 0, black 128px, black calc(100% - 128px), transparent 100%);
  mask-image: linear-gradient(to right, transparent 0, black 128px, black calc(100% - 128px), transparent 100%);
}

.container:hover .img-wrapper {
  animation-play-state: paused;
}

.img-wrapper {
  display: flex;
  gap: 8px;
  animation: 145s slide 1.8s infinite linear;
  white-space: nowrap;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.img-wrapper img {
  object-fit: contain;
  flex-shrink: 0;
}