<div>
<b-nav>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Another Link</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
概要
ベースの<b-nav>
コンポーネントはflexboxで構築されており、あらゆるタイプのナビゲーションコンポーネントを構築するための強力な基盤を提供します。(リストを操作するための)いくつかのスタイルのオーバーライド、より大きなヒットエリアのためのいくつかのリンクパディング、および基本的な無効化スタイルが含まれています。ベースナビにはアクティブ状態は含まれていません。
<b-nav>
は、以下の子コンポーネントをサポートしています。
- アクション可能なリンク(またはrouter-links)用の
<b-nav-item>
- ドロップダウン用の
<b-nav-item-dropdown>
- プレーンテキストコンテンツ用の
<b-nav-text>
- インラインフォーム用の
<b-nav-form>
リンクの外観
tabs
とpills
の2つのスタイルバリエーションがサポートされており、active
状態のスタイルをサポートしています。これらのバリアントは相互に排他的です。いずれか一方のスタイルのみを使用してください。
タブスタイル
tabs
プロパティを設定して、ナビをタブのように見せます。
<div>
<b-nav tabs>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Another Link</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
ピルスタイル
pills
プロパティを設定してピルスタイルを使用します。
<div>
<b-nav pills>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Another Link</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
小
small
プロパティを設定してナビを小さくします。
<div>
<b-nav small>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Another Link</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
塗りつぶしと均等配置
<b-nav>
コンテンツを強制的に利用可能な幅全体に拡張します。
塗りつぶし
利用可能なすべてのスペースを<b-nav-item>
コンポーネントで均等に埋めるには、fill
プロパティを設定します。すべての水平スペースが占有されていますが、すべてのナビ項目が同じ幅であるとは限りません。
<div>
<b-nav tabs fill>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Link with a long name </b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
均等配置
均等幅の要素の場合は、代わりにjustified
プロパティを設定します。すべての水平スペースはナビリンクで占有されますが、上記のfill
とは異なり、すべての<b-nav-item>
は同じ幅になります。
<div>
<b-nav tabs justified>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Link with a long name </b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
配置
<b-nav-item>
コンポーネントを配置するには、align
プロパティを使用します。使用可能な値は、left
、center
、およびright
です。
<div>
<b-nav tabs align="center">
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Link with a long name </b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
垂直バリエーション
デフォルトでは、<b-nav>
は水平線上に表示されます。vertical
プロパティを設定して、ナビゲーションを積み重ねます。
<div>
<b-nav vertical class="w-25">
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item>Another Link</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</div>
ドロップダウンのサポート
ナビゲーション内にドロップダウンアイテムを配置するには、<b-nav-item-dropdown>
を使用します。
<div>
<b-nav pills>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Link</b-nav-item>
<b-nav-item-dropdown
id="my-nav-dropdown"
text="Dropdown"
toggle-class="nav-link-custom"
right
>
<b-dropdown-item>One</b-dropdown-item>
<b-dropdown-item>Two</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-item>Three</b-dropdown-item>
</b-nav-item-dropdown>
</b-nav>
</div>
場合によっては、デフォルトでnav-link
とdropdown-toggle
クラスを持つ生成されたドロップダウントグルボタンに独自のクラス名を追加したい場合があります。それらを追加するには(上記のように)toggle-class
プロパティを使用します。これは次のようなHTMLをレンダリングします
<li id="my-nav-dropdown" class="nav-item b-nav-dropdown dropdown">
<a
role="button"
href="#my-nav-dropdown"
id="my-nav-dropdown__BV_button_"
aria-haspopup="true"
aria-expanded="false"
class="nav-link dropdown-toggle nav-link-custom"
></a>
...
</li>
サポートされているサブコンポーネントのリストについては、<b-dropdown>
を参照してください。
オプションでスコープされるデフォルトスロット
ドロップダウンのデフォルトスロットは、オプションで、以下のスコープで使用できます
プロパティまたはメソッド | 説明 |
hide() | ドロップダウンメニューを閉じるために使用できます。オプションのブール引数を受け入れます。この引数がtrue の場合、トグルボタンにフォーカスを返します |
レイジードロップダウン
デフォルトでは、<b-nav-item-dropdown>
は、メニューが表示されていない場合でも、DOMにメニューコンテンツをレンダリングします。同じページに多数のドロップダウンがレンダリングされると、メモリ使用量が全体的に大きくなるため、パフォーマンスに影響を与える可能性があります。lazy
プロパティをtrueに設定することで、<b-nav-item-dropdown>
にメニューコンテンツが表示されたときにのみレンダリングするように指示できます。
ドロップダウンの配置
right
、dropup
、dropright
、dropleft
、no-flip
、およびoffset
のドロップダウンプロパティを使用して、<b-nav-item-dropdown>
の配置を制御します。
これらのプロパティの効果と使用法の詳細については、<b-dropdown>
の配置セクションを参照してください。
ドロップダウンの実装に関する注意
トグルボタンは実際には、スタイリング目的でrole="button"
が付いたリンク<a>
タグとしてレンダリングされ、通常、href
は、id
プロパティを介してIDが提供されない限り、#
に設定されることに注意してください。
トグルは、トグルリンクをクリックしたときに、スクロールトップトップの動作(JavaScript経由)を防止します。SSRを使用している場合、ユーザーがVueがコンポーネントをハイドレートする機会を得る前にトグルボタンをクリックすると、ページが上部にスクロールすることがあります。このような場合、id
プロパティを介して一意のIDを提供するだけで、不要なトップへのスクロール動作を防止できます。
ナビテキストコンテンツ
ナビにプレーンテキストコンテンツを配置するには、<b-nav-text>
子コンポーネントを使用します
<div>
<b-nav >
<b-nav-item href="#1">Link 1</b-nav-item>
<b-nav-item href="#2">Link 2</b-nav-item>
<b-nav-text>Plain text</b-nav-text>
</b-nav>
</div>
ナビにインラインフォームを配置するには、<b-nav-form>
子コンポーネントを使用します
<div>
<b-nav pills>
<b-nav-item href="#1" active>Link 1</b-nav-item>
<b-nav-item href="#2">Link 2</b-nav-item>
<b-nav-form @submit.stop.prevent="alert('Form Submitted')">
<b-form-input aria-label="Input" class="mr-1"></b-form-input>
<b-button type="submit">Ok</b-button>
</b-nav-form>
</b-nav>
</div>
フォームコントロールの配置に関する詳細については、<b-form>
インラインドキュメントを参照してください。
タブ付きローカルコンテンツのサポート
(ナビゲーションには適さない)ローカルコンテンツのタブ付きペインを作成するには、<b-tabs>
コンポーネントを参照してください。
カードの統合
<b-card>
ヘッダーで<b-nav>
を使用するには、<b-nav>
でcard-header
プロパティを有効にし、pills
またはtabs
プロパティのいずれかを設定します
タブスタイル
<div>
<b-card title="Card Title" no-body>
<b-card-header header-tag="nav">
<b-nav card-header tabs>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Inactive</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</b-card-header>
<b-card-body class="text-center">
<b-card-text>
With supporting text below as a natural lead-in to additional content.
</b-card-text>
<b-button variant="primary">Go somewhere</b-button>
</b-card-body>
</b-card>
</div>
ピルスタイル
<div>
<b-card title="Card Title" no-body>
<b-card-header header-tag="nav">
<b-nav card-header pills>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Inactive</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</b-card-header>
<b-card-body class="text-center">
<b-card-text>
With supporting text below as a natural lead-in to additional content.
</b-card-text>
<b-button variant="primary">Go somewhere</b-button>
</b-card-body>
</b-card>
</div>
プレーンスタイル
card-header
プロパティは、tabs
またはpills
スタイルを適用する場合にのみ必要です。Bootstrap v4 SCSSには、active
状態のプレーンスタイルナビ項目用の特別なスタイルがないことに注意してください。
<div>
<b-card title="Card Title" no-body>
<b-card-header header-tag="nav">
<b-nav>
<b-nav-item active>Active</b-nav-item>
<b-nav-item>Inactive</b-nav-item>
<b-nav-item disabled>Disabled</b-nav-item>
</b-nav>
</b-card-header>
<b-card-body class="text-center">
<b-card-text>
With supporting text below as a natural lead-in to additional content.
</b-card-text>
<b-button variant="primary">Go somewhere</b-button>
</b-card-body>
</b-card>
</div>
card-header
プロパティは、<b-nav>
がvertical
モードの場合、スタイリング効果はありません。
Vue Routerでの使用
カード<b-nav>
に<router-view>
または<nuxt-child>
コンポーネントを介してvueルーターのネストされたルートを制御させ、ルートURLで変更されるタブ付きコンテンツを作成します
// On page with route `/some/route`
<div>
<b-card title="Card Title" no-body>
<b-card-header header-tag="nav">
<b-nav card-header tabs>
<b-nav-item to="/some/route/" exact exact-active-class="active">Active</b-nav-item>
<b-nav-item to="/some/route/foo" exact exact-active-class="active">Foo</b-nav-item>
<b-nav-item to="/some/route/bar" exact exact-active-class="active">Bar</b-nav-item>
</b-nav>
</b-card-header>
<b-card-body>
<router-view></router-view>
</b-card-body>
</b-card>
</div>
注意:Vue Routerはハッシュ(#
)を使用したアクティブなルートの定義をサポートしていません。そのため、「タブ」コンテンツを子ルートとして定義する必要があります。
上記のルーター構成例
const routes = [
{
path: '/some/route',
component: SomeRouteComponent,
children: [
{ path: '', component: DefaultTabComponent, name: 'some-route' },
{ path: 'foo', component: FooTabComponent },
{ path: 'bar', component: BarTabComponent }
]
}
]
パスベースのルートの代わりに、Vue Routerの名前付きルートおよび/またはルートパラメーターを使用することもできます。
詳細については、以下を参照してください。
アクセシビリティ
<b-nav>
を使用してナビゲーションバーを提供する場合は、<b-nav>
の最も論理的な親コンテナーにrole="navigation"
を追加するか、<b-nav>
の周りに<nav>
要素をラップしてください。支援技術によって実際のリストとしてアナウンスされるのを防ぐため、<b-nav>
自体にロールを追加しないでください。
<b-nav>
で<b-nav-item-dropdown>
を使用する場合は、適切なaria-*
属性が自動的に生成されるように、<b-nav-item-dropdown>
に一意のid
プロパティ値を必ず割り当ててください。
タブ付きインターフェイスのアクセシビリティ
ナビゲーションバーは、視覚的にタブとしてスタイルされている場合でも、role="tablist"
、role="tab"
、またはrole="tabpanel"
属性を与えるべきではありません。これらは、タブ付きインターフェース(URLや$route
を変更しないもの)にのみ適切であり、WAI ARIA オーサリングプラクティスで説明されています。WAI ARIA に準拠した動的なタブ付きインターフェースについては、<b-tabs>
を参照してください。
タブ付きインターフェースでは、ドロップダウンメニューの使用を避けるべきです。これはユーザビリティとアクセシビリティの両方の問題を引き起こすためです。
- ユーザビリティの観点からは、現在表示されているタブのトリガー要素がすぐには見えない(閉じたドロップダウンメニュー内にあるため)という事実が混乱を招く可能性があります。
- アクセシビリティの観点からは、この種の構造を標準的な WAI ARIA パターンにマッピングする適切な方法が現在ないため、支援技術のユーザーにとって理解しやすくすることが困難です。
関連情報
<b-tabs>
を使用すると、ドロップダウンメニュー経由でもローカルコンテンツのタブ付きペインを作成できます。 <b-navbar>
は、ブランディング、ナビゲーション、その他の要素を簡潔なヘッダーに配置するためのラッパーです。 <b-nav-item-dropdown>
内に配置できるサブコンポーネントについては、<b-dropdown>
を参照してください。 <b-nav-item>
で利用可能なルーターリンク固有のプロパティに関する情報については、ルーターリンクのサポートリファレンスを参照してください。