Collapse
いくつかのクラスとJavaScriptプラグインを使用して、プロジェクト全体のコンテンツの表示/非表示を切り替えます。
仕組み
collapse JavaScriptプラグインは、コンテンツの表示/非表示に使用されます。ボタンまたはアンカーは、切り替える特定の要素にマッピングされるトリガーとして使用されます。要素を折りたたむと、現在の値から0
までheight
がアニメーション化されます。CSSがアニメーションを処理する方法を考えると、.collapse
要素にpadding
を使用することはできません。代わりに、クラスを独立したラッピング要素として使用します。
prefers-reduced-motion
メディアクエリに依存します。アクセシビリティドキュメントのモーション軽減セクションを参照してください。例
下のボタンをクリックして、クラスの変更によって別の要素の表示/非表示を切り替えます。
.collapse
はコンテンツを非表示にします.collapsing
はトランジション中に適用されます.collapse.show
はコンテンツを表示します
一般的に、data-bs-target
属性を持つ<button>
を使用することをお勧めします。セマンティックな観点からは推奨されませんが、href
属性(およびrole="button"
)を持つ<a>
リンクも使用できます。どちらの場合も、data-bs-toggle="collapse"
が必要です。
<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プラグインは、水平方向の折りたたみに対応しています。height
の代わりにwidth
をトランジションするには、.collapse-horizontal
モディファイアクラスを追加し、直下の子要素にwidth
を設定します。独自のカスタムSassを作成したり、インラインスタイルを使用したり、幅ユーティリティを使用したりできます。
min-height
が設定されていますが、これは明示的に必要ではないことに注意してください。子要素のwidth
のみが必要です。
<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
属性で参照している場合、同じ要素を表示/非表示にできます。
<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
セレクターを指している場合は、コントロール要素にaria-controls
属性を追加し、折りたたみ可能要素のid
を含める必要があります。最新のスクリーンリーダーや同様の支援技術は、この属性を使用して、ユーザーが折りたたみ可能要素自体に直接移動するための追加のショートカットを提供します。
Bootstrapの現在の実装では、ARIA Authoring Practices Guideアコーディオンパターンで説明されているさまざまなオプションのキーボード操作はカバーされていないことに注意してください。カスタムJavaScriptでこれらを自分で含める必要があります。
CSS
Sass変数
$transition-collapse: height .35s ease;
$transition-collapse-width: width .35s ease;
クラス
collapseトランジションクラスは、複数のコンポーネント(collapseとaccordion)で共有されているため、scss/_transitions.scss
にあります。
.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属性を使用
data-bs-toggle="collapse"
とdata-bs-target
を要素に追加するだけで、1つ以上の折りたたみ可能要素の制御を自動的に割り当てます。data-bs-target
属性は、collapseを適用するCSSセレクターを受け入れます。折りたたみ可能要素にクラスcollapse
を追加してください。デフォルトで開くようにする場合は、追加のクラスshow
を追加します。
折りたたみ可能領域にアコーディオンのようなグループ管理を追加するには、data属性data-bs-parent="#selector"
を追加します。詳細については、アコーディオンページを参照してください。
JavaScriptを使用
手動で有効にするには
const collapseElementList = document.querySelectorAll('.collapse')
const collapseList = [...collapseElementList].map(collapseEl => new bootstrap.Collapse(collapseEl))
オプション
オプションはdata属性またはJavaScriptを介して渡すことができるため、data-bs-animation="{value}"
のようにオプション名をdata-bs-
に追加できます。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-config
、data-bs-
、およびjs object
のマージされた結果であり、最新の指定されたキーと値が他の値をオーバーライドします。
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
親 |
セレクター、DOM要素 | null |
親が指定されている場合、この折りたたみ可能アイテムが表示されると、指定された親の下にあるすべての折りたたみ可能要素が閉じられます。(従来のアコーディオンの動作に似ています - これはcard クラスに依存します)。属性は、ターゲットの折りたたみ可能領域に設定する必要があります。 |
トグル |
ブール値 | true |
呼び出し時に折りたたみ可能要素を切り替えます。 |
メソッド
コンテンツを折りたたみ可能要素としてアクティブ化します。オプションのobject
を受け入れます。
コンストラクターでcollapseインスタンスを作成できます。たとえば
const bsCollapse = new bootstrap.Collapse('#myCollapse', {
toggle: false
})
メソッド | 説明 |
---|---|
dispose |
要素のcollapseを破棄します。(DOM要素に保存されたデータを削除します) |
getInstance |
DOM要素に関連付けられたcollapseインスタンスを取得できる静的メソッドです。次のように使用できます。bootstrap.Collapse.getInstance(element) 。 |
getOrCreateInstance |
DOM要素に関連付けられたcollapseインスタンスを返す静的メソッドです。初期化されていない場合は新しいインスタンスを作成します。次のように使用できます。bootstrap.Collapse.getOrCreateInstance(element) 。 |
hide |
折りたたみ可能な要素を非表示にします。折りたたみ可能な要素が実際に非表示になる前(例えば、hidden.bs.collapse イベントが発生する前)に、呼び出し元に処理が戻ります。 |
show |
折りたたみ可能な要素を表示します。折りたたみ可能な要素が実際に表示される前(例えば、shown.bs.collapse イベントが発生する前)に、呼び出し元に処理が戻ります。 |
トグル |
折りたたみ可能な要素を表示/非表示に切り替えます。折りたたみ可能な要素が実際に表示または非表示になる前(つまり、shown.bs.collapse またはhidden.bs.collapse イベントが発生する前)に、呼び出し元に処理が戻ります。 |
イベント
Bootstrapのcollapseクラスは、折りたたみ機能にフックするためのいくつかのイベントを公開しています。
イベントタイプ | 説明 |
---|---|
hide.bs.collapse |
このイベントは、hide メソッドが呼び出された直後に発火します。 |
hidden.bs.collapse |
このイベントは、折りたたみ要素がユーザーから非表示になったときに発火します(CSSトランジションが完了するのを待ちます)。 |
show.bs.collapse |
このイベントは、show インスタンスメソッドが呼び出された直後に発火します。 |
shown.bs.collapse |
このイベントは、折りたたみ要素がユーザーに表示されたときに発火します(CSSトランジションが完了するのを待ちます)。 |
const myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', event => {
// do something...
})