cssだけで画像をフェードで切り替えるアニメ

実装サンプル

パターンA:白い画面が挟まる

パターンB:挟まらない

実装手順など解説

枚数によって秒数指定がずれるので、枚数は可変ではありません!!!(重要
スライドにしたい画像を全て一定の枠内にposition: absolute;で重ねて配置します。画像のサイズは同じにしておく。
共通でopacity:0とアニメーションを付与。
初期値でopacity0が必要なので、他アニメーションとの併用が難しい場合があります。
2枚目以降はanimation-delay
でアニメーション開始自体を遅らせる。
秒数が大事。
1枚に4秒かけて3枚なら 4*3 =12。これがアニメーションの全体の秒数。
キーフレームの%は枚数一枚分でアニメーションが完結するようにする。
3枚なら100/3で33%でアニメーション一つが終わるように、0~16%(だいたい中間)かけてフェードインして16%~33%かけてフェードアウトしていくように書く。

.slider {
  // 枠
  position: relative;
  width: 300px;
  height: 200px;
  li {
    position: absolute;
    top: 0;
    left: 0;
    // ↓これ大事!
    opacity: 0;
    animation: fade 12s infinite;
    // 2個目以降はdelayで開始を遅らせる。
    &:nth-child(2) {
      animation-delay: 4s;
    }
    &:nth-child(3) {
      animation-delay: 8s;
    }
  }
}


@keyframes fade {
  0% {
    opacity: 0;
  }
  16% {
    opacity: 1;
  }
  33% {
    opacity: 0;
  }
}




パターンBでは、1枚目がフェードアウトしながら2枚目がフェードインして欲しいので、1枚目のフェードアウトを2枚目のフェードイン終わるタイミング(33% + 16%)まで伸ばし、中間地点も変更。

@keyframes fadeB {
  0% {
    opacity: 0;
  }
  25% {
    opacity: 1;
  }
  49% {
    opacity: 0;
  }
}


動作環境

  • ○:動作する
  • △:動作するが意図せぬ挙動
  • ☓:動作しない
- Mac Windows11 SP
ブラウザ Chrome Firefox Safari Chrome Firefox Edge IE Safari on iOS Chrome for Android
対応

メッセージ

  • 2025-1-5

    わぁ。。素敵なアニメーショ…

    20
  • 2022-9-15

    おっ、トレーナー!今日もお…

    19
  • 2022-9-4

    トレーナーさん、今日もはり…

    14
  • 2022-8-29

    最近、トレーナーが全然更新…

    30
  • 2022-5-5

    あ、トレーナーさん!こんに…

    22
  • 2022-4-10

    昨日はずいぶん暖かい日和だ…

    25
  • 2022-4-3

    今日は久しぶりにアニメが増…

    21
  • 2022-3-21

    やぁ、はじめましてかな。ト…

    28
  • 2022-3-10

    あれ…今週は特にアニメが増…

    27
  • 2022-3-2

    今日の更新はホバーアニメや…

    13
  • 2022-2-24

    今週は水曜祝日だったから1…

    10
  • 2022-2-20

    こんにちは!

    20
  • 2022-2-15

    先週は世話になったな、オグ…

    21
  • 2022-2-11

    聞いてくれ、タマ。

    10
  • 2022-2-3

    やぁタマ。今回は何が更新さ…

    13

トレセン学園