WEB系キャンパス

CSSだけで画像が右から左に自動でスライドするループアニメーションを作成

css-slide-image-animation-thm

jQueryを使ったカルーセルスライダーではなく、ゆっくり右から左に画像が流れていくスライダーを作る場合、今まで「Slick」とかのライブラリ系のjQueryを使ってたんですけど、CSSのアニメーションだけでそれっぽいのがつくれたので、備忘録としてまとめておきます。

スライダーのイメージを効果音で言うなら通常のカルーセルが「サッサッサッ」と変わるなら、今回のは「サーーーッ」と流れていくイメージです。
余計にわかりにくくなったという方は下記のデモを見てください。

DEMO

まずは横に長い画像を用意

「repeat-xでリピートされている背景画像が右から左にひたすら流れていく」という構造になります。
今回はこんな感じの画像を用意しました。
ポイントとしては、繰り返しで表示させても違和感ないような画像にしましょう。

main-bg

使用画像:ぱくたそ

CSSのアニメーションKeyframeを作成

画像は背景画像を使うので、CSSで読み込みます。
今回は「画像を流す」「上にテキストを入れる」「テキストが目立つように画像にオーバーレイ(うっすら色)をつける」って事をするって事で、HTMLはこんな感じで

【HTML】

    <div class="jp_slide_img_wrapper">
      <div class="jp_slide_img_overlay">
        <div class="main_catch">
          <div class="logo">
            <img src="img/logo.png" alt="logo">
          </div>
            <h1>メインキャッチを入れたりして</h1>
        </div>
      </div>
    </div>
    <!-- /.jp_slide_img_wrapper -->

CSS

.jp_slide_img_wrapper {
    position: relative;
    width: 100%;
    height: 100vh;
    background-image: url('../img/main-bg.jpg');
    background-repeat: repeat-x;
    background-size: cover;
    background-position: 0 0;
    animation-name: slide_img;
    animation-duration: 200s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
}

@keyframes slide_img {
    100% {
        background-position: -10000px 0;
        }
}
.jp_slide_img_overlay{
    position: absolute;
    top: 0%;
    right: 0%;
    left: 0%;
    bottom: 0%;
    width: 100%;
    height: 100%;
    background-color: rgba(46, 36, 100, 0.4);
}
.main_catch {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 100%;
    text-align: center;
    transform: translateY(-50%) translateX(-50%);
    -webkit- transform: translateY(-50%) translateX(-50%);
}

.main_catch .logo {
    max-width: 250px;
    margin: 0 auto 15px;
}
.main_catch .logo img {
    max-width: 100%;
    height: auto;
}

CSSのポイントは「jp_slide_img_wrapper 」にあてている
・高さを取得するために「height: 100vh;」
・背景画像をリピートするための「background-repeat: repeat-x;」
・アニメーションの始点と終点のための「background-position: 0 0;」
・「 animation-iteration-count: infinite;」で無限にアニメーションを繰り返す。

そして、Keyframeでは「background-position: -10000px 0;」としています。
これで、backgroundの位置が0〜−10000pxと横に動くアニメーションが出来上がります。

画像の長さとかで判断して「animation-duration」をいじってスピード感を調整してください。
今の設定は「200s(200秒)で10000px動く」ってなっています。

もう一回デモ置いておきます。

DEMO

サクッと画像に動きをつけたい場合におすすめ

弱点としては、画像が1つ1つと分かれていないので、個別にリンクを張ったりする事ができない事です。
使用用途としては、今回のデモみたいなメインビジュアルにサクッとアニメーションを追加したいって感じの時ですかね?今回は以上です。

参考サイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です