(Sample)

こんにちは。ゆうせいです。

今回は、トランプカードのような要素を「ダブルクリック」でめくる表現を、HTML・CSS・JavaScriptで実装する方法を丁寧に解説していきます!

実際に手でカードをめくるようなアニメーションを画面上で実現できたら、インタラクティブなコンテンツ作りにも一歩近づけますよ!


完成イメージ

  • 初期状態ではカードの裏面(back.jpg)が見えている。
  • ダブルクリックすると、スムーズにカードが回転して表面(front.jpg)が表示される。
  • 再度ダブルクリックで裏面に戻る。

仕組みを大まかに説明すると…

  1. HTMLで「カード構造」を定義
  2. CSSで「3Dの回転アニメーション」を設定
  3. 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);
}

専門用語解説

プロパティ解説
perspective3D回転を実現するための視点距離(奥行き)
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 を使って複数のカードを制御
回転方向をランダムにrotateYrotateX に変更して縦に回転なども可
トランプ絵柄をランダムに設定JavaScriptで画像をランダムで入れ替えるようにする

今後の学習のステップ

このコードで学べた技術:

  • CSSの3Dトランスフォーム(transform, rotateY, backface-visibility
  • クラスのトグル操作でスタイルを切り替える
  • JavaScriptのdblclickイベント活用

次は以下のような応用にも挑戦してみてください!

  • アニメーションを連続クリックに対応させる(クリック連打対策)
  • requestAnimationFrame を使って手作りアニメーションを作ってみる
  • JavaScriptだけでカードの中身をランダム生成する

動きのあるインターフェースは、ユーザーにとっても開発者にとっても楽しい要素です!どんどん試して、表現力をアップさせてくださいね。質問があればいつでもどうぞ!