(Sample)
こんにちは。ゆうせいです。
今回は、トランプカードのような要素を「ダブルクリック」でめくる表現を、HTML・CSS・JavaScriptで実装する方法を丁寧に解説していきます!
実際に手でカードをめくるようなアニメーションを画面上で実現できたら、インタラクティブなコンテンツ作りにも一歩近づけますよ!
完成イメージ
- 初期状態ではカードの裏面(back.jpg)が見えている。
- ダブルクリックすると、スムーズにカードが回転して表面(front.jpg)が表示される。
- 再度ダブルクリックで裏面に戻る。
仕組みを大まかに説明すると…
- HTMLで「カード構造」を定義
- CSSで「3Dの回転アニメーション」を設定
- JavaScriptで「ダブルクリックでクラスの切り替え」を制御
では、一つずつ分解して見ていきましょう!
HTML:カードの土台をつくる
<div class="card" id="card">
<div class="card-inner">
<div class="card-back"></div>
<div class="card-front"></div>
</div>
</div>
要素名 | 内容・役割 |
---|---|
.card | カードの枠。全体の表示サイズ・視点(perspective)を定義。 |
.card-inner | 回転アニメーションが発生する部分。3D回転の対象になる。 |
.card-front | 表面の画像領域(初期は非表示) |
.card-back | 裏面の画像領域(初期は表示) |
CSS:回転アニメーションの設定
回転の仕組みを理解しよう
.card {
perspective: 1000px;
}
.card-inner {
transform-style: preserve-3d;
transition: transform 0.6s;
}
.card.is-flipped .card-inner {
transform: rotateY(180deg);
}
.card-front, .card-back {
backface-visibility: hidden;
}
.card-back {
transform: rotateY(180deg);
}
専門用語解説
プロパティ | 解説 |
---|---|
perspective | 3D回転を実現するための視点距離(奥行き) |
preserve-3d | 子要素のZ軸方向の並びを保持する |
rotateY(180deg) | Y軸方向(縦軸)で180度回転 |
backface-visibility: hidden | 裏面を非表示にすることで、両面表示を防ぐ |
JavaScript:ダブルクリックで切り替える
document.querySelector("#card").addEventListener("dblclick", function () {
this.classList.toggle("is-flipped");
});
解説
dblclick
イベントは、素早く2回クリックしたときに発火。.classList.toggle()
は、クラスを追加・削除する関数。
つまり、「is-flipped」というクラスを付けたり外したりすることで、CSS側で表裏を切り替えるようになっています。
カードが回転する仕組みを図で理解!
【初期状態】
.card-inner は rotateY(0deg) → 表面:非表示/裏面:表示
【is-flipped クラスが付与されると】
.card-inner が rotateY(180deg) → 表面:表示/裏面:裏に回る
画像が見えない場合のチェックポイント
- 画像のURLが正しいか:
front.jpg
,back.jpg
が実際に存在している? - CORS(クロスドメイン)制限に引っかかっていないか?
background-size: cover
を指定しても画像が小さいと見えない場合あり
発展アイデア!
アイデア | 内容 |
---|---|
ワンクリック対応にする | click イベントに変更 |
複数カード対応 | querySelectorAll() と forEach を使って複数のカードを制御 |
回転方向をランダムに | rotateY → rotateX に変更して縦に回転なども可 |
トランプ絵柄をランダムに設定 | JavaScriptで画像をランダムで入れ替えるようにする |
今後の学習のステップ
このコードで学べた技術:
- CSSの3Dトランスフォーム(
transform
,rotateY
,backface-visibility
) - クラスのトグル操作でスタイルを切り替える
- JavaScriptの
dblclick
イベント活用
次は以下のような応用にも挑戦してみてください!
- アニメーションを連続クリックに対応させる(クリック連打対策)
requestAnimationFrame
を使って手作りアニメーションを作ってみる- JavaScriptだけでカードの中身をランダム生成する
動きのあるインターフェースは、ユーザーにとっても開発者にとっても楽しい要素です!どんどん試して、表現力をアップさせてくださいね。質問があればいつでもどうぞ!