サイドバー

オフキャンバスまたはサイドドロワーとしても知られるBootstrapVueのカスタム<b-sidebar>コンポーネントは、固定位置の切り替え可能なスライドアウトボックスで、ナビゲーション、メニュー、詳細情報などに使用できます。ビューポートの左(デフォルト)または右に配置でき、オプションで背景サポートがあります。

BootstrapVue v2.10.0以降で使用可能です。

概要

<b-sidebar>オプションでスコープされたデフォルトスロットには、テキスト、ボタン、フォーム、画像、または垂直ナビゲーションなど、ほぼすべてのコンテンツを配置できます。

このコンポーネントは、ヘッダーと組み込みの閉じるボタンをサポートしており、必要に応じてオプションで無効化して独自のヘッダーを提供できます。また、当社のv-b-toggleディレクティブを使用して簡単に切り替えることができます。

このコンポーネントは、最小限のデフォルトスタイルしか持たないため、サイドバーのコンテンツのレイアウトに大きな柔軟性があります。

<template>
  <div>
    <b-button v-b-toggle.sidebar-1>Toggle Sidebar</b-button>
    <b-sidebar id="sidebar-1" title="Sidebar" shadow>
      <div class="px-3 py-2">
        <p>
          Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
          in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
        </p>
        <b-img src="https://picsum.photos/500/500/?image=54" fluid thumbnail></b-img>
      </div>
    </b-sidebar>
  </div>
</template>

<!-- b-sidebar.vue -->

コンテンツが利用可能なビューポートの高さよりも高い場合、サイドバーの本文にCSSを使用して垂直スクロールが自動的に有効になります。

スタイル

サイドバーの外観を制御するためのいくつかのプロパティが提供されています。

タイトル

サイドバーにはタイトルが必要です(特にアクセシビリティの理由から)。titleプロパティまたはtitleスロットを使用して、ヘッダーに表示されるタイトルを簡単に設定できます。titleスロットはtitleプロパティよりも優先されます。

no-headerプロパティが設定されている場合、titleプロパティとtitleスロットのどちらも効果がありません。

タイトルを指定しない場合は、aria-labelプロパティまたはaria-labelledbyプロパティを使用して、サイドバーのアクセシブルなタイトルを提供してください。詳細については、下記のアクセシビリティセクションを参照してください。

配置

デフォルトでは、サイドバーはビューポートの左側に配置されます。rightプロパティをtrueに設定すると、サイドバーがビューポートの右側に表示されます。

<template>
  <div>
    <b-button v-b-toggle.sidebar-right>Toggle Sidebar</b-button>
    <b-sidebar id="sidebar-right" title="Sidebar" right shadow>
      <div class="px-3 py-2">
        <p>
          Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
          in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
        </p>
        <b-img src="https://picsum.photos/500/500/?image=54" fluid thumbnail></b-img>
      </div>
    </b-sidebar>
  </div>
</template>

<!-- b-sidebar-right.vue -->

バリアント

bg-variantプロパティとtext-variantプロパティを使用して、それぞれ背景とテキストのテーマカラーバリアントを制御します。または、スタイルまたはクラスを適用して、背景色とテキスト色を指定することもできます。

<template>
  <div>
    <b-button v-b-toggle.sidebar-variant>Toggle Sidebar</b-button>
    <b-sidebar id="sidebar-variant" title="Sidebar" bg-variant="dark" text-variant="light" shadow>
      <div class="px-3 py-2">
        <p>
          Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
          in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
        </p>
        <b-img src="https://picsum.photos/500/500/?image=54" fluid thumbnail></b-img>
      </div>
    </b-sidebar>
  </div>
</template>

<!-- b-sidebar-variant.vue -->

標準のBootstrapテーマバリアントは、'white''light''dark''primary''secondary''success''danger''warning'、および'info'です。

デフォルトの背景バリアントは'light'で、デフォルトのテキストバリアントは'dark'です。

