CSSのtransitionとtransform rotate()を使って、カードが回転するような動きを実装してみます。
サンプルコード
オンマウスで画像が切り替わるようにしてみます。
HTML
<div class="card"> <a href=""> <img src="surface.jpg" alt="" class="card_surface" /> <img src="reverse.jpg" alt="" class="card_reverse" /> </a> </div>
CSS
.card { position: relative; width: 250px; } .card a { display: block; } .card_reverse { position: absolute; top: 0; left: 0; } /* 表面の表示 */ .card_surface { transform: rotateY(0deg); transition: transform 300ms 150ms; } .card_reverse { transform: rotateY(90deg); transition: transform 300ms; } /* 裏面の表示 */ a:hover .card_surface { transform:rotateY(90deg); transition: transform 300ms; } a:hover .card_reverse { transform:rotateY(0deg); transition: transform 300ms 150ms; }
これで問題ないかと思ったのですが、裏面から表面に切り替わる時に少し違和感があるような感じがします。
カードが回転する動きのデモページ1
画像が切り替わるときに少しフェードするようにしてみます。
CSS
.card { position: relative; width: 250px; } .card a { display: block; } .card_reverse { position: absolute; top: 0; left: 0; } /* 表面の表示 */ .card_surface { opacity: 1; transform: rotateY(0deg); transition: opacity 100ms 150ms, transform 300ms 150ms; } .card_reverse { opacity: 0; transform: rotateY(90deg); transition: opacity 50ms 200ms, transform 300ms; } /* 裏面の表示 */ a:hover .card_surface { opacity: 0; transform:rotateY(90deg); transition: opacity 50ms 200ms, transform 300ms; } a:hover .card_reverse { opacity: 1; transform:rotateY(0deg); transition: opacity 100ms 150ms, transform 300ms 150ms; }
これでそれっぽい動きが実装できました。
カードが回転する動きのデモページ2
先ほどはオンマウスで画像を切り替えられるようにしましたが、classの付け替えで切り替えられるようにしてみます。
HTML
<div class="card is-surface"> <img src="surface.jpg" alt="" class="card_surface" /> <img src="reverse.jpg" alt="" class="card_reverse" /> </div> <button id="switch">切り替え</button>
CSS
.card { position: relative; width: 250px; } .card_reverse { position: absolute; top: 0; left: 0; } /* 表面の表示 */ .is-surface .card_surface { opacity: 1; transform: rotateY(0deg); transition: opacity 100ms 150ms, transform 300ms 150ms; } .is-surface .card_reverse { opacity: 0; transform: rotateY(90deg); transition: opacity 50ms 200ms, transform 300ms; } /* 裏面の表示 */ .is-reverse .card_surface { opacity: 0; transform:rotateY(90deg); transition: opacity 50ms 200ms, transform 300ms; } .is-reverse .card_reverse { opacity: 1; transform:rotateY(0deg); transition: opacity 100ms 150ms, transform 300ms 150ms; }
JavaScript
$(function() { $('#switch').on('click', function() { $('.card').toggleClass('is-surface').toggleClass('is-reverse'); }); });
ボタンをクリックすると画像が切り替わることが確認できました。
カードが回転する動きのデモページ3
コメントが承認されるまで時間がかかります。