3D ティルト カード(JS)

アニメーション Medium #js #3d #tilt #perspective

マウスの位置に合わせてカードが立体的に傾く、わずかな Vanilla JavaScript による 3D ティルトです。親に perspective で奥行きを与え、内側に transform-style: preserve-3d を指定。

▶ プレビュー

解説

マウスの位置に合わせてカードが立体的に傾く、わずかな Vanilla JavaScript による 3D ティルトです。親に perspective で奥行きを与え、内側に transform-style: preserve-3d を指定。mousemove でカード上のカーソル座標を取得し、中心からのずれ(-0.5 から 0.5)を計算して、その値に応じて rotateYrotateX を当てています。右に動かせば右へ、上に動かせば上へ向く自然な追従で、mouseleave で傾きをリセットして水平に戻ります。transition を 0.15 秒と短めにし、機敏かつカクつかない手触りです。

向いている場面

  • プロダクトやアプリのショーケース・ヒーロー要素
  • 注目させたいバナーや特集カード
  • ポートフォリオで作品サムネに遊び心を加えたいとき

傾きの強さは JS 内の係数(x*20-y*20 の 20)を上下させるだけで調整でき、小さくすると上品に、大きくすると派手になります。rotateX 側の符号を反転しているのは、上にカーソルがあるとき上端が手前に来る直感的な向きにするためです。ホバー前提なのでタッチ端末では動かず、動きに敏感な利用者のために prefers-reduced-motion でティルトを無効化する分岐を入れておくと安心です。

使用例・適したシーン

  • ナビゲーションのインタラクティブ装飾
  • ギャラリーのホバーリビール
  • サービスカードの強調

よくある質問

傾く角度をもっと控えめにできますか?
JavaScript の中で rotateY と rotateX に掛けている係数(サンプルでは 20)を小さくすると、傾きが浅くなって上品な印象になります。逆に大きくすると派手に傾きます。10 前後にすると、さりげない立体感に落ち着きます。
スマホのタッチでも動きますか?
このサンプルはマウスの移動を前提にしているため、タッチ端末では傾きません。スマホでも動かしたい場合は、端末の傾きを取る別の仕組みが必要になります。スマホでは静的なカードとして見せ、PC のみ演出を効かせる使い分けが現実的です。
inspired by common pattern / 追加日:2026-05-12
← すべてのスニペットへ戻る