CSSだけ!hoverとtransitionで作る動的画像エフェクト4選(コピペOK)

今回は画像をマウスオーバーすると背景が動的にかっこよく現れるhoverアニメーション/エフェクトを実装してみました。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

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

Webデザイン・コーディングを学習すると「WebデザイナーとしてWeb制作案件を受注する」というやり方で月10万円以上稼げたりします。

もし興味のある方は、下の記事がかなり再現性のあるロードマップなので是非ご覧ください。

【筆者実証済】Webデザイナー3ヶ月独学ロードマップ『未経験から月10万稼ぐ手順5ステップ』

 

1. 階段のように背景が現れるhoverエフェクト

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

コードを見る
<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 one"></div>
      <!-- 背景1段目 -->
      <div class="screen two"></div>
      <!-- 背景2段目 -->
      <div class="screen three"></div>
      <!-- 背景3段目 -->
      <div class="screen four"></div>
      <!-- 背景4段目 -->
      <div class="fonts">
        <h1>Malta's Building</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
</div>
.container {
  width  : 100%;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 40%;
  height : 200px;
  margin : 0 auto;
  background-color: white;
  cursor : pointer;
  box-shadow : 3px 3px 5px 0px rgba(0,0,0,0.5);
}
.pic {
  background-size: cover;
  width  : 100%;
  height : 100%;
  position: relative;
  overflow: hidden;
  /* .pic内に収まらない要素を隠してくれる */
  background-color: #102B46;
}
.fonts {
  background-color : #ffffff;
  width  : 100%;
  height : 100%;
  padding : 10px;
  top : 0;
  left: 0;
  font-family : georgia;
  color : #888888;
  opacity : 0;
  transition : opacity .8s;
  /* hover後に文字が消える速度指定 */
}
.fonts h1 {
  text-align: center;
  font-size: 20px;
  margin-top: 15px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 10px;
}
.pic:hover .fonts {
  opacity : 1;
  transition : opacity .2s .4s;
  /* hover後の文字表示の速度指定 */
}
.pic div {
  /* div要素の位置をabsoluteで指定 */
  position : absolute;
}
.screen {
  /* スクリーン全体のスタイル設定 */
  width  : inherit;
  height : 50px;
  /* 背景の高さを指定 */
  background-color: #fff;
  right   : 100%;
  /* 背景のアニメーションスタート位置指定 */
}
.screen.one {
  /* スクリーン1のスタイル設定 */
  top : 0;
  transition : all .2s;
  /* 背景が消える速度調整 */
}
.screen.two {
  /* スクリーン2のスタイル設定 */
  top : 50px;
  transition : all .4s;
  /* 背景が消える速度調整 */
}
.screen.three {
  /* スクリーン3のスタイル設定 */
  top : 100px;
  transition : all .6s;
  /* 背景が消える速度調整 */
}
.screen.four {
  /* スクリーン4のスタイル設定 */
  top : 150px;
  transition : all .8s;
  /* 背景が消える速度調整 */
}
.pic:hover .one {
  /* hover後のスクリーン1のスタイル設定 */
  right : 0;
  /* 背景が現れる始める位置指定 */
  transition : all .2s;
  /* 背景が現れる速度調整 */
}
.pic:hover .two {
  /* hover後のスクリーン2のスタイル設定 */
  right : 0;
  /* 背景が現れる始める位置指定 */
  transition : all .4s;
  /* 背景が現れる速度調整 */
}
.pic:hover .three {
  /* hover後のスクリーン3のスタイル設定 */
  right : 0;
  /* 背景が現れる始める位置指定 */
  transition : all .6s;
  /* 背景が現れる速度調整 */
}
.pic:hover .four {
  /* hover後のスクリーン4のスタイル設定 */
  right : 0;
  /* 背景が現れる始める位置指定 */
  transition : all .8s;
  /* 背景が現れる速度調整 */
}
ここがポイント!
  1. .picにoverflow: hiddenを設定することで収まらない要素を隠す
  2. .screenに背景のアニメーションスタート位置を指定
  3. 画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
  4. 階段のように背景を表示させるため4つのscreenクラスで異なる位置・速度を指定
  5. 各transitionプロパティをhover前・hover後に指定することで滑らかなアニメーションを実現

 

