<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>
組件是使用弹性盒狀模型建置而成,可作為建構各式各樣的導覽組件的穩固基礎。它包含一些樣式覆寫(用於清單),一些連結內充以加大按壓區域,以及基本的停用樣式。基礎導覽功能中不包含任何作用中狀態。
<b-nav>
支援下列子組件
<b-nav-item>
用於可作用的連結(或路由器連結) <b-nav-item-dropdown>
用於下拉選單 <b-nav-text>
用於純文字內容 <b-nav-form>
用於內嵌表單
連結外觀
支援兩種樣式變化:標籤
和功能區按鍵
,它們支援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>
仅在显示选单内容时呈现。
下拉选单位置
使用 <b-nav-item-dropdown>
的下列属性来控制其位置:right
、dropup
、dropright
、dropleft
、no-flip
和 offset
。
请参考 <b-dropdown>
定位部分,以详细了解这些属性的效果及其使用方法。
下拉选单实现说明
请注意,切换按钮实际上渲染为链接 <a>
标签,并带有 role="button"
,以用于样式定义,且通常将 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>
一般樣式
僅在套用 tabs
或 pills
樣式時才需要 card-header
屬性。請注意,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>
如果 <b-nav>
處於 vertical
模式,card-header
屬性將沒有樣式效果。
搭配 Vue Router 使用
讓您的卡片 <b-nav>
透過 <router-view>
或 <nuxt-child>
元件,控制 vue router 內嵌路由,以建立隨路由網址而變動的分頁內容
// 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 不支援定義具有雜湊 (#
) 的 active 路由,這就是您必須將「分頁」內容定義為子路由的原因。
上述範例的路由設定範例
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>
提供導覽列,請務必將 role="navigation"
加入 <b-nav>
較具邏輯的上層父容器,或在 <b-nav>
周圍加上一個 <nav>
元素。請勿將角色加入 <b-nav>
本身,因為這會使其無法被輔助技術宣告為實際清單。
使用 <b-nav-item-dropdown>
在 <b-nav>
中時,請務必為 <b-nav-item-dropdown>
指派唯一的 id
屬性值,以便可以自動產生適當的 aria-*
屬性。
選項卡介面的可及性
請注意,導覽列就算視覺上設計成選項卡,不應賦予 role="tablist"
、role="tab"
或 role="tabpanel"
屬性。這些屬性僅適用於不會變更 URL 或 $route
的 選項卡介面,如 WAI ARIA Authoring Practices 中所述。請參閱 <b-tabs>
以了解符合 WAI ARIA 規範的動態選項卡介面。
選項卡介面應避免使用下拉式選單,因為這樣會造成可用性和可及性問題
- 從可用性的角度來看,當前顯示的選項卡觸發器元素並未立即顯示出來(因為它在封閉的下拉式選單中),這可能會造成混淆。
- 從可及性的角度來看,目前沒有明智的方法可將這種類型的結構對應到標準的 WAI ARIA 樣式,這表示對於輔助科技的使用者而言,並不容易理解。
另請參閱