Bootstrap5でアコーディオン実装【コードサンプルあり】
今回はBootstrap5における「アコーディオン」の実装方法と、オプションの実装方法をサンプル付きで紹介いたします。
目次
はじめに
Bootstrap5系を用いてモーダルの実装方法をご紹介します。
アコーディオンは、Bootstrapのコンポーネントを利用することで、比較的簡単に実装ができます。
アコーディオンは、狭いスペースを有効活用する用途など、さまざまな場面で活用できる便利な要素です!また、ユーザー体験の向上、アニメーションやトランジション効果などのメリットが見込めますね!
では、早速アコーディオンの実装方法を解説していきます。
Bootstrap5の読み込み
まずは、Bootstrap 5 を扱えるようにするため、Bootstrap 5をHTMLに読み込んでいきましょう。
Bootstrap 5は予めCDNなどで用意されています。
インストール方法は、コマンド、CDN、自サーバーにダウンロードするなど方法は様々ですが、
今回はBootstrap公式のCDN「jsDelivr」から読み込んでいきます。
Bootstrapのインストール
アコーディオンを正しく表示させるためには、BootstrapのCSSとJavaScriptをプロジェクトに含める必要があります。以下のコードを<head>
タグ内に追加します。
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap JS Bundle (Popper.jsも含まれています) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
Bootstrap 5の読み込みは以上です!!
アコーディオンの基本構造
アコーディオンを使うと、クリックすることでアコーディオンの内容を展開・折り畳むことができるようになります。
基本的なHTMLの構造
では、早速上記のコードをBootstrap5を読み込み済みのHTMLファイルに書いてみましょう。
実際の動きは、下のリンクから確認いただけます。
任意のIDを指定する箇所が3か所あるのでご注意ください。
同じ文字を入れておけばとりあえず動きます!
<div class="accordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#任意のID" aria-expanded="true" aria-controls="任意のID">
ボタン名
</button>
</h2>
<div id="任意のID" class="accordion-collapse collapse show">
<div class="accordion-body">
中身
</div>
</div>
</div>
</div>
基本アコーディオンサンプルアクセシビリティを考えたHTMLの構造
Webアクセシビリティを考えた場合、button要素にaria-label=”アコーディオンボタン”と入っていてもよいかもしれませんね。
<div class="accordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#任意のID" aria-expanded="true" aria-controls="任意のID" aria-label="アコーディオンボタン">
ボタン名
</button>
</h2>
<div id="任意のID" class="accordion-collapse collapse show">
<div class="accordion-body">
中身
</div>
</div>
</div>
</div>
オプション機能で拡張
ここでは、Bootstrap5に標準で搭載されているアコーディオンの拡張方法を解説していきます。
複数のアコーディオン
アコーディオンを2個、3個と複数表示させる方法です。
以下のコードの注意する点は4箇所です。
1.アコーディオン全体のID
以下のコードでは、対象が4箇所あります。
アコーディオン全体を囲うdivに1つ。
個々のアコーディオンに対して3つ。
以下のサンプルでは、AC_Sampleとしている箇所になります。
2.個々のアコーディオン要素に対してのID
個々のアコーディオン要素に対して、重複しないIDを振ります。
以下のコードはアコーディオンが3つなのでAC1、AC2、AC3としています。
アコーディオン全体にAC_Sampleを指定し、個々のアコーディオン要素のdata-bs-parentに対して#AC_Sampleを指定することで、3つのアコーディオン要素が連携します。
<div class="accordion" id="AC_Sample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#AC1" aria-expanded="true" aria-controls="AC1">
ボタン1
</button>
</h2>
<div id="AC1" class="accordion-collapse collapse show" data-bs-parent="#AC_Sample">
<div class="accordion-body">
中身1
</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="#AC2" aria-expanded="false" aria-controls="AC2">
ボタン2
</button>
</h2>
<div id="AC2" class="accordion-collapse collapse" data-bs-parent="#AC_Sample">
<div class="accordion-body">
中身2
</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="#AC3" aria-expanded="false" aria-controls="AC3">
ボタン3
</button>
</h2>
<div id="AC3" class="accordion-collapse collapse" data-bs-parent="#AC_Sample">
<div class="accordion-body">
中身3
</div>
</div>
</div>
</div>
複数のアコーディオンサンプル角丸や境界線、背景色を削除(Flash)
.accordionに.accordion-flushを追加することで、アコーディオン全体の角丸を消すことができます。
<div class="accordion accordion-flush" id="AC_Sample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#AC1" aria-expanded="true" aria-controls="AC1">
ボタン1
</button>
</h2>
<div id="AC1" class="accordion-collapse collapse show" data-bs-parent="#AC_Sample">
<div class="accordion-body">
中身1
</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="#AC2" aria-expanded="false" aria-controls="AC2">
ボタン2
</button>
</h2>
<div id="AC2" class="accordion-collapse collapse" data-bs-parent="#AC_Sample">
<div class="accordion-body">
中身2
</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="#AC3" aria-expanded="false" aria-controls="AC3">
ボタン3
</button>
</h2>
<div id="AC3" class="accordion-collapse collapse" data-bs-parent="#AC_Sample">
<div class="accordion-body">
中身3
</div>
</div>
</div>
</div>
Flashのアコーディオンサンプル常時オープン
それぞれのアコーディオン要素の.accordion-collapseのdata-bs-parent属性を省略して、別のアイテムが開かれたときにアコーディオンアイテムが開いたままになるようにします。
<div class="accordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#AC1" aria-expanded="true" aria-controls="AC1">
ボタン1
</button>
</h2>
<div id="AC1" class="accordion-collapse collapse show">
<div class="accordion-body">
中身1
</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="#AC2" aria-expanded="false" aria-controls="AC2">
ボタン2
</button>
</h2>
<div id="AC2" class="accordion-collapse collapse">
<div class="accordion-body">
中身2
</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="#AC3" aria-expanded="false" aria-controls="AC3">
ボタン3
</button>
</h2>
<div id="AC3" class="accordion-collapse collapse">
<div class="accordion-body">
中身3
</div>
</div>
</div>
</div>
常時オープンのアコーディオンサンプル変数
Sassを使うことで、細かな設定変更が可能です。
Sassを理解していれば簡単かと思いますが、Sassがちょっと難しいと思われる方は、アコーディオンにIDやclassを付与して対応も可能です!
変数
--#{$prefix}accordion-color: #{$accordion-color};
--#{$prefix}accordion-bg: #{$accordion-bg};
--#{$prefix}accordion-transition: #{$accordion-transition};
--#{$prefix}accordion-border-color: #{$accordion-border-color};
--#{$prefix}accordion-border-width: #{$accordion-border-width};
--#{$prefix}accordion-border-radius: #{$accordion-border-radius};
--#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};
--#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};
--#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};
--#{$prefix}accordion-btn-color: #{$accordion-button-color};
--#{$prefix}accordion-btn-bg: #{$accordion-button-bg};
--#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};
--#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
--#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
--#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};
Sass変数
$accordion-padding-y: 1rem;
$accordion-padding-x: 1.25rem;
$accordion-color: var(--#{$prefix}body-color);
$accordion-bg: var(--#{$prefix}body-bg);
$accordion-border-width: var(--#{$prefix}border-width);
$accordion-border-color: var(--#{$prefix}border-color);
$accordion-border-radius: var(--#{$prefix}border-radius);
$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width);
$accordion-body-padding-y: $accordion-padding-y;
$accordion-body-padding-x: $accordion-padding-x;
$accordion-button-padding-y: $accordion-padding-y;
$accordion-button-padding-x: $accordion-padding-x;
$accordion-button-color: var(--#{$prefix}body-color);
$accordion-button-bg: var(--#{$prefix}accordion-bg);
$accordion-transition: $btn-transition, border-radius .15s ease;
$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle);
$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis);
$accordion-button-focus-border-color: $input-focus-border-color;
$accordion-button-focus-box-shadow: $btn-focus-box-shadow;
$accordion-icon-width: 1.25rem;
$accordion-icon-color: $body-color;
$accordion-icon-active-color: $primary-text-emphasis;
$accordion-icon-transition: transform .2s ease-in-out;
$accordion-icon-transform: rotate(-180deg);
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>");
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>");
まとめ
この記事では、Bootstrap 5を使ったアコーディオンの実装方法について解説しました。
アコーディオンを利用することで、ページの見やすさと利便性が向上し、情報をコンパクトにまとめて表示できます。デザインのカスタマイズやJavaScriptを活用したインタラクションの追加も容易ですので、ぜひプロジェクトに取り入れてみてください。
Bootstrapのアコーディオンで、情報をわかりやすく整理して、ユーザーに優しいサイトを目指しましょう。
アイエムワークスはBootstrap5を使った制作や、部分的な実装も承っております。
お困りごとがございましたら是非お問い合わせください。
Bootstrap5に関するその他の記事
Bootstrap 5とBootstrap 4の主要変更点を比較
Bootstrap 4からBootstrap 5の主な変更点と、導入時に押さえておきたいポイントをまとめました。
Bootstrap5でモーダル実装【コードサンプルあり】
Bootstrap 5を使ったモーダルの実装方法。中央表示やスクロール対応、サイズ変更などオプションをサンプルコード付きで紹介!!