2. 上からブロックが落ちてくるように背景が現れるhoverエフェクト

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

実際の動きはこちら
コードを見る
<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 one"></div>
      <!-- 背景1段目 -->
      <div class="screen two"></div>
      <!-- 背景2段目 -->
      <div class="screen three"></div>
      <!-- 背景3段目 -->
      <div class="screen four"></div>
      <!-- 背景4段目 -->
      <div class="fonts">
        <h1>Malta's Building</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
</div>
.container {
  width  : 100%;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 40%;
  height : 200px;
  margin : 0 auto;
  background-color: white;
  cursor : pointer;
  box-shadow : 3px 3px 5px 0px rgba(0,0,0,0.5);
}
.pic {
  background-size: cover;
  width  : 100%;
  height : 100%;
  position: relative;
  overflow: hidden;
  /* .pic内に収まらない要素を隠してくれる */
  background-color: #102B46;
}
.fonts {
  background-color : #ffffff;
  width: 100%;
  height: 100%;
  padding: 10px;
  top : 0;
  left: 0;
  font-family : georgia;
  color: #888888;
  opacity : 0;
  transition : opacity .8s;
  /* hover後に文字が消える速度指定 */
}
.fonts h1 {
  text-align: center;
  font-size: 20px;
  margin-top: 15px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 10px;
}
.pic:hover .fonts {
  opacity : 1;
  transition : opacity .2s .7s;
  /* hover後の文字表示の速度指定 */
}
.pic div {
  /* div要素の位置をabsoluteで指定 */
  position : absolute;
}
.screen {
  /* スクリーン全体のスタイル設定 */
  width  : inherit;
  height : 50px;
  /* 背景の高さを指定 */
  background-color: #fff;
  transition : all .3s;
  top : -140px;
  /* 背景のアニメーションスタート位置指定 */
}
.screen.one {
  transition : all .1s;
  /* 背景が消える速度調整 */
}
.screen.two {
  transition : all .1s .1s;
  /* 背景が消える速度調整 */
}
.screen.three {
  transition : all .1s .1s;
  /* 背景が消える速度調整 */
}
.screen.four {
  transition : all .1s .2s;
  /* 背景が消える速度調整 */
}
.pic:hover .one {
  top : 150px;
  /* hover後の背景の位置指定 */
  transition : all .2s;
  /* 背景が現れる速度調整 */
}
.pic:hover .two {
  top : 100px;
  /* hover後の背景の位置指定 */
  transition : all .2s .2s ;
  /* 背景が現れる速度調整 */
}
.pic:hover .three {
  top : 50px;
  /* hover後の背景の位置指定 */
  transition : all .2s .4s ;
  /* 背景が現れる速度調整 */
}
.pic:hover .four {
  top : 0px;
  /* hover後の背景の位置指定 */
  transition : all  .2s .6s;
  /* 背景が現れる速度調整 */
}
ここがポイント!
  1. .picにoverflow: hiddenを設定することで収まらない要素を隠す
  2. .screenに背景のアニメーションスタート位置を指定
  3. 画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
  4. ブロックが落ちるように背景を表示させるため4つのscreenクラスで異なる位置・速度を指定
  5. 各transitionプロパティをhover前・hover後に指定することで滑らかなアニメーションを実現

 

3. 斜め上からスクリーンのように背景が現れるhoverエフェクト

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

