<div>
<b-button v-b-toggle.collapse-1 variant="primary">Toggle Collapse</b-button>
<b-collapse id="collapse-1" class="mt-2">
<b-card>
<p class="card-text">Collapse contents Here</p>
<b-button v-b-toggle.collapse-1-inner size="sm">Toggle Inner Collapse</b-button>
<b-collapse id="collapse-1-inner" class="mt-2">
<b-card>Hello!</b-card>
</b-collapse>
</b-card>
</b-collapse>
</div>
使用方法
他の要素は、v-b-toggle
ディレクティブを使用して<b-collapse>
コンポーネントの表示/非表示を簡単に切り替えることができます。
<div>
<b-button v-b-toggle.collapse-2 class="m-1">Toggle Collapse</b-button>
<b-button v-b-toggle="'collapse-2'" class="m-1">Toggle Collapse</b-button>
<b-collapse id="collapse-2">
<b-card>I am collapsible content!</b-card>
</b-collapse>
</div>
詳細な使用方法については、v-b-toggle
ディレクティブのドキュメントを参照してください。
初期表示(展開して開始)
<b-collapse>
を最初に表示するには、visible
プロパティを設定します。
<div>
<b-button v-b-toggle.collapse-3 class="m-1">Toggle Collapse</b-button>
<b-collapse visible id="collapse-3">
<b-card>I should start open!</b-card>
</b-collapse>
</div>
デフォルトでは、最初に表示される折りたたみは、マウント時にアニメーションしません。visible
またはv-model
がtrue
の場合に、マウント時の折りたたみ展開アニメーションを有効にするには、<b-collapse>
にappear
プロパティを設定します。
v-model
サポート
コンポーネントの折りたたみ済み(表示)状態は、visible
プロパティに内部的にバインドするv-model
を使用して設定することもできます。
v-model
を使用して<b-collapse>
を制御する場合、aria-*
属性とクラスcollapsed
は、トリガーボタンには自動的に配置されません(v-b-toggle
ディレクティブを使用する場合とは異なります)。この例では、適切なアクセシビリティサポートのために、属性を自分で制御する必要があります。
<template>
<div>
<b-button
:class="visible ? null : 'collapsed'"
:aria-expanded="visible ? 'true' : 'false'"
aria-controls="collapse-4"
@click="visible = !visible"
>
Toggle Collapse
</b-button>
<b-collapse id="collapse-4" v-model="visible" class="mt-2">
<b-card>I should start open!</b-card>
</b-collapse>
</div>
</template>
<script>
export default {
data() {
return {
visible: true
}
}
}
</script>
複数の折りたたみ要素のトリガー
修飾子を使用して複数のターゲットIDを提供することで、単一のv-b-toggle
を使用して、複数の<b-collapse>
コンポーネントを折りたたむこともできます。
BootstrapVueリリースv2.14.0以降では、ディレクティブの値を介して複数のターゲットIDを渡すこともできます。
<div>
<b-button v-b-toggle.collapse-a.collapse-b>Toggle Collapse A and B</b-button>
<b-button v-b-toggle="'collapse-a collapse-b'">Toggle Collapse A and B</b-button>
<b-button v-b-toggle="['collapse-a', 'collapse-b']">Toggle Collapse A and B</b-button>
<b-collapse id="collapse-a" class="mt-2">
<b-card>I am collapsible content A!</b-card>
</b-collapse>
<b-collapse id="collapse-b" class="mt-2">
<b-card>I am collapsible content B!</b-card>
</b-collapse>
</div>
アコーディオンサポート
accordion
プロパティを介してアコーディオングループ識別子を指定することにより、複数の<b-collapse>
コンポーネントをアコーディオンに変換できます。アコーディオングループでは、一度に開くことができる折りたたみは1つだけです。
<template>
<div class="accordion" role="tablist">
<b-card no-body class="mb-1">
<b-card-header header-tag="header" class="p-1" role="tab">
<b-button block v-b-toggle.accordion-1 variant="info">Accordion 1</b-button>
</b-card-header>
<b-collapse id="accordion-1" visible accordion="my-accordion" role="tabpanel">
<b-card-body>
<b-card-text>I start opened because <code>visible</code> is <code>true</code></b-card-text>
<b-card-text>{{ text }}</b-card-text>
</b-card-body>
</b-collapse>
</b-card>
<b-card no-body class="mb-1">
<b-card-header header-tag="header" class="p-1" role="tab">
<b-button block v-b-toggle.accordion-2 variant="info">Accordion 2</b-button>
</b-card-header>
<b-collapse id="accordion-2" accordion="my-accordion" role="tabpanel">
<b-card-body>
<b-card-text>{{ text }}</b-card-text>
</b-card-body>
</b-collapse>
</b-card>
<b-card no-body class="mb-1">
<b-card-header header-tag="header" class="p-1" role="tab">
<b-button block v-b-toggle.accordion-3 variant="info">Accordion 3</b-button>
</b-card-header>
<b-collapse id="accordion-3" accordion="my-accordion" role="tabpanel">
<b-card-body>
<b-card-text>{{ text }}</b-card-text>
</b-card-body>
</b-collapse>
</b-card>
</div>
</template>
<script>
export default {
data() {
return {
text: `
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry
richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor
brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon
tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore
wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher
vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic
synth nesciunt you probably haven't heard of them accusamus labore VHS.
`
}
}
}
</script>
注記
- アコーディオンモードを使用する場合は、トリガー要素と
<b-collapse>
コンポーネントをrole="tablist"
を持つ要素内に配置し、各トリガー要素のコンテナにrole="tab"
を設定してください(各トリガー要素をラップする必要があります)。これにより、スクリーンリーダーユーザーがアコーディオングループを簡単に操作できるようになります。 - アコーディオンモードで
<b-collapse>
のv-model
機能を使用する場合は、アコーディオングループ内のすべての折りたたみのv-model
またはvisible
プロパティを同じ変数にバインドしないでください。 - アコーディオングループでは、
visible
プロパティとv-model
がtrue
に設定されている<b-collapse>
は、最大1つにする必要があります。アコーディオングループでは、一度に開くことができる折りたたみは1つだけです。
折りたたみ状態に基づいてトグルボタンのコンテンツの表示/非表示を切り替える
v-b-toggle
ディレクティブを使用すると、折りたたみが閉じている場合、クラスcollapsed
がトリガー要素に自動的に配置され、開いている場合は削除されます。このクラスを使用して、カスタムCSSを介してトグル内のコンテンツの表示/非表示を切り替えることができます。BootstrapVue 2.14.0以降、ターゲットが閉じられていない場合、クラスnot-collapsed
が適用されます。
HTMLマークアップ例
<div>
<b-button v-b-toggle:my-collapse>
<span class="when-open">Close</span><span class="when-closed">Open</span> My Collapse
</b-button>
<b-collapse id="my-collapse">
</b-collapse>
</div>
カスタムCSS例
.collapsed > .when-open,
.not-collapsed > .when-closed {
display: none;
}
'グローバル' $rootインスタンスイベント
$root
インスタンスを使用すると、<b-collapse>
が使用されているコンポーネントの外でイベントを発行およびリッスンすることができます。簡単に言うと、$root
はグローバルイベントエミッターおよびリスナーのように動作します。$root
インスタンスの詳細については、公式Vueドキュメントを参照してください。
$rootイベントを介した折りたたみ状態の変化のリッスン
折りたたみ状態の変化をリッスンするには、以下を使用します。
export default {
mounted() {
this.$root.$on('bv::collapse::state', (collapseId, isJustShown) => {
console.log('collapseId:', collapseId)
console.log('isJustShown:', isJustShown)
})
}
}
ここで、collapseId
は状態が変更された折りたたみのIDです。isJustShown
はtrue/false、つまり表示/非表示の折りたたみです。
$rootイベントを介した折りたたみの切り替え
特定の折りたたみを表示/非表示を切り替えるには、折りたたみのid
を渡します。
this.$root.$emit('bv::toggle::collapse', 'my-collapse-id')
オプションでスコープされたデフォルトスロット
v2.2.0の新機能
デフォルトスロットはオプションでスコープできます。次のスコーププロパティを使用できます。
プロパティ | 型 | 説明 |
visible | ブール値 | 折りたたみの表示状態 |
close | 関数 | 呼び出されると、折りたたみを閉じます |
アクセシビリティ
v-b-toggle
ディレクティブは、ディレクティブが表示されるコンポーネントにaria-controls
とaria-expanded
のARIA属性を自動的に追加します(展開されていない場合はクラスcollapsed
も追加します)。aria-expanded
はターゲット<b-collapse>
コンポーネントの状態を反映し、aria-controls
はターゲット<b-collapse>
コンポーネントのIDに設定されます。
ディレクティブv-b-toggle
の代わりにv-model
を使用して表示状態を設定する場合は、トグル要素にaria-controls
およびその他の適切な属性とクラスを自分で追加する必要があります。
v-b-toggle
ディレクティブはほぼすべてのHTML要素またはVueコンポーネントに配置できますが、トグルとしてボタンまたはリンク(または同様のコンポーネント)を使用することをお勧めします。そうでない場合、トリガー要素はキーボードやスクリーンリーダーユーザーにとってアクセスできない可能性があります。ボタンまたはリンク(または同様のコンポーネント)以外の要素に配置する場合は、属性tabindex="0"
とrole="button"
を追加して、支援技術のユーザーがトリガー要素にアクセスできるようにする必要があります。
アコーディオンモードを使用する場合は、トリガー要素と<b-collapse>
コンポーネントをrole="tablist"
を持つ要素内に配置し、スクリーンリーダーユーザーがアコーディオングループを簡単に操作できるように、各トリガー要素のコンテナにrole="tab"
を設定してください。残念ながら、BootstrapVueは最終的なドキュメントのマークアップに依存するため、これらの役割を自動的に適用することはできません。
注記:このコンポーネントのアニメーション効果は、prefers-reduced-motion
メディアクエリに依存します。詳細については、アクセシビリティドキュメントの低モーションセクションを参照してください。
関連項目