Bootstrap Vue Offcanvas Component
Bootstrap Vue Offcanvas component allows build hidden sidebars into your project for navigation, shopping carts.
Examples
Offcanvas components
Below is an offcanvas example that is shown by default (via :visible="true"
). Offcanvas includes support for a header with a close button and an optional body class for some initial padding
. We suggest that you include offcanvas headers with dismiss actions whenever possible, or provide an explicit dismiss action.
Offcanvas
<COffcanvas :backdrop="false" placement="start" :visible="true">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" />
</COffcanvasHeader>
<COffcanvasBody>
Content for the offcanvas goes here. You can place just about any Bootstrap component or
custom elements here.
</COffcanvasBody>
</COffcanvas>
2
3
4
5
6
7
8
9
10
Live demo
Use the buttons below to show and hide an offcanvas component.
:visible="false"
hides content (default)visible
or:visible="true"
shows content
Offcanvas
<template>
<CButton color="primary" @click="() => { visible = !visible }">Toggle offcanvas</CButton>
<COffcanvas placement="start" :visible="visible" @hide="() => { visible = !visible }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visible = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
Content for the offcanvas goes here. You can place just about any Bootstrap component or
custom elements here.
</COffcanvasBody>
</COffcanvas>
</template>
<script>
export default {
data() {
return {
visible: false,
}
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Placement
There's no default placement for offcanvas components, so you must add one of the modifier classes below;
placement="start"
places offcanvas on the left of the viewport (shown above)placement="end"
places offcanvas on the right of the viewportplacement="top"
places offcanvas on the top of the viewportplacement="bottom"
places offcanvas on the bottom of the viewport
Try the top, right, and bottom examples out below.
Offcanvas
<template>
<CButton color="primary" @click="() => { visibleTop = !visibleTop }">Toggle top offcanvas</CButton>
<COffcanvas placement="top" :visible="visibleTop" @hide="() => { visibleTop = !visibleTop }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visibleTop = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
Content for the offcanvas goes here. You can place just about any Bootstrap component or
custom elements here.
</COffcanvasBody>
</COffcanvas>
</template>
<script>
export default {
data() {
return {
visibleTop: false,
}
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Offcanvas
<template>
<CButton color="primary" @click="() => { visibleEnd = !visibleEnd }">Toggle right offcanvas</CButton>
<COffcanvas placement="end" :visible="visibleEnd" @hide="() => { visibleEnd = !visibleEnd }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visibleEnd = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
Content for the offcanvas goes here. You can place just about any Bootstrap component or
custom elements here.
</COffcanvasBody>
</COffcanvas>
</template>
<script>
export default {
data() {
return {
visibleEnd: false,
}
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Offcanvas
<template>
<CButton color="primary" @click="() => { visibleBottom = !visibleBottom }">Toggle bottom offcanvas</CButton>
<COffcanvas placement="bottom" :visible="visibleBottom" @hide="() => { visibleBottom = !visibleBottom }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visibleBottom = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
Content for the offcanvas goes here. You can place just about any Bootstrap component or
custom elements here.
</COffcanvasBody>
</COffcanvas>
</template>
<script>
export default {
data() {
return {
visibleBottom: false,
}
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Backdrop
Scrolling the <body>
element is disabled when an offcanvas and its backdrop are visible. Use the scroll
property to toggle <body>
scrolling and backdrop
to toggle the backdrop.
Offcanvas
Try scrolling the rest of the page to see this option in action.
Offcanvas
.....
Offcanvas
Try scrolling the rest of the page to see this option in action.
<template>
<CButton color="primary" @click="() => { visibleScrolling = !visibleScrolling }">Enable body scrolling</CButton>
<CButton color="primary" @click="() => { visibleWithBackdrop = !visibleWithBackdrop }">Enable backdrop (default)</CButton>
<CButton color="primary" @click="() => { visibleWithBothOptions = !visibleWithBothOptions }">Enable both scrolling & backdrop</CButton>
<COffcanvas :backdrop="false" placement="start" scroll :visible="visibleScrolling" @hide="() => { visibleScrolling = !visibleScrolling }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visibleScrolling = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
<p>Try scrolling the rest of the page to see this option in action.</p>
</COffcanvasBody>
</COffcanvas>
<COffcanvas placement="start" :visible="visibleWithBackdrop" @hide="() => { visibleWithBackdrop = !visibleWithBackdrop }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visibleWithBackdrop = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
<p>.....</p>
</COffcanvasBody>
</COffcanvas>
<COffcanvas placement="start" scroll :visible="visibleWithBothOptions" @hide="() => { visibleWithBothOptions = !visibleWithBothOptions }">
<COffcanvasHeader>
<COffcanvasTitle>Offcanvas</COffcanvasTitle>
<CCloseButton class="text-reset" @click="() => { visibleWithBothOptions = false }"/>
</COffcanvasHeader>
<COffcanvasBody>
<p>Try scrolling the rest of the page to see this option in action.</p>
</COffcanvasBody>
</COffcanvas>
</template>
<script>
export default {
data() {
return {
visibleScrolling: false,
visibleWithBackdrop: false,
visibleWithBothOptions: false,
}
}
}
</script>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Accessibility
Since the offcanvas panel is conceptually a modal dialog, be sure to add aria-labelledby="..."
—referencing the offcanvas title—to <COffcanvas>
. Note that you don’t need to add role="dialog"
since we already add it automatically.
API
COffcanvas
import { COffcanvas } from '@coreui/bootstrap-vue'
// or
import COffcanvas from '@coreui/bootstrap-vue/src/components/offcanvas/COffcanvas'
2
3
Props
Prop name | Description | Type | Values | Default |
---|---|---|---|---|
backdrop | Apply a backdrop on body while offcanvas is open. | boolean | - | true |
keyboard | Closes the offcanvas when escape key is pressed. | boolean | - | true |
placement | Components placement, there’s no default placement. | string | 'start' , 'end' , 'top' , 'bottom' | - |
scroll | Allow body scrolling while offcanvas is open | boolean | - | false |
visible | Toggle the visibility of offcanvas component. | boolean | - |
Events
Event name | Description | Properties |
---|---|---|
hide | Callback fired when the component requests to be hidden. | |
show | Callback fired when the component requests to be shown. |
COffcanvasTitle
import { COffcanvasTitle } from '@coreui/bootstrap-vue'
// or
import COffcanvasTitle from '@coreui/bootstrap-vue/src/components/offcanvas/COffcanvasTitle'
2
3
Props
Prop name | Description | Type | Values | Default |
---|---|---|---|---|
component | Component used for the root node. Either a string to use a HTML element or a component. | string | - | 'h5' |