Bootstrap: アコーディオンと折りたたみパネル
最終更新:2026-08-26
1. レッスンの紹介
(1) 前提条件
- レッスン 15: アラートコンポーネント
(2) 🎯 学習内容
- Collapseを使用して単一の要素を展開/折りたたむ
- リンクされたアコーディオンの動作のためにAccordionを使用する
accordion-flushを使用してボーダーを除去するdata-bs-parentを使用してリンクされた動作を制御する- 独立した折りたたみパネル(常に開いた状態のモード)を実装する
(3) 課題点
ボブは8つのよくある質問からなるFAQページを構築しています。彼はこれをAccordionを使って実装したいと考えています。ユーザーが質問をクリックすると回答が展開され、別のものをクリックすると自動的に前のものが折りたたまれ、スムーズな体験を提供し、ページのスペースを節約したいです。
(4) 解決策
Collapseコンポーネントは、限られたスペースに大量のコンテンツを表示するために使用されます。ユーザーはタイトルをクリックして詳細を表示し、再度クリックして非表示にします。Accordionは、Collapseコンポーネントの特殊な形式です。一度に1つのパネルだけが開いた状態になります。
理解のポイント: アコーディオンは折りたたみ可能な引き出しのセットのようなもので、一度に1つの引き出ししか引き出せません。Collapseは1つの引き出しであり、Accordionは複数の引き出しがリンクされたものです。
(5) 利点
アコーディオンを使用することで、限られたスペース内に大量のコンテンツを整理し、ページをすっきりさせ、閲覧体験を向上させることができます。
2. 単一の折りたたみパネル
最も基本的なCollapseコンポーネントです。
<p>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample">
Toggle content
</button>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
This content is hidden by default. Click the button to show or hide it.
</div>
</div>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
▶ サンプル 基本的な折りたたみパネル
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Collapse Demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<p>
<a class="btn btn-primary" data-bs-toggle="collapse" href="#singleCollapse" role="button">
Toggle with link
</a>
<button class="btn btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#singleCollapse">
Toggle with button
</button>
</p>
<div class="collapse" id="singleCollapse">
<div class="card card-body">
This content can be toggled using either the link or the button.
</div>
</div>
<hr>
<p>
<button class="btn btn-success" data-bs-toggle="collapse" data-bs-target=".multi-collapse">
Toggle both
</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="multiCollapse1">
<div class="card card-body">First collapsible panel.</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapse2">
<div class="card card-body">Second collapsible panel.</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
(1) Collapseの主要属性
| 属性/クラス | 説明 |
|---|---|
data-bs-toggle="collapse" |
トリガーを宣言します |
data-bs-target="#id" |
折りたたむ対象の要素を指定します |
class="collapse" |
デフォルトで非表示 |
class="collapse show" |
デフォルトで表示(展開状態) |
data-bs-parent="#accordion" |
リンクされた制御(Accordion用) |
3. Accordion
Accordionは複数の折りたたみパネルのリンクされた組み合わせで、最大で1つだけ展開できます。
<div class="accordion" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse"
data-bs-target="#faq1">
How do I install Bootstrap?
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse show"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
Add the CDN link to your HTML head.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#faq2">
Does Bootstrap need jQuery?
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
No, Bootstrap 5 uses vanilla JavaScript.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#faq3">
What is the grid system?
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
Bootstrap uses a 12-column flexbox grid system.
</div>
</div>
</div>
</div>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
(1) Accordionの構造
| 要素 | クラス | 説明 |
|---|---|---|
| コンテナ | accordion |
アコーディオングループを宣言 |
| アイテム | accordion-item |
単一の折りたたみパネル |
| ヘッダー | accordion-header |
ヘッダー行のコンテナ |
| トリガー | accordion-button |
クリック可能なタイトルボタン |
| コンテンツエリア | accordion-collapse collapse |
折りたたみ可能なコンテンツ |
| コンテンツ本文 | accordion-body |
実際に表示されるテキスト |
(2) 主要なメカニズム
data-bs-parent="#faqAccordion" // リンクされた(一度に1つだけ開く)
class="accordion-collapse collapse show" // デフォルトで展開
class="accordion-button collapsed" // 折りたたみ状態
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
4. Accordionのバリエーション
<!-- Flush (外枠なし) -->
<div class="accordion accordion-flush">
<div class="accordion-item">...</div>
</div>
<!-- 常に開いたモード (data-bs-parent を削除) -->
<div class="accordion" id="multiOpen">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#panel1">
Panel 1
</button>
</h2>
<!-- data-bs-parent なし — 独立している -->
<div id="panel1" class="accordion-collapse collapse show">
<div class="accordion-body">This panel stays open when Panel 2 is opened.</div>
</div>
</div>
</div>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
5. その他の折りたたみパネルの例
▶ サンプル FAQアコーディオン(ボーダーなし)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FAQ Accordion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<div class="accordion accordion-flush" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#faq1">
What is Bootstrap?
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse show" data-bs-parent="#faqAccordion">
<div class="accordion-body">Bootstrap is a free front-end framework for building responsive websites with HTML, CSS, and JavaScript.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq2">
Do I need to know JavaScript?
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">Basic Bootstrap components work without JS. Interactive components like modals and carousels need Bootstrap JS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq3">
Is Bootstrap free?
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">Yes, Bootstrap is completely free and open-source under the MIT license.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq4">
What is the grid system?
</button>
</h2>
<div id="faq4" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">Bootstrap's grid uses 12 columns with breakpoints for responsive layouts. Classes like col-md-6 create columns that adjust at different screen sizes.</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
▶ サンプル 常に開いたモード(独立したパネル)
<div class="accordion" id="independentAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelA">
Skills & Expertise
</button>
</h2>
<div id="panelA" class="accordion-collapse collapse show">
<div class="accordion-body">HTML, CSS, JavaScript, Bootstrap, React</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelB">
Work Experience
</button>
</h2>
<div id="panelB" class="accordion-collapse collapse show">
<div class="accordion-body">Senior Developer at TechCorp (2020-present), Frontend Developer at WebStudio (2018-2020)</div>
</div>
</div>
</div>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
▶ サンプル 独立したCollapseコンポーネント
<div class="container py-4">
<div class="d-flex gap-2 mb-3">
<button class="btn btn-primary" data-bs-toggle="collapse" data-bs-target="#demo1">
Toggle First
</button>
<button class="btn btn-outline-success" data-bs-toggle="collapse" data-bs-target="#demo2">
Toggle Second
</button>
<button class="btn btn-outline-danger" data-bs-toggle="collapse" data-bs-target=".multi-demo">
Toggle All
</button>
</div>
<div class="row">
<div class="col-md-6">
<div class="collapse multi-demo show" id="demo1">
<div class="card card-body">
First panel — visible by default.
</div>
</div>
</div>
<div class="col-md-6">
<div class="collapse multi-demo" id="demo2">
<div class="card card-body">
Second panel — initially hidden.
</div>
</div>
</div>
</div>
</div>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
▶ サンプル カード内の折りたたみパネル
<div class="card" style="max-width: 500px;">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">Order Summary</h5>
</div>
<div class="card-body">
<p class="card-text">Your order contains 3 items.</p>
<p>
<a class="btn btn-sm btn-outline-primary" data-bs-toggle="collapse" href="#orderDetails">
View Details
</a>
</p>
<div class="collapse" id="orderDetails">
<div class="border rounded p-3 bg-light">
<div class="d-flex justify-content-between mb-2">
<span>Wireless Mouse</span><span class="text-muted">$29.99</span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>USB-C Hub</span><span class="text-muted">$39.99</span>
</div>
<div class="d-flex justify-content-between">
<span>Mouse Pad</span><span class="text-muted">$12.99</span>
</div>
<hr>
<div class="d-flex justify-content-between fw-bold">
<span>Total</span><span>$82.97</span>
</div>
</div>
</div>
</div>
</div>
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
(1) Collapse/Accordionの動作原理
flowchart TD
A[トリガー<br/>data-bs-toggle=collapse] --> B[data-bs-target=#id]
B --> C[ターゲット要素<br/>class=collapse]
C --> D{初期状態}
D -->|show なし| E[デフォルトで非表示]
D -->|show あり| F[デフォルトで展開]
C --> G{data-bs-parent があるか?}
G -->|はい| H[リンクモード<br/>一度に1つだけ開く]
G -->|いいえ| I[独立モード<br/>個別に切り替え]
H --> J[Accordion]
I --> K[通常のCollapse]
出力: Bootstrap 5.3のスタイルが適用されたコンポーネント(ボタン、カード、カルーセル、折りたたみなど)。ページはデフォルトでBootstrapテーマ(ライト)とレスポンシブグリッドを使用しています。
| Collapse クラス | 効果 | 説明 |
|---|---|---|
collapse |
デフォルトで非表示 | ページ読み込み時に表示されない |
collapse show |
デフォルトで展開 | ページ読み込み時に表示される |
collapsing |
トランジション中 | アニメーション中に自動的に追加 |
accordion-collapse |
Accordion専用 | アコーディオン内で使用 |
| data-* 属性 | 値 | 目的 |
|---|---|---|
data-bs-toggle |
collapse |
折りたたみトリガーを宣言 |
data-bs-target |
#id / .class |
制御対象の要素を指定 |
data-bs-parent |
#accordionId |
リンク制約(アコーディオン) |
href |
#id |
リンクタイプのトリガー |
| Accordion バリエーション | クラス | 特徴 | シナリオ |
|---|---|---|---|
| 基本 | accordion |
標準ボーダー | 一般的な使用 |
| ボーダーなし | accordion-flush |
外枠/角丸なし | FAQ、サイドバー |
| 常に開いた | data-bs-parent を削除 |
複数パネルが同時に展開可能 | 設定パネル |
| カード内にネスト | card-body 内に配置 |
コンパクトなレイアウト | 注文詳細 |
❓ よくある質問
data-bs-parentでリンクされ、一度に1つだけ展開できるようになっています。bootstrap.bundle.min.jsが含まれていることを確認してください。ブラウザのコンソールでJSエラーがないか確認してください。data-bs-parent属性を単に削除してください。这样一来、各パネルは独立して動作し、他のパネルに影響を与えなくなります。accordion-body内には、フォームコントロールを含む任意のHTMLを配置できます。入力をクリックした際に誤ってアコーディオンの展開/折りたたみをトリガーしないように注意してください。イベントの伝播を防ぐにはevent.stopPropagation()を使用できます。📖 まとめ
- Collapse:
data-bs-toggle="collapse"+data-bs-target="#id"で単一要素を制御 - Accordion:
accordionコンテナ +accordion-item+accordion-button+accordion-collapse data-bs-parentでリンク動作を有効化。独立したパネルの場合は削除accordion-flushでボーダーを除去
📝 練習問題
- ⭐ FAQアコーディオンを作成: 少なくとも5つのよくある質問、最初のものはデフォルトで展開、他は折りたたまれている、ボーダーなしの
accordion-flushスタイルを使用。 - ⭐⭐ 宿題の回答をAccordionを使って実装 – 各質問をパネルとし、クリックで回答を表示。
- ⭐⭐⭐ サイドバーのナビゲーションアコーディオンを作成: ダッシュボード(サブアイテムなし)、製品(3つのサブアイテム)、注文(2つのサブアイテム)、設定(4つのサブアイテム)を含む。
前のレッスン: アラートコンポーネント · 次のレッスン: Bootstrapアイコン