画像をCSSアニメーションを使って自動でスライドさせる方法

CSS

画像をCSSアニメーションを使って自動でスライドさせることが出来たので、備忘録として残すことにします。

画像をCSSアニメーションを使って自動でスライドさせる方法

HTML

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<h2>無限スクロール</h2>
<div class="slider">
<ul class="slide-show">
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
</ul>
<ul class="slide-show">
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
</ul>
<ul class="slide-show">
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
</ul>
</div>
<h2>無限スクロール(ホバーしたらストップする)</h2>
<div class="slider slide-paused" ontouchstart="">
<ul class="slide-show">
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
</ul>
<ul class="slide-show">
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
</ul>
<ul class="slide-show">
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
<li class="content">
<img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
</li>
</ul>
</div>
<h2>無限スクロール</h2> <div class="slider"> <ul class="slide-show"> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> </ul> <ul class="slide-show"> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> </ul> <ul class="slide-show"> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> </ul> </div> <h2>無限スクロール(ホバーしたらストップする)</h2> <div class="slider slide-paused" ontouchstart=""> <ul class="slide-show"> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> </ul> <ul class="slide-show"> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> </ul> <ul class="slide-show"> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> <li class="content"> <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt=""> </li> </ul> </div>
<h2>無限スクロール</h2>
<div class="slider">
    <ul class="slide-show">
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
    </ul>
    <ul class="slide-show">
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
    </ul>
    <ul class="slide-show">
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
    </ul>
</div>

<h2>無限スクロール(ホバーしたらストップする)</h2>
<div class="slider slide-paused" ontouchstart="">
    <ul class="slide-show">
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
    </ul>
    <ul class="slide-show">
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
    </ul>
    <ul class="slide-show">
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
        <li class="content">
            <img src="https://yujiromx.com/wp-content/uploads/2022/01/1.jpg" alt="">
        </li>
    </ul>
</div>

ulタグを3つ用意する理由は、横に自動スライドした際にulタグが1つだど自動スライドが途中で切れてしまうからです。

CSS

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
body {
padding: 50px 20px;
}
h2 {
margin-bottom: 30px;
}
.content {
width: 33.333vw;
margin: 0 2.604vw;
}
.slider {
overflow: hidden;
display: flex;
align-items: center;
margin-bottom: 100px;
}
.slide-show {
display: flex;
justify-content: left;
-webkit-animation: loop 20s infinite linear 1s both;
animation: loop 20s infinite linear 1s both;
}
/* loopのアニメーション */
@-webkit-keyframes loop {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
@keyframes loop {
from {
transform: translateX(0);
}
to {
transform: translateX(-100%);
}
}
/* 画像をhoverした時にストップさせる */
.slide-paused:hover .slide-show {
-webkit-animation-play-state: paused;
animation-play-state: paused;
}
body { padding: 50px 20px; } h2 { margin-bottom: 30px; } .content { width: 33.333vw; margin: 0 2.604vw; } .slider { overflow: hidden; display: flex; align-items: center; margin-bottom: 100px; } .slide-show { display: flex; justify-content: left; -webkit-animation: loop 20s infinite linear 1s both; animation: loop 20s infinite linear 1s both; } /* loopのアニメーション */ @-webkit-keyframes loop { from { transform: translateX(0); } to { transform: translateX(-100%); } } @keyframes loop { from { transform: translateX(0); } to { transform: translateX(-100%); } } /* 画像をhoverした時にストップさせる */ .slide-paused:hover .slide-show { -webkit-animation-play-state: paused; animation-play-state: paused; }ぽ
body {
  padding: 50px 20px;
}
h2 {
  margin-bottom: 30px;
}
.content {
  width: 33.333vw;
  margin: 0 2.604vw;
}
.slider {
  overflow: hidden;
  display: flex;
  align-items: center;
  margin-bottom: 100px;
}
.slide-show {
  display: flex;
  justify-content: left;
  -webkit-animation: loop 20s infinite linear 1s both;
  animation: loop 20s infinite linear 1s both;
}

/* loopのアニメーション */
@-webkit-keyframes loop {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-100%);
  }
}
@keyframes loop {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-100%);
  }
}

/* 画像をhoverした時にストップさせる */
.slide-paused:hover .slide-show {
  -webkit-animation-play-state: paused;
  animation-play-state: paused;
}ぽ

ポイントはCSSアニメーションの指定と、画像をhoverした際にストップさせる実装です。

まとめ

以上が、画像をCSSアニメーションを使って自動でスライドさせる方法です。