背景に影のあるサイドバーを希望しますか?shadowプロパティを、中程度の影の場合はブール値true、小さな影の場合は'sm'、大きな影の場合は'lg'に設定します。影を付けない場合はfalse(デフォルト)に設定します。

ボーダー

デフォルトでは、<b-sidebar>にはボーダーがありません。ボーダーユーティリティクラスを使用して、<b-sidebar>にボーダーを追加するか(sidebar-classプロパティを使用2.12.0+)、CSSスタイルのオーバーライドを使用します。

<template>
  <div>
    <b-button v-b-toggle.sidebar-border>Toggle Sidebar</b-button>
    <b-sidebar id="sidebar-border" sidebar-class="border-right border-danger">
      <div class="px-3 py-2">
        <p>
          Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
          in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
        </p>
        <b-img src="https://picsum.photos/500/500/?image=54" fluid thumbnail></b-img>
      </div>
    </b-sidebar>
  </div>
</template>

<!-- b-sidebar-border.vue -->

デフォルトでは、<b-sidebar>の幅は320px('xs'画面では100%)に設定されています。widthプロパティ(例:'180px''20em'など)を使用して値を指定すると、このデフォルト値を上書きできます。最大幅はCSSで100%に設定されています。

パディング

サイドバーはデフォルトではパディングがありません。コンポーネントにパディングユーティリティクラス、またはサイドバーのコンテンツにマージン/パディングユーティリティクラスを適用できます。

スライドトランジションの無効化

デフォルトでは、サイドバーは表示と非表示時にスライドトランジションを使用します。no-slideプロパティを使用して、スライドトランジションを無効化できます。

注:このコンポーネントのBootstrapVueで定義されたトランジション効果は、prefers-reduced-motionメディアクエリに依存しています。詳細については、アクセシビリティドキュメントのモーション低減セクションを参照してください。

スライドトランジションを無効にすると、オプションの背景のフェードトランジションも無効になります。

Z-index

サイドバーには、SCSS/CSSで定義されたデフォルトのz-indexがあります。状況によっては、サイドバーが他のコンテンツの上または下に表示されるように、異なるz-indexを使用する必要がある場合があります。CSSスタイルまたはz-indexプロパティを使用して実行できます。

スコープされたデフォルトスロット

defaultスロットを使用すると、サイドバーの本文コンテンツを提供できます。オプションでスコープされています。次のセクションの例では、デフォルトスロットスコープの使用を示しています。

body-classプロパティを使用して、本文セクションに任意のクラスを適用できます。

デフォルトでは、<b-sidebar>には、オプションのタイトルと閉じるボタン付きのヘッダーがあります。titleプロパティ、またはオプションでスコープされたtitleスロットを使用してタイトルを指定できます。

完全にカスタムヘッダーを提供する場合は、オプションでスコープされたheaderスロットを使用できます。

header-classプロパティを使用して、ヘッダーセクションに任意のクラスを適用し、デフォルトのパディングなどをオーバーライドできます。

デフォルトヘッダーの非表示

no-headerプロパティを使用して、デフォルトのヘッダー(閉じるボタンを含む)を無効化できます。サイドバーを閉じる方法を提供する必要があることに注意してください。defaultスロットはスコープされており、サイドバーを閉じるために使用できるhide()メソッドが含まれています。

<template>
  <div>
    <b-button v-b-toggle.sidebar-no-header>Toggle Sidebar</b-button>
    <b-sidebar id="sidebar-no-header" aria-labelledby="sidebar-no-header-title" no-header shadow>
      <template #default="{ hide }">
        <div class="p-3">
          <h4 id="sidebar-no-header-title">Custom header sidebar</h4>
          <p>
            Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
            in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
          </p>
          <nav class="mb-3">
            <b-nav vertical>
              <b-nav-item active @click="hide">Active</b-nav-item>
              <b-nav-item href="#link-1" @click="hide">Link</b-nav-item>
              <b-nav-item href="#link-2" @click="hide">Another Link</b-nav-item>
            </b-nav>
          </nav>
          <b-button variant="primary" block @click="hide">Close Sidebar</b-button>
        </div>
      </template>
    </b-sidebar>
  </div>
