マウスの動きに合わせて傾くカードを作る方法
マウスの動きに合わせて傾くカードを作る方法を紹介します。カードの上でマウスを動かすと、カーソルの位置に合わせてカードが左右や上下へ傾き、立体感のある動きを表現できます。カード自体は移動せず、その場で角度だけが変化するため、商品紹介やプロフィールカード、ポートフォリオなどに取り入れやすい演出です。
このサンプルでは、HTMLでカードを配置し、CSSで3D表示やアニメーションを設定します。JavaScriptではカード内のマウス位置を取得し、その位置に応じてrotateX()とrotateY()を変更することで、マウスの動きに合わせて自然にカードが傾くようにしています。マウスがカードから離れると、元の角度へ戻る動作も実装しています。
カードのサイズ、背景色、角丸、影、傾く角度、アニメーション速度などは自由に変更できます。少ないコードで立体感のあるカードUIを実装できるため、見た目に動きのあるWebサイトを作りたい場合にも利用しやすいサンプルです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
カードタイトル
カードの上でマウスを動かすと、カーソルの位置に合わせてカードが大きく傾きます。
このデモでは、カード上でマウスを動かすと、その位置に合わせてカードが左右・上下へ大きく傾きます。マウスがカードから離れると元の角度へ戻ります。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマホ表示に対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>マウスの動きに合わせて傾くカードを作る方法</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- カード表示エリア -->
<div class="mouse-tilt-card_demo">
<!-- マウスの動きに合わせて傾くカード -->
<div class="mouse-tilt-card_card">
<!-- カードタイトル -->
<h3>カードタイトル</h3>
<!-- カード説明文 -->
<p>
カードの上でマウスを動かすと、カーソルの位置に合わせてカードが大きく傾きます。
</p>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ページ外側の余白 */
font-family:sans-serif; /* 使用するフォント */
background:#f8fafc; /* ページ背景色 */
}
/* カード表示エリア */
.mouse-tilt-card_demo{
display:flex; /* カードを配置 */
justify-content:center; /* カードを中央寄せ */
padding:40px 20px; /* 外側の余白 */
background:#f8fbff; /* 表示エリアの背景色 */
border-radius:18px; /* 表示エリアの角丸 */
perspective:1000px; /* 3Dの奥行き */
}
/* マウスの動きに合わせて傾くカード */
.mouse-tilt-card_card{
display:flex; /* 中身を配置 */
flex-direction:column; /* 縦方向に並べる */
justify-content:center; /* 縦方向中央寄せ */
width:320px; /* カードの横幅 */
height:220px; /* カードの高さ */
padding:28px 24px; /* カード内側の余白 */
border:1px solid #dbeafe; /* カードの枠線 */
border-radius:18px; /* カードの角丸 */
background:#ffffff; /* カード背景色 */
box-shadow:0 12px 30px rgba(15,23,42,.08); /* カードの影 */
transform-style:preserve-3d; /* 3D変形を有効にする */
transition:transform .15s; /* 傾き変化のなめらかさ */
}
/* カードタイトル */
.mouse-tilt-card_card h3{
margin:0 0 12px; /* タイトル下の余白 */
color:#0f172a; /* タイトル文字色 */
font-size:22px; /* タイトル文字サイズ */
font-weight:900; /* タイトル文字の太さ */
}
/* カード説明文 */
.mouse-tilt-card_card p{
margin:0; /* 外側余白 */
color:#475569; /* 説明文文字色 */
font-size:15px; /* 説明文文字サイズ */
line-height:1.8; /* 行間 */
}
// マウス操作で傾くカードを取得
const mouseTiltCard = document.querySelector(".mouse-tilt-card_card");
// カード上でマウスを動かした時に処理を実行
mouseTiltCard.addEventListener("mousemove", function(event){
// カードの位置とサイズを取得
const rect = mouseTiltCard.getBoundingClientRect();
// カード内でのマウス位置を取得
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
/*
傾きの強さを設定
数値を大きくするとカードが大きく傾く
数値を小さくすると自然で控えめな動きになる
例
20 = 控えめ
50 = やや大きめ
100 = デモ向けの大きな動き
*/
const tiltPower = 100;
// 左右方向の回転角度を計算
const rotateY = ((x / rect.width) - 0.5) * tiltPower;
// 上下方向の回転角度を計算
const rotateX = ((rect.height / 2 - y) / rect.height) * tiltPower;
// 計算した角度をカードへ反映
mouseTiltCard.style.transform =
`rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
});
// マウスがカードから離れた時
mouseTiltCard.addEventListener("mouseleave", function(){
// カードを元の角度へ戻す
mouseTiltCard.style.transform =
"rotateX(0deg) rotateY(0deg)";
});
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3つのファイルで構成されています。HTMLではカードの構造、CSSではカードのデザインや3D表示、JavaScriptではマウス位置を取得してカードを傾ける処理を行っています。
sample/
├── index.html
├── style.css
└── script.js
sampleフォルダ内に各ファイルを配置し、ブラウザでsample/index.htmlを開くと動作を確認できます。カードのタイトルや説明文はindex.html、カードのサイズ・色・影・角丸などのデザインはstyle.cssから変更できます。また、傾きの強さはscript.js内のtiltPowerの値で調整できます。数値を大きくすると大きく傾き、小さくすると控えめな動きになります。
コメント