WEBOPIXEL

CSS3で画像キャプションのマウスホバーアニメーション5種

Posted: 2015.12.25 / Category: HTML&CSS / Tag: 

CSS3オンリーで画像をマウスオーバーするとキャプションがアニメーションして表示するというサンプル集です。
ディレイやイージングを使用してちょっとだけ凝った感じに見える風にしてみました。

Sponsored Link

基本的な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;
}