概述
你几乎可以在 <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>
如果内容高于可用的视口高度,则将通过 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>
变体
使用属性 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>
标准 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> 的宽度设置为 320px(在“xs”屏幕上为 100%)。只需通过 width 属性(即 '180px'、'20em' 等)提供一个值即可覆盖此默认值。最大宽度通过 CSS 设置为 100%。
填充
默认情况下,侧边栏没有填充。可以向组件应用填充实用程序类,或向侧边栏内容应用边距/填充实用程序类。
禁用幻灯片过渡
默认情况下,侧边栏在显示和隐藏时将使用滑动过渡。可以通过 no-slide 属性禁用幻灯片过渡。
注意:此组件的 BootstrapVue 定义的过渡效果取决于 prefers-reduced-motion 媒体查询。有关更多详细信息,请参阅 无障碍文档的减少运动部分。
禁用幻灯片过渡时,可选背景 的淡入淡出过渡也将被禁用。
Z 轴索引
侧边栏在 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> 提供一个 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>
你可以通过 footer-class 属性将任意类应用到页脚部分。
延迟渲染
在某些情况下,你可能不希望在侧边栏不可见时渲染内容。只需在 <b-sidebar> 上设置 lazy 属性。当 lazy 为 true 时,无论何时关闭侧边栏,都不会渲染正文和可选页脚(从 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>
请注意,当侧边栏打开时,仍然有可能滚动主体(与模态框的行为不同)。当启用背景时,焦点约束将尝试将焦点保持在侧边栏内。请注意,在极少数情况下,用户有可能将焦点移动到侧边栏外部的元素。
可见性控制
v-b-toggle 指令
使用 v-b-toggle 指令 是打开侧边栏的首选方法,因为它会自动处理在触发元素上应用 aria-controls 和 aria-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> 提供了多种辅助功能。
当侧边栏打开时,整个侧边栏将获得焦点,这对于屏幕阅读器和仅使用键盘的用户来说是理想的。当侧边栏关闭时,在侧边栏打开之前具有焦点的元素将重新获得焦点。
在某些情况下,您可能需要完全禁用强制焦点功能。您可以通过设置 prop no-enforce-focus 来执行此操作,尽管出于辅助功能原因,通常不建议这样做。
当侧边栏打开时,用户可以按 Esc 关闭侧边栏。要禁用此功能,请将 no-close-on-esc prop 设置为 true。启用背景时,您可以使用 prop no-close-on-backdrop 禁用在背景上单击关闭的功能。
当 backdrop prop 为 true 时,侧边栏将尝试在侧边栏内限制焦点,并且侧边栏将具有属性 aria-modal="true"。
当您隐藏标题或没有侧边栏标题时,将 aria-label 设置为描述侧边栏的字符串,或将 aria-labelledby 设置为包含标题的元素的 ID。当使用 lazy prop 并且 没有标题时,使用 aria-label prop 为侧边栏提供一个合适的字符串标签。
实现说明
BootstrapVue 的自定义 SCSS/CSS 对于侧边栏的正确样式和定位是必需的。
Bootstrap v4 背景('bg-*')和文本('text-*')实用程序类分别用于控制背景和字体颜色。
<b-sidebar> 的一些默认样式可以通过使用 SASS 变量进行自定义。有关其他详细信息,请参阅 主题文档。
另请参阅