hoverとtransitionでオシャレなCSS画像エフェクト4選!(背景がスっと表示される)

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

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

 

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"></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;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  margin: 0 auto;
  background-color: white;
  cursor : pointer;
}
.pic {
  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;
  font-family : georgia;
  color       : #888888;
  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 {
  opacity : 1;
  transition : opacity .2s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic div {
  position : absolute;
  /* .pic div(hover後に現れる文字と背景)の位置を指定 */
}
.screen {
  /* 文字と背景が現れるまでの繋ぎのアニメーション */
  width  : 100%;
  height : 100%;
  background-color : #fff;
  opacity : 0;
  transition   : all .3s;
  /* hover後カーソルを外した際にアニメーションが消えるまでの時間を指定 */
}
.pic:hover .screen {
  opacity    : 1;
  transition : all .3s;
  /* アニメーションが現れるまでの時間を指定 */
}
ここがポイント!
  1. background-imageの中にscreenクラスとfontsクラスをopacity:0で置いて準備OK
  2. hover時にscreenクラスとfontsクラスにopacity:1を指定
  3. transitionプロパティを指定することで滑らかなアニメーションを実現

 

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"></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;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  margin: 0 auto;
  background-color: white;
  cursor : pointer;
}
.pic {
  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;
  font-family : georgia;
  color       : #888888;
  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 {
  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. background-imageの中にscreenクラスとfontsクラスを置く
  2. screenクラスにtransform: scale(0,0);を指定して前準備OK
  3. hover時に背景が画像全体まで広がるようにscreenクラスにtransform: scale(1,1);を指定
  4. transitionプロパティを指定することで滑らかなアニメーションを実現

 

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-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;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  margin: 0 auto;
  background-color: white;
  cursor : pointer;
}
.pic {
  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;
  font-family : georgia;
  color       : #888888;
  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 {
  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. background-imageの中にscreen-right/screen-leftクラスとfontsクラスを置く
  2. hover時にscreen-rightとscreen-leftが閉まるように互いにright/leftを50%に指定
  3. transitionプロパティを指定することで滑らかなアニメーションを実現

 

4. 丸い背景が徐々に画像全体に広がる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 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;
}
.container:after{
  clear   : both;
  display : table;
  content : '';
}
.bg-pic {
  width  : 440px;
  height : 300px;
  margin: 0 auto;
  background-color: white;
  cursor : pointer;
}
.pic {
  width  : 440px;
  height : 300px;
  position: relative;
  overflow: hidden;
  background-color: #102B46;
  background-size: cover;
  /* .pic全体に画像が表示されるように指定 */
}
.fonts {
  /* ↓hover後に浮き出てくる文字と背景の設定 */
  text-align: center;
  background-color : #ffffff;
  width            : 440px;
  height           : 300px;
  padding          : 10px;
  top : 0;
  left: 0;
  font-family : georgia;
  color       : #888888;
  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 {
  opacity : 1;
  transition : opacity .05s .2s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic div {
  position : absolute;
  /* .pic div(hover後に現れる文字と背景)の位置を指定 */
}
.screen {
  /* 文字と背景が現れるまでの繋ぎのアニメーション */
  width : 0;
  height: 0;
  top   : 50%;
  left  : 50%;
  background-color: #fff;
  border-radius : 50%;
  /* 背景を丸く加工 */
  transition : all .3s;
  /* hover後カーソルを外した際にアニメーションが消えるまでの時間を指定 */
}
.pic:hover .screen {
  width : 100%;
  height: 100%;
  top   : 0px;
  left  : 0px;
  transition : all .3s;
  /* アニメーションが現れるまでの時間を指定 */
}
ここがポイント!
  1. background-imageの中にscreenクラスとfontsクラスを置く
  2. screenクラスのwidth/heightを0、border-radiusを50%に指定
  3. hover時に背景が画像全体まで広がるようにscreenクラスのwidth/heghtを100%に指定
  4. transitionプロパティを指定することで滑らかなアニメーションを実現

参考

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

ふたご


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

ふたご

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

 

   話だけ聞いてみる