</template>

<!-- b-sidebar-no-header.vue -->

<b-sidebar>footerスロット(オプションでスコープ済み)を提供し、サイドバーの下部に表示されるコンテンツを提供できます。footerスロットはスコープされており、サイドバーを閉じるために使用できるhide()メソッドが含まれています。

<template>
  <div>
    <b-button v-b-toggle.sidebar-footer>Toggle Sidebar</b-button>
    <b-sidebar id="sidebar-footer" aria-label="Sidebar with custom footer" no-header shadow>
      <template #footer="{ hide }">
       <div class="d-flex bg-dark text-light align-items-center px-3 py-2">
        <strong class="mr-auto">Footer</strong>
        <b-button size="sm" @click="hide">Close</b-button>
       </div>
      </template>
      <div class="px-3 py-2">
        <p>
          Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis
          in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
        </p>
        <b-img src="https://picsum.photos/500/500/?image=54" fluid thumbnail></b-img>
      </div>
    </b-sidebar>
  </div>
</template>

<!-- b-sidebar-footer.vue -->

footer-classプロパティを使用して、フッターセクションに任意のクラスを適用できます。

遅延レンダリング

場合によっては、サイドバーが表示されていないときにコンテンツをレンダリングしたくない場合があります。<b-sidebar>lazyプロパティを設定するだけです。lazytrueの場合、サイドバーが閉じているときは本文とオプションのフッターがレンダリングされません(DOMから削除されます)。

バックドロップ

2.12.0+

サイドバーを開いた際に、backdrop プロパティを使用して基本的なバックドロップを追加します。trueに設定すると、サイドバーは不透明なバックドロップを表示します。no-close-on-backdrop プロパティがtrueに設定されていない限り、バックドロップをクリックするとサイドバーが閉じます。

オプションとして(BootstrapVue v2.15.0以降)、backdrop-variant プロパティを使用してバックドロップのテーマカラーバリアントを制御できます。デフォルトのバックドロップバリアントはdarkです。

<template>
  <div>
    <b-button v-b-toggle.sidebar-backdrop>Toggle Sidebar</b-button>

    <b-sidebar
      id="sidebar-backdrop"
      title="Sidebar with backdrop"
      :backdrop-variant="variant"
      backdrop
      shadow
    >
      <div class="px-3 py-2">
        <b-form-group label="Backdrop variant" label-for="backdrop-variant">
          <b-form-select id="backdrop-variant" v-model="variant" :options="variants"></b-form-select>
        </b-form-group>
      </div>
    </b-sidebar>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        variant: 'dark',
        variants: [
          'transparent',
          'white',
          'light',
          'dark',
          'primary',
          'secondary',
          'success',
          'danger',
          'warning',
          'info',
        ]
      }
    }
  }
</script>

<!-- b-sidebar-backdrop.vue -->

サイドバーが開いている場合でも、ボディのスクロールが可能になる場合があります(モーダルの動作とは異なります)。バックドロップが有効になっている場合、フォーカス拘束はサイドバー内のフォーカスを維持しようとします。まれに、ユーザーがサイドバー外の要素にフォーカスを移動できる可能性があることに注意してください。

表示制御

v-b-toggle ディレクティブ

v-b-toggle ディレクティブを使用することが、サイドバーを*開く*ための推奨方法です。これは、トリガー要素にaria-controlsaria-expandedアクセシビリティ属性を自動的に適用します。

このページのほとんどの例ではv-b-toggleディレクティブを使用しています。

v-model

v-modelは、サイドバーの現在の表示状態を反映します。サイドバーの表示状態を制御するために使用できますが、アクセシビリティの理由から、サイドバーを*表示する*にはv-b-toggleディレクティブを使用することをお勧めします。v-modelを使用してサイドバーを表示する場合は、aria-controls="id"属性(ここでidはサイドバーのIDです)をトリガー要素に配置し、aria-expanded属性(トリガー要素にも)を文字列'true'(サイドバーが開いている場合)または'false'(サイドバーが閉じている場合)のいずれかに設定する必要があります。

