【CSSだけ】画像が横に流れ続ける無限ループの作り方 - IE11対応済み
今回はCSSだけで画像が横に流れる無限ループの作り方を紹介します。デモサイトを作成したので、表示を確認してみてください。
前提条件は以下
- 画像を左方向と、右方向に無限ループさせる
- IE11対応済み
説明環境は以下
- macOS Catalina v10.15.5
- Visual Studio Code v1.56.2
【CSSだけ】画像が横に流れ続ける無限ループの作り方
CSSだけで実装できるので難しいことはありません。画像のサイズだけではすべて揃えておきましょう。
画像が左方向に流れる無限ループについて説明していきます。
MTMLに書くこと
<div class="d-demo">
<div class="d-demo__wrap">
<ul class="d-demo__list d-demo__list--left">
<li class="d-demo__item"><img src="./images/test01.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test02.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test03.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test04.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test05.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test06.jpg" alt></li>
</ul>
<ul class="d-demo__list d-demo__list--left">
<li class="d-demo__item"><img src="./images/test01.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test02.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test03.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test04.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test05.jpg" alt></li>
<li class="d-demo__item"><img src="./images/test06.jpg" alt></li>
</ul>
</div>
</div>
6枚の画像を画面いっぱいに並べて、それを無限ループさせます。ループに切れめができないように同じ画像の列が2つあるイメージです。(以下の6枚1列が、横に2つ並んでいる、ということ)
CSSに書くこと
/*
右から左へ
----------------------------*/
@keyframes infinity-scroll-left {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
/*
IE11対策
----------------------------*/
_:-ms-lang(x)::-ms-backdrop,
.d-demo {
display: -ms-grid;
overflow: hidden;
}
/*----------------------------*/
.d-demo__wrap {
display: flex;
overflow: hidden;
}
.d-demo__list {
display: flex;
list-style: none;
}
.d-demo__list--left{
animation :infinity-scroll-left 95s infinite linear 0.5s both;
}
.d-demo__item {
width: calc(100vw / 6);
}
.d-demo__item > img{
width: 100%;
}
35行目にあるanimationで無限ループの指定をしています。ページが表示されて0.5秒後に、95秒かけて6枚の画像すべてを左端まで移動させています。
どのように動かすかの指定は、4行目にある@keyframesで指定しています。右から左ではなく、左から右へ画像を無限ループさせたい場合は@keyframesは以下のようになります。
あとはHTML側でもクラス名d-demo__list--rightを指定してあげれば左から右へ画像が動きます。
/*
左から右へ
----------------------------*/
@keyframes infinity-scroll-right {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0%);
}
}
.d-demo__list--right{
animation :infinity-scroll-right 95s infinite linear 0.5s both;
}
IE11については、2022年6月15日にはサポートが終了するため対応はいらない気がしますが、保険して指定しています。
/*
IE11対策
----------------------------*/
_:-ms-lang(x)::-ms-backdrop,
.d-demo {
display: -ms-grid;
overflow: hidden;
}
/*----------------------------*/
IE対策については以下の記事を参考にしてみてください。
マウスオーバーで一時停止させるには?
マウスオーバーしたときに、一時的に動きを止めることが可能です。
やり方はCSSで以下にように指定するだけです。スマホでもタップすれば一時停止します。
.demo__wrap:hover .d-demo__list--left{
animation-play-state: paused;
}
デモサイトで一時停止するか確認してみてください。
さいごに
今回はCSSだけで画像が横に流れる無限ループの作り方を紹介しました。少し前まではJavaScriptを使わないと実装できないことがCSSだけでもできるようになりました。
基本的にはサイトに動きをつける装飾としての役割が多いですが、画像にリンクをつけることも可能です。