基本的なHTML
基本的なHTMLは下記になります。figureでマークアップしてみました。
HTML
<section class="sample1"> <figure> <img src="thum01.jpg" width="400" height="266"> <figcaption class="title">Hover Effect 01</figcaption> </figure> </section>
figureのCSSは「overflow: hidden」ではみ出ないようにしています。
CSS
section figure {
width: 400px;
height: 266px;
margin: 0 auto;
position: relative;
overflow: hidden;
background: #000;
}
1.画像を縮小しつつ下からにょきっと出るキャプション
最初はすごく簡単なやつです。
通常の状態はtranslateYで画像外に飛ばしておいて、hover時に0で表示させてアニメーションしています。
transitionの4つ目のパラメータでディレイ(時間差)を調節できます。

CSS
.sample1 img {
transition: all 0.4s ease-out 0.1s;
}
.sample1 figure:hover img {
opacity: .6;
transform: scale(1.3);
}
.sample1 figcaption {
color: #fff;
background: #333;
background: rgba(0,0,0,.7);
position: absolute;
bottom: 0;
width: 100%;
height: 60px;
padding: 20px;
line-height: 1;
/* 1行で納める */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
transition: all 0.2s ease-in 0.3s;
transform: translateY(60px);
}
.sample1 figure:hover figcaption {
transform: translateY(0);
}
2.キャプションが横にスライドして画像が押し出される
やってることは先ほどとあまり変わりませんが画像・キャプションともtranslateXを動かして押し出されるような感じにしております。

CSS
.sample2 figcaption {
position: absolute;
height: 100%;
width: 240px;
background: #366a6d;
top: 0;
display: block;
text-align: left;
padding: 20px;
color: #fff;
transform: translateX(-240px);
transition: all .5s ease-out;
}
.sample2 figure:hover figcaption {
transform: translateX(0);
}
.sample2 figure img {
left: 0;
position: absolute;
transition: all .5s ease-out;
}
.sample2 figure:hover img {
transform: translateX(100px);
}
3.外から枠がぐいってなる
外から枠がぐいって出てきます。
枠はafterに設定してます。あとはscaleで縮小です。比率とかが結構適当です。。。

CSS
.sample3 {
color: #fff;
}
.sample3 figure:after {
position: absolute;
border: solid 1px #fff;
content: "";
display: block;
width: 100%;
height: 100%;
left: 0;
top: 0;
opacity: 0;
transform: scale(1.0, 1.0);
transition: all .3s ease-out;
}
.sample3 figure:hover:after {
opacity: 1;
transform: scale(0.92, 0.88);
}
.sample3 figcaption {
position: absolute;
width: 100%;
top: 50%;
left: 0;
margin-top: -1em;
font-size: 20px;
letter-spacing: 5px;
opacity: 0;
transition: all .3s ease-out .2s;
}
.sample3 figure:hover figcaption {
letter-spacing: 1px;
opacity: 1;
}
.sample3 figure img {
transition: all .8s ease-out;
}
.sample3 figure:hover img {
opacity: .4;
transform: scale(1.3);
}
4.中心線が真ん中からスーっと出る
中心線はafterに設定してます。今度はscaleで拡大です。

CSS
.sample4 {
color: #fff;
}
.sample4 figure:after {
position: absolute;
background: #fff;
content: "";
display: block;
width: 90%;
height: 1px;
left: 5%;
top: 50%;
transform: scale(0);
transition: all .9s ease-out;
}
.sample4 figure:hover:after {
transform: scale(1);
}
.sample4 figcaption p,
.sample4 figcaption h3 {
position: absolute;
text-align: center;
width: 100%;
opacity: 0;
transition: all .4s ease-out .4s;
}
.sample4 figcaption h3 {
bottom: 51%;
transform: translateY(-30px);
}
.sample4 figcaption p {
top: 52%;
transform: translateY(30px);
}
.sample4 figure:hover figcaption p,
.sample4 figure:hover figcaption h3 {
opacity: 1;
transform: translateY(0);
}
.sample4 figure img {
transition: all 1.2s ease-out;
}
.sample4 figure:hover img {
opacity: .4;
transform: scale(1.3);
}
}
5.ソーシャルボタンがぴょんぴょんぴょん
ディレイを駆使してソーシャルボタンを時間差でアニメーションさせて表示してみませましょう。
アイコンの位置とか適当です。。。

HTML
<section class="sample5"> <figure> <img src="thum01.jpg" width="400" height="266" class="thumb"> <figcaption> <h3 class="title">Hover Effect 05</h3> <p>Hover Effect Description</p> <a href="#" class="more-btn">Read more</a> <ul class="sns-btns"> <li class="twitter"><a href="#"><img src="twitter.svg"></a></li> <li class="facebook"><a href="#"><img src="facebook.svg"></a></li> <li class="google"><a href="#"><img src="gplus.svg"></a></li> </ul> </figcaption> </figure> </section>
CSS
.sample5 a {
color: #333;
}
.sample5 figcaption {
position: absolute;
height: 80px;
width: 100%;
background: #fff;
bottom: 0;
display: block;
text-align: left;
padding: 20px;
color: #333;
transition: all .3s ease-out .2s;
}
.sample5 figure:hover figcaption {
height: 110px;
transition-delay: 0s;
}
.sample5 figcaption h3 {
margin-bottom: 0;
line-height: 1.2;
}
.sample5 figure img.thumb {
top: 0;
left: 0;
position: absolute;
transition: all .3s ease-out .2s;
}
.sample5 figure:hover img.thumb {
top: -20px;
transition-delay: 0s;
}
.sample5 figcaption a.more-btn {
font-size: 11px;
color: #fff;
background: #1d76a6;
padding: 7px 12px;
position: absolute;
right: 0;
bottom: 0;
transform: translateX(90px);
transition: all .2s ease-out;
}
.sample5 figcaption a.more-btn:hover {
background: #2a9cc0;
}
.sample5 figure:hover figcaption a.more-btn {
transform: translateX(0);
transition-delay: .4s;
}
.sample5 figcaption ul.sns-btns {
list-style: none;
position: relative;
padding-top: 4px;
}
.sample5 figcaption ul.sns-btns li {
padding: 7px;
line-height: 1;
height: 28px;
width: 28px;
float: left;
background: #3b5998;
border-radius: 50%;
position: absolute;
transform: translateY(50px);
transition: all .15s ease-out;
}
.sample5 figure:hover figcaption ul.sns-btns li {
transform: translateY(0);
}
.sample5 figcaption ul.sns-btns li.twitter {
background: #55acee;
padding: 8px;
transition-delay: .4s;
}
.sample5 figcaption ul.sns-btns li.facebook {
background: #3b5998;
left: 35px;
transition-delay: .2s;
}
.sample5 figcaption ul.sns-btns li.google {
background: #df4a32;
left: 70px;
transition-delay: 0s;
}
.sample5 figure:hover figcaption ul.sns-btns li.twitter {
transition-delay: 0s;
}
.sample5 figure:hover figcaption ul.sns-btns li.facebook {
transition-delay: .2s;
}
.sample5 figure:hover figcaption ul.sns-btns li.google {
transition-delay: .4s;
}
.sample5 figcaption ul.sns-btns li img {
height: 100%;
vertical-align: top;
}