v-modelは内部的にvisibleプロパティにバインドされており、changeイベントはv-modelを更新します。

$route 変更時の閉じ方

デフォルトでは、<b-sidebar>$routeが変更されると(クエリとハッシュを含む完全なパス)、自身を閉じます。これは、サイドバーが<router-view>の外側に配置され、ナビゲーションに使用される場合に特に便利です。

no-close-on-route-changeプロパティをtrueに設定することで、この動作を無効にできます。

イベント

サイドバーは、サイドバーが開くとshownイベントを、サイドバーが閉じるとhiddenイベントを発生させます。

changeイベントはv-modelを更新するために使用され、サイドバーの表示状態が変更されるたびに発生します。

アクセシビリティ

<b-sidebar>は、いくつかのアクセシビリティ機能を提供します。

サイドバーが開かれると、サイドバー全体にフォーカスが当たります。これは、スクリーンリーダーとキーボードのみのユーザーにとって望ましいものです。サイドバーが閉じられると、サイドバーが開かれる前にフォーカスされていた要素にフォーカスが戻ります。

状況によっては、フォーカスの強制機能を完全に無効にする必要がある場合があります。これは、no-enforce-focusプロパティを設定することで行えますが、アクセシビリティの理由から、一般的には推奨されません。

サイドバーが開いている場合、ユーザーはEscキーを押してサイドバーを閉じることができます。この機能を無効にするには、no-close-on-escプロパティをtrueに設定します。バックドロップが有効な場合、no-close-on-backdropプロパティを使用して、バックドロップクリック時の閉じ方を無効にすることができます。

backdropプロパティがtrueの場合、サイドバーはサイドバー内でフォーカスを制限しようと試み、サイドバーにはaria-modal="true"属性が設定されます。

ヘッダーを非表示にした場合、またはサイドバーにタイトルがない場合は、aria-labelをサイドバーを説明する文字列に設定するか、aria-labelledbyをタイトルを含む要素のIDに設定します。lazyプロパティ*と*ヘッダーがない場合は、aria-labelプロパティを使用して、適切な文字列をサイドバーのラベルとして指定します。

実装に関するメモ

適切なスタイルとサイドバーの位置決めには、BootstrapVueのカスタムSCSS/CSSが必要です。

Bootstrap v4の背景('bg-*')とテキスト('text-*')のユーティリティクラスは、それぞれ背景色とフォント色の制御に使用されます。

<b-sidebar>のデフォルトスタイルの一部は、SASS変数を使用してカスタマイズできます。詳細については、テーマ設定に関するドキュメントを参照してください。

関連項目

コンポーネントリファレンス

<b-sidebar>

v2.10.0+

プロパティ

すべてのプロパティのデフォルト値はグローバルに設定可能です。

