今回は画像をマウスオーバーすると背景が動的にかっこよく現れるhoverアニメーション/エフェクトを実装してみました。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
Webデザイン・コーディングを学習すると「WebデザイナーとしてWeb制作案件を受注する 」というやり方で月10万円以上稼げたりします。
もし興味のある方は、下の記事がかなり再現性のあるロードマップなので是非ご覧ください。
【挫折した人へ】本物のWebデザイナー独学ロードマップ|Web制作で稼ぐ
※突然ですが超オトクな『無料プレゼント』のお知らせです・・
今から3日以内に『転職実績No. 1のプログラミングスクール DMM WEBCAMP 』へ無料カウンセリング申込&参加 された方のみ限定でもれなく【Amazonギフト券1,000円分 】をGETできるキャンペーン
完全オンラインレッスンで個別メンター付き。1月中なら期間限定で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;
/* 背景が現れる速度調整 */
}
ここがポイント!
.picにoverflow: hiddenを設定することで収まらない要素を隠す
.screenに背景のアニメーションスタート位置を指定
画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
階段のように背景を表示させるため4つのscreenクラスで異なる位置・速度を指定
各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;
/* 背景が現れる速度調整 */
}
ここがポイント!
.picにoverflow: hiddenを設定することで収まらない要素を隠す
.screenに背景のアニメーションスタート位置を指定
画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
ブロックが落ちるように背景を表示させるため4つのscreenクラスで異なる位置・速度を指定
各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後の背景の位置指定 */
}
ここがポイント!
.picにoverflow: hiddenを設定することで収まらない要素を隠す
.screenに背景のアニメーションスタート位置を指定
画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
背景を右斜め上から表示させるためにleft:100%, bottom:100%を指定
hover後に背景が画像を覆うようにleft:0, bottom:0を指定
各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;
/* 背景が現れる速度調整 */
}
ここがポイント!
.picにoverflow: hiddenを設定することで収まらない要素を隠す
.screenに背景のアニメーションスタート位置を指定
画像の配置を固定するためpicクラスにposition:relative, picクラスのdivタグにposition:absoluteを指定
背景が手裏剣のように回転して現れるようにtransform : rotate(360deg)を指定
各transitionプロパティをhover前・hover後に指定することで滑らかなアニメーションを実現
参考
そもそもWebデザインの基礎がわからない。。
ふたご
未経験からWeb制作で月50万稼げるようになったUdemy教材3選
でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
ふたご
完全無料で一人前のエンジニアになれるプログラミングスクールあります
プログラミング学習&サポートが無料!
誰もが知っている超優良企業への就職サポート付き!
学習言語:Java、PHP、HTML、CSSなど
話だけ聞いてみる