コードを見る
<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 Building</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
</div>
.container {
  width  : 100%;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 40%;
  height : 200px;
  margin : 0 auto;
  background-color: white;
  cursor : pointer;
  box-shadow : 3px 3px 5px 0px rgba(0,0,0,0.5);
}
.pic {
  background-size: cover;
  width  : 100%;
  height : 100%;
  position: relative;
  overflow: hidden;
  /* .pic内に収まらない要素を隠してくれる */
  background-color: #102B46;
}
.fonts {
  background-color : #ffffff;
  width: 100%;
  height: 100%;
  padding: 10px;
  top : 0;
  left: 0;
  font-family : georgia;
  color: #888888;
  opacity : 0;
  transition : opacity .8s;
  /* hover後に文字が消える速度指定 */
}
.fonts h1 {
  text-align: center;
  font-size: 20px;
  margin-top: 15px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 10px;
}
.pic:hover .fonts {
  opacity : 1;
  transition : opacity .2s .3s;
  /* hover後の文字表示の速度指定 */
}
.pic div {
  /* div要素の位置をabsoluteで指定 */
  position : absolute;
}
.screen {
  /* スクリーン全体のスタイル設定 */
  left   : 100%;
  bottom : 100%;
  /* 背景のアニメーションスタート位置指定 */
  width : inherit;
  height: inherit;
  background-color : #fff;
  transition : all 1.3s;
  /* 背景が消える速度調整 */
}
.pic:hover .screen {
  transition   : all .3s;
  /* 背景が現れる速度調整 */
  left   : 0;
  bottom : 0;
  /* hover後の背景の位置指定 */
}
ここがポイント!
  1. .picにoverflow: hiddenを設定することで収まらない要素を隠す
  2. .screenに背景のアニメーションスタート位置を指定
  3. 画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
  4. 背景を右斜め上から表示させるためにleft:100%, bottom:100%を指定
  5. hover後に背景が画像を覆うようにleft:0, bottom:0を指定
  6. 各transitionプロパティをhover前・hover後に指定することで滑らかなアニメーションを実現

 

4. 手裏剣のように回転(rotate)しながら背景が現れるhoverエフェクト

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

コードを見る
<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 Building</h1>
        <p>this is a photo in malta <br><br><br>Have A Good Time</p>
      </div>
    </div>
  </div>
</div>
.container {
  width  : 100%;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 40%;;
  height : 200px;
  margin : 0 auto;
  background-color: white;
  cursor : pointer;
  box-shadow : 3px 3px 5px 0px rgba(0,0,0,0.5);
}
.pic {
  background-size: cover;
  width  : 100%;
  height : 100%;
  position: relative;
  overflow: hidden;
  /* .pic内に収まらない要素を隠してくれる */
  background-color: #102B46;
}
.fonts {
  background-color : #ffffff;
  width: 100%;
  height: 100%;
  padding: 10px;
  top : 0;
  left: 0;
  font-family : georgia;
  color: #888888;
  opacity : 0;
  transition : opacity .8s;
  /* hover後に文字が消える速度指定 */
}
.fonts h1 {
  text-align: center;
  font-size: 20px;
  margin-top: 15px;
  margin-bottom : 40px;
}
.fonts p {
  font-size : 14px;
  font-style: italic;
  text-align: center;
  line-height : 10px;
}
.pic:hover .fonts {
  opacity : 1;
  transition : opacity .2s .3s;
  /* hover後の文字表示の速度指定 */
}
.pic div {
  /* div要素の位置をabsoluteで指定 */
  position : absolute;
}
.screen {
  /* スクリーン全体のスタイル設定 */
  width : inherit;
  height: inherit;
  background-color : #fff;
  transition   : all .3s;
  /* 背景が消える速度調整 */
  left   : 0;
  bottom : 100%;
  /* 背景のアニメーションスタート位置指定 */
}
.pic:hover .screen {
  transform : rotate(360deg);
  /* hover後の背景を回転される角度調整 */
  left   : 0;
  bottom : 0;
  /* hover後の背景の位置指定 */
  transition   : all .6s;
  /* 背景が現れる速度調整 */
}
ここがポイント!
  1. .picにoverflow: hiddenを設定することで収まらない要素を隠す
  2. .screenに背景のアニメーションスタート位置を指定
  3. 画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
  4. 背景が手裏剣のように回転して現れるようにtransform : rotate(360deg)を指定
  5. 各transitionプロパティをhover前・hover後に指定することで滑らかなアニメーションを実現

参考

そもそもWebデザインの基礎がわからない。。
そんなあなたにはこれ!

ふたご


でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
そんなあなたにはこれ!

ふたご

完全無料で一人前のエンジニアになれるプログラミングスクールあります
  1. プログラミング学習&サポートが無料!
  2. 誰もが知っている超優良企業への就職サポート付き!
  3. 学習言語:Java、PHP、HTML、CSSなど

 

   話だけ聞いてみる