クリックでカードを展開して詳細を表示する方法【HTML/CSS/JavaScript・サンプルコード付き】
カードUI
クリックでカードを展開して詳細を表示する方法
クリックでカードを展開して詳細を表示する方法を紹介します。カードをクリックすると高さが伸びて詳細情報が表示され、もう一度クリックすると元のサイズへ戻るシンプルなサンプルです。商品紹介、プロフィール、FAQ、サービス説明など、必要な時だけ詳細を表示したい場面で利用できます。
このサンプルでは、HTMLでカードの構造を作成し、CSSでカードが滑らかに伸縮するアニメーションを設定しています。JavaScriptではクリック操作に応じてクラスを切り替え、カードを展開・折りたたみできるようにしています。
カードのタイトルや詳細内容、色、サイズ、角丸、影、アニメーション速度などは自由に変更できます。コンテンツ量に応じてカードをコンパクトにまとめられるため、情報量の多いページでも見やすいレイアウトを作成できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
カードタイトル
ボタンをクリックすると、カードの詳細を表示できます。
詳細情報
ここには商品の説明やプロフィール、補足情報などを自由に表示できます。もう一度ボタンを押すと折りたためます。
このデモでは、ボタンをクリックするとカード内の詳細エリアが展開され、もう一度クリックすると折りたたまれます。
コードをコピーして使おう!
<!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="expand-card-details_demo">
<!-- 展開できるカード -->
<div class="expand-card-details_card">
<!-- カード上部 -->
<div class="expand-card-details_header">
<!-- カードタイトル -->
<h3>カードタイトル</h3>
<!-- 短い説明文 -->
<p>
ボタンをクリックすると、カードが展開して詳細情報を表示します。
</p>
</div>
<!-- 詳細エリア -->
<div class="expand-card-details_body">
<!-- 詳細内容 -->
<div class="expand-card-details_content">
<h4>詳細情報</h4>
<p>
ここには商品の説明、プロフィール、補足情報などを表示できます。もう一度ボタンをクリックすると、カードが折りたたまれます。
</p>
</div>
</div>
<!-- 展開ボタン -->
<button class="expand-card-details_button" type="button">
詳しく見る
</button>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ページ外側の余白 */
font-family:sans-serif; /* 使用するフォント */
background:#f8fafc; /* ページ背景色 */
}
/* カード表示エリア */
.expand-card-details_demo{
display:flex; /* カードを配置 */
justify-content:center; /* カードを中央寄せ */
padding:40px 20px; /* 外側の余白 */
background:#f8fbff; /* 表示エリアの背景色 */
border-radius:18px; /* 表示エリアの角丸 */
}
/* 展開できるカード */
.expand-card-details_card{
width:360px; /* カードの横幅 */
overflow:hidden; /* 折りたたみ時にはみ出す詳細を隠す */
border:1px solid #dbeafe; /* カードの枠線 */
border-radius:18px; /* カードの角丸 */
background:#ffffff; /* カード背景色 */
box-shadow:0 12px 30px rgba(15,23,42,.08); /* カードの影 */
}
/* カード上部 */
.expand-card-details_header{
padding:24px; /* 上部エリアの内側余白 */
}
/* カードタイトル */
.expand-card-details_header h3{
margin:0 0 10px; /* タイトル下の余白 */
color:#0f172a; /* タイトル文字色 */
font-size:22px; /* タイトル文字サイズ */
font-weight:900; /* タイトル文字の太さ */
}
/* 短い説明文 */
.expand-card-details_header p{
margin:0; /* 外側余白 */
color:#475569; /* 説明文文字色 */
line-height:1.8; /* 行間 */
}
/* 詳細エリア */
.expand-card-details_body{
max-height:0; /* 初期状態では高さを0にする */
overflow:hidden; /* 閉じている時に中身を隠す */
border-top:1px solid transparent; /* 閉じている時は境界線を見せない */
transition:max-height .35s ease, border-color .35s ease; /* 展開アニメーション */
}
/* 展開状態の詳細エリア */
.expand-card-details_card.is-open .expand-card-details_body{
max-height:260px; /* 展開時の最大高さ */
border-top-color:#e5e7eb; /* 展開時の境界線 */
}
/* 詳細内容 */
.expand-card-details_content{
padding:24px; /* 詳細エリアの内側余白 */
}
/* 詳細見出し */
.expand-card-details_content h4{
margin:0 0 12px; /* 見出し下の余白 */
color:#0f172a; /* 見出し文字色 */
font-size:18px; /* 見出し文字サイズ */
font-weight:900; /* 見出し文字の太さ */
}
/* 詳細説明文 */
.expand-card-details_content p{
margin:0; /* 外側余白 */
color:#475569; /* 詳細文文字色 */
line-height:1.8; /* 行間 */
}
/* 展開ボタン */
.expand-card-details_button{
display:block; /* 横幅指定を効かせる */
width:calc(100% - 48px); /* カード幅から左右余白を引いた幅 */
margin:0 24px 24px; /* ボタン外側の余白 */
padding:12px; /* ボタン内側の余白 */
border:none; /* 枠線なし */
border-radius:10px; /* ボタンの角丸 */
background:#2563eb; /* ボタン背景色 */
color:#ffffff; /* ボタン文字色 */
font-size:15px; /* ボタン文字サイズ */
font-weight:700; /* ボタン文字の太さ */
cursor:pointer; /* クリックできることを示す */
}
// 展開するカードを取得
const expandCardDetailsCard = document.querySelector(".expand-card-details_card");
// 展開ボタンを取得
const expandCardDetailsButton = document.querySelector(".expand-card-details_button");
// ボタンをクリックした時に処理を実行
expandCardDetailsButton.addEventListener("click", function(){
// カードに展開状態のクラスを付け外しする
expandCardDetailsCard.classList.toggle("is-open");
// カードが展開されているか判定
if(expandCardDetailsCard.classList.contains("is-open")){
// 展開中のボタン文言
expandCardDetailsButton.textContent = "閉じる";
}else{
// 折りたたみ中のボタン文言
expandCardDetailsButton.textContent = "詳しく見る";
}
});
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3つのファイルで構成されています。HTMLではカードや詳細エリアの構造を作成し、CSSではカードのデザインや展開アニメーションを設定しています。JavaScriptではボタンのクリックに応じてカードを展開・折りたたみする処理を行っています。
sample/
├── index.html
├── style.css
└── script.js
sampleフォルダ内に各ファイルを配置し、ブラウザでsample/index.htmlを開くと動作を確認できます。カードのタイトルや詳細内容はindex.html、カードの色・サイズ・角丸・影・アニメーションはstyle.cssから変更できます。また、script.jsではクリック時の展開・折りたたみ処理やボタンの表示文字を変更しているため、動作や表示内容を自由にカスタマイズできます。
クリックでカードを展開して詳細を表示する方法【HTML/CSS/JavaScript・サンプルコード付き】
コメント