CSSのtransitionとtransform rotate()を使って、カードが回転するような動きを実装してみます。
サンプルコード
オンマウスで画像が切り替わるようにしてみます。
HTML
1 2 3 4 5 6 | < div class = "card" > < a href = "" > < img src = "surface.jpg" alt = "" class = "card_surface" /> < img src = "reverse.jpg" alt = "" class = "card_reverse" /> </ a > </ div > |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | .card { position : relative ; width : 250px ; } .card a { display : block ; } .card_reverse { position : absolute ; top : 0 ; left : 0 ; } /* 表面の表示 */ .card_surface { transform : rotateY( 0 deg); transition : transform 300 ms 150 ms; } .card_reverse { transform : rotateY( 90 deg); transition : transform 300 ms; } /* 裏面の表示 */ a:hover .card_surface { transform :rotateY( 90 deg); transition : transform 300 ms; } a:hover .card_reverse { transform :rotateY( 0 deg); transition : transform 300 ms 150 ms; } |
これで問題ないかと思ったのですが、裏面から表面に切り替わる時に少し違和感があるような感じがします。
カードが回転する動きのデモページ1
画像が切り替わるときに少しフェードするようにしてみます。
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | .card { position : relative ; width : 250px ; } .card a { display : block ; } .card_reverse { position : absolute ; top : 0 ; left : 0 ; } /* 表面の表示 */ .card_surface { opacity : 1 ; transform : rotateY( 0 deg); transition : opacity 100 ms 150 ms, transform 300 ms 150 ms; } .card_reverse { opacity : 0 ; transform : rotateY( 90 deg); transition : opacity 50 ms 200 ms, transform 300 ms; } /* 裏面の表示 */ a:hover .card_surface { opacity : 0 ; transform :rotateY( 90 deg); transition : opacity 50 ms 200 ms, transform 300 ms; } a:hover .card_reverse { opacity : 1 ; transform :rotateY( 0 deg); transition : opacity 100 ms 150 ms, transform 300 ms 150 ms; } |
これでそれっぽい動きが実装できました。
カードが回転する動きのデモページ2
先ほどはオンマウスで画像を切り替えられるようにしましたが、classの付け替えで切り替えられるようにしてみます。
HTML
1 2 3 4 5 | < 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | .card { position : relative ; width : 250px ; } .card_reverse { position : absolute ; top : 0 ; left : 0 ; } /* 表面の表示 */ .is-surface .card_surface { opacity : 1 ; transform : rotateY( 0 deg); transition : opacity 100 ms 150 ms, transform 300 ms 150 ms; } .is-surface .card_reverse { opacity : 0 ; transform : rotateY( 90 deg); transition : opacity 50 ms 200 ms, transform 300 ms; } /* 裏面の表示 */ .is-reverse .card_surface { opacity : 0 ; transform :rotateY( 90 deg); transition : opacity 50 ms 200 ms, transform 300 ms; } .is-reverse .card_reverse { opacity : 1 ; transform :rotateY( 0 deg); transition : opacity 100 ms 150 ms, transform 300 ms 150 ms; } |
JavaScript
1 2 3 4 5 | $( function () { $( '#switch' ).on( 'click' , function () { $( '.card' ).toggleClass( 'is-surface' ).toggleClass( 'is-reverse' ); }); }); |
ボタンをクリックすると画像が切り替わることが確認できました。
カードが回転する動きのデモページ3
コメントが承認されるまで時間がかかります。