Skip to main content Skip to docs navigation

コラプス Collapse

いくつかのクラスとJavaScriptプラグインを使用して、プロジェクト全体でコンテンツの表示を切り替えます。

動作の仕組み

collapse JavaScriptプラグインは、コンテンツの表示と非表示に使用されます。ボタンまたはアンカーがトリガーとして使用され、切り替える特定の要素にマップされます。要素を折りたたむと、height が現在の値から 0 にアニメーション化されます。CSSがアニメーションを処理する方法を考慮すると、.collapse 要素に padding を使用することはできません。代わりに、このクラスを独立したラッパー要素として使用してください。

このコンポーネントのアニメーション効果は、prefers-reduced-motionメディアクエリに依存しています。詳細については、アクセシビリティドキュメントのreduced motionセクションを参照してください。

以下のボタンをクリックして、クラスの変更を介して別の要素を表示および非表示にします:

  • .collapse はコンテンツを非表示にします
  • .collapsing はトランジション中に適用されます
  • .collapse.show はコンテンツを表示します

一般的に、data-bs-target 属性を持つ <button> の使用をお勧めします。セマンティックな観点からは推奨されませんが、href 属性(および role="button")を持つ <a> リンクも使用できます。どちらの場合も、data-bs-toggle="collapse" が必要です。

Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
html
<p class="d-inline-flex gap-1">
  <a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
    Link with href
  </a>
  <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
    Button with data-bs-target
  </button>
</p>
<div class="collapse" id="collapseExample">
  <div class="card card-body">
    Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
  </div>
</div>

水平方向

collapseプラグインは水平方向の折りたたみをサポートしています。.collapse-horizontal モディファイアクラスを追加して、height の代わりに width をトランジションし、直接の子要素に width を設定します。独自のカスタムSassを記述するか、インラインスタイルを使用するか、width utilitiesを使用してください。

以下の例では、ドキュメントでの過度な再描画を避けるために min-height が設定されていますが、これは明示的に必要というわけではありません。子要素の width のみが必要です。

This is some placeholder content for a horizontal collapse. It’s hidden by default and shown when triggered.
html
<p>
  <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample">
    Toggle width collapse
  </button>
</p>
<div style="min-height: 120px;">
  <div class="collapse collapse-horizontal" id="collapseWidthExample">
    <div class="card card-body" style="width: 300px;">
      This is some placeholder content for a horizontal collapse. It’s hidden by default and shown when triggered.
    </div>
  </div>
</div>

複数のトグルとターゲット

<button> または <a> 要素は、data-bs-target または href 属性のセレクターで参照することにより、複数の要素を表示および非表示にできます。 逆に、複数の <button> または <a> 要素は、それぞれが data-bs-target または href 属性で参照する場合、同じ要素を表示および非表示にできます。

Some placeholder content for the first collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
Some placeholder content for the second collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
html
<p class="d-inline-flex gap-1">
  <a class="btn btn-primary" data-bs-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
  <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
  <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
</p>
<div class="row">
  <div class="col">
    <div class="collapse multi-collapse" id="multiCollapseExample1">
      <div class="card card-body">
        Some placeholder content for the first collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
      </div>
    </div>
  </div>
  <div class="col">
    <div class="collapse multi-collapse" id="multiCollapseExample2">
      <div class="card card-body">
        Some placeholder content for the second collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
      </div>
    </div>
  </div>
</div>

アクセシビリティ

コントロール要素に必ず aria-expanded を追加してください。この属性は、コントロールに関連付けられた折りたたみ可能な要素の現在の状態をスクリーンリーダーや同様の支援技術に明示的に伝えます。折りたたみ可能な要素がデフォルトで閉じている場合、コントロール要素の属性は aria-expanded="false" の値を持つ必要があります。show クラスを使用して折りたたみ可能な要素をデフォルトで開くように設定した場合は、代わりにコントロールに aria-expanded="true" を設定します。プラグインは、折りたたみ可能な要素が開かれたか閉じられたか(JavaScriptを介して、またはユーザーが同じ折りたたみ可能な要素に関連付けられた別のコントロール要素をトリガーしたため)に基づいて、コントロールのこの属性を自動的に切り替えます。コントロール要素のHTML要素がボタンでない場合(例:<a> または <div>)、要素に role="button" 属性を追加する必要があります。

コントロール要素が単一の折りたたみ可能な要素をターゲットにしている場合(つまり、data-bs-target 属性が id セレクターを指している場合)、折りたたみ可能な要素の id を含む aria-controls 属性をコントロール要素に追加する必要があります。最新のスクリーンリーダーや同様の支援技術は、この属性を使用して、ユーザーに折りたたみ可能な要素自体に直接移動するための追加のショートカットを提供します。

Bootstrapの現在の実装は、ARIA Authoring Practices Guide accordion patternに記載されているさまざまなオプションのキーボードインタラクションをカバーしていないことに注意してください - カスタムJavaScriptでこれらを自分で含める必要があります。

CSS

Sass変数

$transition-collapse:         height .35s ease;
$transition-collapse-width:   width .35s ease;

クラス

collapseのトランジションクラスは scss/_transitions.scss にあります。これらは複数のコンポーネント(collapseとaccordion)で共有されています。

.collapse {
  &:not(.show) {
    display: none;
  }
}