プロパティ
(昇順でソートするにはクリック)
(昇順でソートするにはクリック)
デフォルト
説明
aria-label
文字列レンダリングされた要素の`aria-label`属性の値を設定します。
aria-labelledby
文字列このコンポーネントのラベルを提供する要素のID。`aria-labelledby`属性の値として使用されます。
backdrop
v2.12.0+
ブール値false`true`の場合、サイドバーが開いているときにバックドロップが表示されます。
backdrop-variant
v2.15.0+
文字列'dark'サイドバーのバックドロップのテーマバリアントカラー。デフォルトは'dark'です。
bg-variant
文字列'light'サイドバーの背景のテーマバリアントカラー
body-class
ArrayまたはObjectまたはStringサイドバーのボディ(デフォルトスロット)に適用するクラス。
close-label
文字列組み込みの閉じるボタンに適用する`aria-label`。デフォルトは'Close'です。
footer-class
ArrayまたはObjectまたはStringオプションの`footer`スロットに適用するクラス。
footer-tag
v2.22.0+
文字列'footer'フッターのデフォルトタグの代わりにレンダリングするHTMLタグを指定します。
header-class
ArrayまたはObjectまたはString組み込みヘッダーに適用するクラス。`no-header`プロパティが設定されている場合は効果がありません。
header-tag
v2.22.0+
文字列'header'フッターのデフォルトタグの代わりにレンダリングするHTMLタグを指定します。
id
文字列レンダリングされたコンテンツの`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
lazy
ブール値false`true`に設定すると、サイドバーが開いている場合にのみサイドバーのコンテンツがレンダリングされます。
no-close-on-backdrop
v2.12.0+
ブール値false`true`に設定すると、ユーザーがバックドロップをクリックしたときにサイドバーが閉じることが無効になります。`backdrop`プロパティが設定されている必要があります。
no-close-on-esc
ブール値falseユーザーがESCキーを押したときにサイドバーが閉じることが無効になります。
no-close-on-route-change
ブール値falseルート変更時にサイドバーが閉じることが無効になります。
no-enforce-focus
v2.17.0+
ブール値falseサイドバー内でフォーカスを維持するフォーカス強制ルーチンを無効にします。
no-header
ブール値false`true`に設定すると、デフォルトのヘッダー(閉じるボタンを含む)のレンダリングが無効になります。
no-header-close
ブール値false`true`に設定すると、ヘッダーの閉じるボタンのレンダリングが無効になります。
no-slide
ブール値false設定すると、デフォルトのスライドアニメーションが無効になります。
right
ブール値false`true`の場合、ビューポートの右側にサイドバーを配置します。
shadow
BooleanまたはStringfalse中程度の影の場合はブール値`true`、小さな影の場合は'sm'、大きな影の場合は'lg'、影なしの場合はブール値`false`に設定します。デフォルトは影なしです。
sidebar-class
v2.12.0+
ArrayまたはObjectまたはStringサイドバーコンテンツラッパーに適用するクラス。
tag
文字列'div'デフォルトタグの代わりにレンダリングするHTMLタグを指定します。
text-variant
文字列'dark'サイドバーのテキストのテーマバリアントカラー
title
文字列デフォルトのヘッダーに配置するテキストコンテンツ。`title`スロットが優先されます。
visible
v-model
ブール値false`true`の場合、サイドバーが開きます。これは`v-model`です。
width
文字列サイドバーのCSS幅。SCSS/CSSで定義されているように、デフォルトは'320px'です。
z-index
NumberまたはStringSCSS/CSSで定義されている値を上書きする任意のz-index値を指定します。

v-model

プロパティ
イベント
visiblechange

スロット

名前
スコープ付き
説明
default サイドバーのボディに配置するコンテンツ
footer オプションのフッターに配置するコンテンツ
header v2.21.0+ヘッダーに配置するコンテンツ
header-close いいえヘッダーの閉じるボタンのコンテンツ。デフォルトは`<b-icon-x>`です。
title 組み込みヘッダーのタイトルに配置するコンテンツ。`title`プロパティよりも優先されます。

イベント

イベント
引数
説明
change
  1. visible - サイドバーが開いている場合は`true`、閉じている(または閉じている途中)の場合は`false`
サイドバーの表示状態が変更されるたびに発生します。`v-model`を更新するために使用されます。
hidden サイドバーが非表示になったときに発生します。
shown サイドバーが開いたときに発生します。

個々のコンポーネントのインポート

以下の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます。

コンポーネント
名前付きエクスポート
インポートパス
<b-sidebar>BSidebarbootstrap-vue

import { BSidebar } from 'bootstrap-vue'
Vue.component('b-sidebar', BSidebar)

Vue.jsプラグインとしてのインポート

このプラグインには、上記にリストされているすべての個々のコンポーネントが含まれています。プラグインには、コンポーネントのエイリアスも含まれています。

名前付きエクスポート
インポートパス
SidebarPluginbootstrap-vue

このプラグインには、以下のプラグインも自動的に含まれています。

  • VBTogglePlugin

import { SidebarPlugin } from 'bootstrap-vue'
Vue.use(SidebarPlugin)