【CSS】画像を無限横スクロールさせる方法

CSS

今回は、CSSで画像を無限横スクロールさせる方法についてまとめました。

Webページのfooter付近に配置されているスポンサー企業のアイコン画像でよく実装されています。

【CSS】画像を無限横スクロールさせる方法

デモサイトはこちら。

HTML

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<div class="scroll">
<ul class="scroll-list">
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113280_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113240_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113230_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113150_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113120_256.png" alt="">
</li>
</ul>
<ul class="scroll-list">
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113280_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113240_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113230_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113150_256.png" alt="">
</li>
<li>
<img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113120_256.png" alt="">
</li>
</ul>
</div>
<div class="scroll"> <ul class="scroll-list"> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113280_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113240_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113230_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113150_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113120_256.png" alt=""> </li> </ul> <ul class="scroll-list"> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113280_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113240_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113230_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113150_256.png" alt=""> </li> <li> <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113120_256.png" alt=""> </li> </ul> </div>
<div class="scroll">
    <ul class="scroll-list">
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113280_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113240_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113230_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113150_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113120_256.png" alt="">
        </li>
    </ul>
    <ul class="scroll-list">
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113280_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113240_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113230_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113150_256.png" alt="">
        </li>
        <li>
            <img src="https://yujiromx.com/wp-content/uploads/2022/06/icon_113120_256.png" alt="">
        </li>
    </ul>
</div>

親要素scrollの中に子要素scroll-listを入れ子にします。

scroll-listを2つ用意した理由は、横スクロールした際に画像が途中で途切れないようにするためです。

CSS

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
@keyframes loop {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
.scroll {
margin: 20px;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
height: 180px;
overflow-y: hidden;
border: 2px solid;
padding: 30px;
max-width: 500px;
}
.scroll-list {
display: flex;
align-items: center;
animation: loop infinite linear 10s both;
li {
min-width: 150px;
}
}
@keyframes loop { from { transform: translateX(0); } to { transform: translateX(-100%); } } .scroll { margin: 20px; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; height: 180px; overflow-y: hidden; border: 2px solid; padding: 30px; max-width: 500px; } .scroll-list { display: flex; align-items: center; animation: loop infinite linear 10s both; li { min-width: 150px; } }
@keyframes loop {
    from {
      transform: translateX(0);
    }
    to {
      transform: translateX(-100%);
    }
}

.scroll {
    margin: 20px;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    height: 180px;
    overflow-y: hidden;
    border: 2px solid;
    padding: 30px;
    max-width: 500px;    
}
.scroll-list {
    display: flex;
    align-items: center;
    animation: loop infinite linear 10s both;
    li {
        min-width: 150px;
    }
}

無限横スクロールにするポイントは、親要素scrollをoverflow-y: hidden;ではみ出した画像を非表示にし、画像を横並びにします。

そしてkeframesで指定したCSSアニメーションで無限スクロールさせたらOKです。

あと画像の幅が指定されていないとスクロールが途中で切れたりするので、画像の幅も指定しておくと良いでしょう。

まとめ

以上が、CSSで画像を無限横スクロールさせる方法でした。