AI(ChatGPT)を使って半自動で月5万稼ぐ?
実際にやってみて結果・・ >>

【Qiitaでバズった】CSSで複数画像を動かすアニメーション3選

今回は【失敗しない】画像(複数)の背景が動くCSSアニメーション3選をご紹介いたします。

シンプルかつオシャレな画像一覧デザイン。それぞれ違うエフェクトで画像背景が動く。ポートフォリオにも最適。コピペOK。HTML, CSSだけです。

 

この記事の信頼性(ゆうけんブログの筆者はこんな人)

  • 現役Webデザイナーが執筆
  • 最高月収7桁超のフリーランス
  • 完全未経験から独学でWeb制作スキルを習得
  • Twitterフォロワー数2,000人超(→@twinzvlog_yk
  • Web制作のメンター経験多数
  • 認定ランサー(ランサーズ最高ランク)

 

コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。

 

初心者でも安心なサポート体制高単価案件
月収50万円以上のフリーランス案件を探してみる >>

 

1. opacityで画像背景がフェードイン・フェードアウトするアニメーション

動きは下の画像のような感じになります

コードを見る
<div class="container">
  <!-- 画像と背景・文字を複数配置 -->
  <div class="bg-pic">
    <div class="pic" style="background-image : url('https://cdn.pixabay.com/photo/2017/01/17/23/05/valetta-1988455_1280.jpg');">
      <div class="screen"></div>
      <div class="fonts">
        <h1>Malta's capture</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
  <div class="bg-pic">
    <div class="pic" style="background-image : url('https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80');">
      <div class="screen"></div>
      <div class="fonts">
        <h1>Malta's capture</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
  <div class="bg-pic">
    <div class="pic" style="background-image : url('https://images.unsplash.com/photo-1519221739757-4df89b4d0efe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80');">
      <div class="screen"></div>
      <div class="fonts">
        <h1>Malta's capture</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
</div>
/* 要素全体のサイズ・配置を指定 */
.container {
  width  : 100%;
  margin-top: 30px;
  display: flex;
  align-items:center;
  justify-content:center;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  background-color: white;
  cursor : pointer;
}
.pic {
  /* 画像が美しく見えるようにエフェクト(明るさ・コントラスト・彩度)を調整 */
  filter: brightness(110%) contrast(105%) saturate(120%);
  width  : 440px;
  height : 300px;
  /* 相対的位置を指定 */
  position: relative;
  /* 枠に収まらない要素を隠す指定 */
  overflow: hidden;
  background-color: #102B46;
  background-size: cover;
  /* .pic全体に画像が表示されるように指定 */
}
/* ↓hover後に浮き出てくる文字と背景の設定 */
.fonts {
  text-align: center;
  background-color : #ffffff;
  width            : 440px;
  height           : 300px;
  padding          : 10px;
  top : 0;
  left: 0;
  color       : #888888;
  /* hover前のの文字の不透明度を指定 */
  opacity : 0;
  transition : opacity .8s;
  /* hover後カーソルを外した際に文字と背景が消える時間を指定 */
}
.fonts h1 {
  font-size: 28px;
  margin-top: 50px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 20px;
}
.pic:hover .fonts {
  /* hover後の文字の不透明度を指定 */
  opacity : 1;
  transition : opacity .2s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic div {
  position : absolute;
  /* .pic div(hover後に現れる文字と背景)の位置を指定 */
}
.screen {
  /* 文字と背景が現れるまでの繋ぎのアニメーション */
  width  : 100%;
  height : 100%;
  background-color : #fff;
  /* hover前の背景の不透明度を指定 */
  opacity : 0;
  transition   : all .3s;
  /* hover後カーソルを外した際にアニメーションが消えるまでの時間を指定 */
}
.pic:hover .screen {
  /* hover後の背景の不透明度を指定 */
  opacity    : 1;
  transition : all .3s;
  /* アニメーションが現れるまでの時間を指定 */
}
ここがポイント!
  1. 画像を複数用意しflexboxで画面中央に配置する
  2. background-imageの中にscreenクラスとfontsクラスをopacity:0で置いて画像背景の準備OK
  3. hover時に画像の背景が現れるようにscreenクラスとfontsクラスにopacity:1を指定
  4. transitionプロパティを指定することで滑らかなアニメーションを実現

 

初心者でも安心なサポート体制高単価案件
月収50万円以上のフリーランス案件を探してみる >>

 

2. transform:scaleで画像背景が拡大しながら現れるアニメーション

動きは下の画像のような感じになります

コードを見る
<div class="container">
  <!-- 画像と背景・文字を複数配置 -->
  <div class="bg-pic">
    <div class="pic" style="background-image : url('https://cdn.pixabay.com/photo/2017/01/17/23/05/valetta-1988455_1280.jpg');">
      <div class="screen"></div>
      <div class="fonts">
        <h1>Malta's capture</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
  <div class="bg-pic">
    <div class="pic" style="background-image : url('https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80');">
      <div class="screen"></div>
      <div class="fonts">
        <h1>Malta's capture</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
  <div class="bg-pic">
    <div class="pic" style="background-image : url('https://images.unsplash.com/photo-1519221739757-4df89b4d0efe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80');">
      <div class="screen"></div>
      <div class="fonts">
        <h1>Malta's capture</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
</div>
/* 要素全体のサイズ・配置を指定 */
.container {
  width  : 100%;
  margin-top: 30px;
  display: flex;
  align-items:center;
  justify-content:center;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  background-color: white;
  cursor : pointer;
}
.pic {
  /* 画像が美しく見えるようにエフェクト(明るさ・コントラスト・彩度)を調整 */
  filter: brightness(110%) contrast(105%) saturate(120%);
  width  : 440px;
  height : 300px;
  /* 相対的位置を指定 */
  position: relative;
  /* 枠に収まらない要素を隠す指定 */
  overflow: hidden;
  background-color: #102B46;
  background-size: cover;
  /* .pic全体に画像が表示されるように指定 */
}
/* ↓hover後に浮き出てくる文字と背景の設定 */
.fonts {
  text-align: center;
  background-color : #ffffff;
  width            : 440px;
  height           : 300px;
  padding          : 10px;
  top : 0;
  left: 0;
  color       : #888888;
  /* hover前のの文字の不透明度を指定 */
  opacity : 0;
  transition : opacity .8s;
  /* hover後カーソルを外した際に文字と背景が消える時間を指定 */
}
.fonts h1 {
  font-size: 28px;
  margin-top: 50px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 20px;
}
.pic:hover .fonts {
  /* hover後の文字の不透明度を指定 */
  opacity : 1;
  transition : opacity .2s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic div {
  position : absolute;
  /* .pic div(hover後に現れる文字と背景)の位置を指定 */
}
.screen {
  /* 文字と背景が現れるまでの繋ぎのアニメーション */
  left : 0;
  top  : 0;
  width : inherit;
  height: inherit;
  background-color : #fff;
  transition   : all .3s;
  /* hover後カーソルを外した際にアニメーションが消えるまでの時間を指定 */
  transform: scale(0,0);
}
.pic:hover .screen {
  left : 0;
  top  : 0;
  transform : scale(1,1);
  /* 背景が画像を覆う範囲の指定 */
  transition : all .3s;
  /* アニメーションが現れるまでの時間を指定 */
}
ここがポイント!
  1. 画像を複数用意しflexboxで画面中央に配置する
  2. background-imageの中にscreenクラスとfontsクラスを置く
  3. screenクラスにtransform: scale(0,0);を指定して画像背景の前準備OK
  4. hover時に背景が画像全体まで広がるようにscreenクラスにtransform: scale(1,1);を指定
  5. transitionプロパティを指定することで滑らかなアニメーションを実現

 

初心者でも安心なサポート体制高単価案件
月収50万円以上のフリーランス案件を探してみる >>

 

3. 画像背景が扉が閉まるように表示されるアニメーション

動きは下の画像のような感じになります

コードを見る
  <div class="container">
    <!-- 画像と背景・文字を複数配置 -->
    <div class="bg-pic">
      <div class="pic" style="background-image : url('https://cdn.pixabay.com/photo/2017/01/17/23/05/valetta-1988455_1280.jpg');">
        <div class="screen-left"></div>
        <div class="screen-right"></div>
        <div class="fonts">
          <h1>Malta's capture</h1>
          <p>this is a photo in malta <br><br><br>Have A Good Time</p>
        </div>
      </div>
    </div>
    <div class="bg-pic">
      <div class="pic" style="background-image : url('https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80');">          
        <div class="screen-left"></div>
        <div class="screen-right"></div>
        <div class="fonts">
          <h1>Malta's capture</h1>
          <p>this is a photo in malta <br><br><br>Have A Good Time</p>
        </div>
      </div>
    </div>
    <div class="bg-pic">
      <div class="pic" style="background-image : url('https://images.unsplash.com/photo-1519221739757-4df89b4d0efe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80');">
        <div class="screen-left"></div>
        <div class="screen-right"></div>
        <div class="fonts">
          <h1>Malta's capture</h1>
          <p>this is a photo in malta <br><br><br>Have A Good Time</p>
        </div>
      </div>
    </div>
  </div>
/* 要素全体のサイズ・配置を指定 */
.container {
  width  : 100%;
  margin-top: 30px;
  display: flex;
  align-items:center;
  justify-content:center;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  background-color: white;
  cursor : pointer;
}
.pic {
  /* 画像が美しく見えるようにエフェクト(明るさ・コントラスト・彩度)を調整 */
  filter: brightness(110%) contrast(105%) saturate(120%);
  width  : 440px;
  height : 300px;
  /* 相対的位置を指定 */
  position: relative;
  /* 枠に収まらない要素を隠す指定 */
  overflow: hidden;
  background-color: #102B46;
  background-size: cover;
  /* .pic全体に画像が表示されるように指定 */
}
/* ↓hover後に浮き出てくる文字と背景の設定 */
.fonts {
  text-align: center;
  background-color : #ffffff;
  width            : 440px;
  height           : 300px;
  padding          : 10px;
  top : 0;
  left: 0;
  color       : #888888;
  /* hover前のの文字の不透明度を指定 */
  opacity : 0;
  transition : opacity .8s;
  /* hover後カーソルを外した際に文字と背景が消える時間を指定 */
}
.fonts h1 {
  font-size: 28px;
  margin-top: 50px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 20px;
}
.pic:hover .fonts {
  /* hover後の文字の不透明度を指定 */
  opacity : 1;
  transition : opacity .2s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic div {
  position : absolute;
  /* .pic div(hover後に現れる文字と背景)の位置を指定 */
}
.screen-right , .screen-left{
  /* 文字と背景が現れるまでの繋ぎのアニメーション */
  width : 50%;
  height: inherit;
  background-color : #ffffff;
  top : 0;
  transition : all .3s;
  /* hover後カーソルを外した際にアニメーションが消えるまでの時間を指定 */
}
.screen-right {
  left : 100%;
}
.screen-left {
  right : 100%;
}
.pic:hover .screen-right {
  transition : all .3s;
  /* アニメーションが現れるまでの時間を指定 */
  left : 50%;
}
.pic:hover .screen-left {
  transition : all .3s;
  /* アニメーションが現れるまでの時間を指定 */
  right : 50%;
}
ここがポイント!
  1. 画像を複数用意しflexboxで画面中央に配置する
  2. background-imageの中にscreen-right/screen-leftクラスとfontsクラスを置いて画像背景の準備OK
  3. hover時に画像背景のscreen-rightとscreen-leftが閉まるように互いにright/leftを50%に指定
  4. transitionプロパティを指定することで滑らかなアニメーションを実現

 

初心者でも安心なサポート体制高単価案件
月収50万円以上のフリーランス案件を探してみる >>

 

『絶対にリモートワーク!』という方におすすめの求人サイトをご紹介!

クラウドテック
Web制作案件の数
(5.0)
案件の単価
(4.0)
使いやすさ
(5.0)
案件獲得効率
(5.0)
初心者向け
(5.0)
オススメ度
(5.0)
総合評価
(5.0)
この講座のポイント

対象
Webデザイナー・エンジニア・グラフィックデザイナー・PM・マーケター・ライター

 

公式サイト
クラウドテック公式ページ

特徴

  • クラウドソーシング企業大手のクラウドワークスが運営する求人サイト
  • 実務未経験者でもOK
  • 登録社数14万社
  • フリーランス・個人事業主向け案件がケタ違いに多い
  • 報酬額や勤務地・職種など希望が通りやすい
  • Web制作・コーディングの高単価案件が多い
  • リモートワーク案件数は業界トップクラス
  • 最短3日で案件を獲得できる

 

現役Webデザイナーの筆者イチオシの求人サイト!フリーランス向けWeb制作案件なら確実に業界トップクラス。営業かけずに案件に困らなくなる一番の近道です。

ふたご

 

\ エンジニア・Webデザイナーの実務未経験OKリモート案件数トップクラスの求人サイト /無料登録をして案件を見てみる >>

 

 

まとめ

HTMLとCSSを使うと今回紹介したようなことも簡単にできてしまうんです。

 

『CSSアニメーションやエフェクトだけではなくWebサイトをゼロから作って稼いでいきたい』

『3ヶ月くらいで最低でも月10万円は稼ぎたい』

『営業とかやったことないけどWeb制作だけで稼いでいきたい』

 

こんな方のためにWeb制作で月80万超稼ぐ筆者が自身の経験を踏まえて【失敗しない】Webデザイナー(Web制作)独学ロードマップを執筆しました。

 

少額の投資で3ヶ月後には月10〜30万稼げるよう設計してあります。
(学習教材やAdobeなど最低限のコストはかかります)

 

ロードマップの構成
  1. Web制作に特化した『確実に身に付く』学習方法
  2. Web制作会社が喰いつく理想的なポートフォリオの作成手順
  3. 返信率10%以上!Web制作会社へのメール営業

 

有料公開も考えましたが「Webデザイナー(Web制作)はまだまだ稼げることを証明したい!」という思いが強く、期間限定で無料公開をすることにしました。

 

2021年半ばまでは無料公開する予定ではありますが前倒しすることもあり得ますのでご興味ある方はお早めにどうぞ!