.collapsing {
  height: 0;
  overflow: hidden;
  @include transition($transition-collapse);

  &.collapse-horizontal {
    width: 0;
    height: auto;
    @include transition($transition-collapse-width);
  }
}

使用方法

collapseプラグインは、重い処理を処理するためにいくつかのクラスを利用します:

  • .collapse はコンテンツを非表示にします
  • .collapse.show はコンテンツを表示します
  • .collapsing はトランジションの開始時に追加され、終了時に削除されます

これらのクラスは _transitions.scss にあります。

データ属性による使用

要素に data-bs-toggle="collapse"data-bs-target を追加するだけで、1つ以上の折りたたみ可能な要素のコントロールが自動的に割り当てられます。data-bs-target 属性は、collapseを適用するCSSセレクターを受け入れます。折りたたみ可能な要素に必ず collapse クラスを追加してください。デフォルトで開いた状態にしたい場合は、追加のクラス show を追加します。

折りたたみ可能なエリアにアコーディオンのようなグループ管理を追加するには、データ属性 data-bs-parent="#selector" を追加します。詳細については、アコーディオンページを参照してください。

JavaScriptによる使用

手動で有効にするには:

const collapseElementList = document.querySelectorAll('.collapse')
const collapseList = [...collapseElementList].map(collapseEl => new bootstrap.Collapse(collapseEl))

オプション

オプションはdata属性またはJavaScriptを介して渡すことができます。data-bs-にオプション名を追加できます。例: data-bs-animation="{value}"。data属性を介してオプションを渡す場合は、オプション名の大文字小文字を"camelCase"から"kebab-case"に変更してください。例えば、data-bs-customClass="beautifier"の代わりにdata-bs-custom-class="beautifier"を使用します。

Bootstrap 5.2.0以降、すべてのコンポーネントは、JSON文字列として単純なコンポーネント設定を格納できる実験的な予約済みdata属性data-bs-configをサポートしています。要素にdata-bs-config='{"delay":0, "title":123}'data-bs-title="456"属性がある場合、最終的なtitle値は456になり、個別のdata属性はdata-bs-configで指定された値を上書きします。さらに、既存のdata属性はdata-bs-delay='{"show":0,"hide":150}'のようなJSON値を格納できます。

最終的な設定オブジェクトは、data-bs-configdata-bs-、およびjs objectのマージされた結果であり、最後に指定されたキー値が他の値を上書きします。

名前デフォルト説明
parentセレクター、DOM要素nullparentが提供されている場合、指定された親の下にあるすべての折りたたみ可能な要素は、この折りたたみ可能なアイテムが表示されたときに閉じられます(従来のアコーディオンの動作に似ています - これは card クラスに依存しています)。この属性は、ターゲットの折りたたみ可能なエリアに設定する必要があります。
togglebooleantrue呼び出し時に折りたたみ可能な要素を切り替えます。

メソッド

すべてのAPIメソッドは非同期でトランジションを開始します。 トランジションが開始されるとすぐに呼び出し元に戻りますが、終了する前に戻ります。さらに、トランジション中のコンポーネントに対するメソッド呼び出しは無視されます。JavaScriptドキュメントで詳細を確認してください。

コンテンツを折りたたみ可能な要素としてアクティブ化します。オプションの object を受け入れます。

コンストラクターでcollapseインスタンスを作成できます。例:

const bsCollapse = new bootstrap.Collapse('#myCollapse', {
  toggle: false
})
メソッド説明
dispose要素のcollapseを破棄します(DOM要素に保存されたデータを削除します)。
getInstanceDOM要素に関連付けられたcollapseインスタンスを取得できる静的メソッドです。次のように使用できます: bootstrap.Collapse.getInstance(element)
getOrCreateInstanceDOM要素に関連付けられたcollapseインスタンスを返すか、初期化されていない場合は新しいインスタンスを作成する静的メソッドです。次のように使用できます: bootstrap.Collapse.getOrCreateInstance(element)
hide折りたたみ可能な要素を非表示にします。折りたたみ可能な要素が実際に非表示になる前に呼び出し元に戻ります(例: hidden.bs.collapse イベントが発生する前)。
show折りたたみ可能な要素を表示します。折りたたみ可能な要素が実際に表示される前に呼び出し元に戻ります(例: shown.bs.collapse イベントが発生する前)。
toggle折りたたみ可能な要素を表示または非表示に切り替えます。折りたたみ可能な要素が実際に表示または非表示になる前に呼び出し元に戻ります(つまり、shown.bs.collapse または hidden.bs.collapse イベントが発生する前)。

イベント

Bootstrapのcollapseクラスは、collapse機能にフックするためのいくつかのイベントを公開しています。

イベントタイプ説明
hide.bs.collapseこのイベントは、hide メソッドが呼び出されたときにすぐに発火します。
hidden.bs.collapseこのイベントは、collapse要素がユーザーから非表示にされたときに発火します(CSSトランジションの完了を待ちます)。
show.bs.collapseこのイベントは、show インスタンスメソッドが呼び出されたときにすぐに発火します。
shown.bs.collapseこのイベントは、collapse要素がユーザーに表示されたときに発火します(CSSトランジションの完了を待ちます)。
const myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', event => {
  // do something...
})