How it works
Offcanvas は、 切り替え可能で、ビューポートの左端、右端、または下端から表示できるサイドバーコンポーネントです。
表示されている場合、offcanvas にはデフォルトの背景が含まれており、クリックすると offcanvas を隠すことができます。
Modal と同様に、一度に表示できるオフキャンバスは1つだけです。
Heads up! CSS によるアニメーションの処理方法を考慮すると、Offcanvas
要素に対して margin
や translate
を使用することはできません。
代わりに、このクラスを独立したラッピング要素として使用してください。
Examples
Offcanvas components
以下は, デフォルトで表示される (show
on Offcanvas
による) offcanvas の例です。
Offcanvas には、閉じるボタン付きのヘッダと、初期の padding
のためのオプションのボディクラスがサポートされています。
可能な限り, offcanvas のヘッダに dismiss アクションを含めるか、明示的な dismiss アクションを提供することをお勧めします。
Offcanvas
<template>
<Offcanvas
placement="start"
show
:backdrop="false"
>
<OffcanvasHeader>
<OffcanvasTitle>Offcanvas</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
Content for the offcanvas goes here. You can place just about any
Bootstrap component or custom elements here.
</OffcanvasBody>
</Offcanvas>
</template>
Live demo
Offcanvas
コンポーネントの表示・非表示を切り替えるには、href
またはtarget
属性と、toggle="offcanvas"
を指定したボタンを使用できます。
Offcanvas
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasExample"
>
Launch demo modal
</b-button>
<Offcanvas
id="offcanvasExample"
placement="start"
>
<OffcanvasHeader>
<OffcanvasTitle>Offcanvas</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<div>
Some text as placeholder. In real life you can have the elements you
have chosen. Like, text, images, lists, etc.
</div>
<Dropdown margin="t-3">
<DropdownToggle color="secondary">
Droppdown button
</DropdownToggle>
<DropdownMenu>
<DropdownItem>Action</DropdownItem>
<DropdownItem>Another action</DropdownItem>
<DropdownItem>Something else here</DropdownItem>
</DropdownMenu>
</Dropdown>
</OffcanvasBody>
</Offcanvas>
</template>
Body scrolling
Colored with scrolling
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasBodyScrolling"
>
Launch demo modal
</b-button>
<Offcanvas
id="offcanvasBodyScrolling"
placement="start"
scroll
:backdrop="false"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<div>
Some text as placeholder. In real life you can have the elements you
have chosen. Like, text, images, lists, etc.
</div>
<Dropdown margin="t-3">
<DropdownToggle color="secondary">
Droppdown button
</DropdownToggle>
<DropdownMenu>
<DropdownItem>Action</DropdownItem>
<DropdownItem>Another action</DropdownItem>
<DropdownItem>Something else here</DropdownItem>
</DropdownMenu>
</Dropdown>
</OffcanvasBody>
</Offcanvas>
</template>
Body scrolling and backdrop
Colored with scrolling
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasBodyScrollingBackdrop"
>
Launch demo modal
</b-button>
<Offcanvas
id="offcanvasBodyScrollingBackdrop"
placement="start"
scroll
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<div>
Some text as placeholder. In real life you can have the elements you
have chosen. Like, text, images, lists, etc.
</div>
<Dropdown margin="t-3">
<DropdownToggle color="secondary">
Droppdown button
</DropdownToggle>
<DropdownMenu>
<DropdownItem>Action</DropdownItem>
<DropdownItem>Another action</DropdownItem>
<DropdownItem>Something else here</DropdownItem>
</DropdownMenu>
</Dropdown>
</OffcanvasBody>
</Offcanvas>
</template>
Static backdrop
Colored with scrolling
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasStaticBackdrop"
>
Launch demo modal
</b-button>
<Offcanvas
id="offcanvasStaticBackdrop"
placement="start"
backdrop="static"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<div>
Some text as placeholder. In real life you can have the elements you
have chosen. Like, text, images, lists, etc.
</div>
<Dropdown margin="t-3">
<DropdownToggle color="secondary">
Droppdown button
</DropdownToggle>
<DropdownMenu>
<DropdownItem>Action</DropdownItem>
<DropdownItem>Another action</DropdownItem>
<DropdownItem>Something else here</DropdownItem>
</DropdownMenu>
</Dropdown>
</OffcanvasBody>
</Offcanvas>
</template>
Responsive
Responsive offcanvas
This is content within an .offcanvas-lg
.
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasResponsive"
display="lg-none"
>
Toggle offcanvas
</b-button>
<Alert
theme="info"
display="none lg-block"
>
Resize your browser to show the responsive offcanvas toggle.
</Alert>
<Offcanvas
id="offcanvasResponsive"
placement="end"
type="lg"
>
<OffcanvasHeader>
<OffcanvasTitle>Responsive offcanvas</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<b-p margin="b-0">
This is content within an <code>.offcanvas-lg</code>.
</b-p>
</OffcanvasBody>
</Offcanvas>
</template>
Placement
offcanvasコンポーネントにはデフォルトの配置がないため、以下のモディファイアクラスのいずれかを追加する必要があります。
placement="start"
ビューポートの左側にoffcanvasを配置しますplacement="end"
ビューポートの右側にoffcanvasを配置しますplacement="top"
ビューポートの上部にoffcanvasを配置しますplacement="bottom"
ビューポートの下部にoffcanvasを配置します
以下の上部、右側、下部の例を試してください。
Colored with scrolling
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasTop"
>
Launch demo modal
</b-button>
<Offcanvas
id="offcanvasTop"
placement="top"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>...</OffcanvasBody>
</Offcanvas>
</template>
Colored with scrolling
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasRight"
>
Toggle right offcanvas
</b-button>
<Offcanvas
id="offcanvasRight"
placement="end"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>...</OffcanvasBody>
</Offcanvas>
</template>
Colored with scrolling
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasBottom"
>
Toggle bottom offcanvas
</b-button>
<Offcanvas
id="offcanvasBottom"
placement="bottom"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody small>
...
</OffcanvasBody>
</Offcanvas>
</template>
Backdrop
offcanvasとその背景が表示されているときは、<body>
要素のスクロールは無効になります。scroll
属性で<body>
要素のスクロールを、backdrop
属性で背景のスクロールを切り替えます。
Colored with scrolling
Try scrolling the rest of the page to see this option in action.
Colored with scrolling
Try scrolling the rest of the page to see this option in action.
Colored with scrolling
Try scrolling the rest of the page to see this option in action.
<template>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasScrolling"
>
Enable body scrolling
</b-button>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasWithBackdrop"
>
Enable backdrop (default)
</b-button>
<b-button
color="primary"
toggle="offcanvas"
target="#offcanvasScrolling"
>
Enable both scrolling & backdrop
</b-button>
<Offcanvas
id="offcanvasScrolling"
placement="start"
scroll
backdrop="false"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<p>Try scrolling the rest of the page to see this option in action.</p>
</OffcanvasBody>
</Offcanvas>
<Offcanvas
id="offcanvasWithBackdrop"
placement="start"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<p>Try scrolling the rest of the page to see this option in action.</p>
</OffcanvasBody>
</Offcanvas>
<Offcanvas
id="offcanvasWithBothOptions"
placement="start"
scroll
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<p>Try scrolling the rest of the page to see this option in action.</p>
</OffcanvasBody>
</Offcanvas>
</template>
Methods
Demo
Colored with scrolling
Try scrolling the rest of the page to see this option in action.
<template>
<b-button
type="button"
color="primary"
@click="toggleClicked"
>
Toggle
</b-button>
<b-button
type="button"
color="primary"
@click="showClicked"
>
Show
</b-button>
<Offcanvas
ref="demoOffcanvas"
placement="bottom"
scroll
backdrop="false"
>
<OffcanvasHeader>
<OffcanvasTitle>Colored with scrolling</OffcanvasTitle>
<CloseButton dismiss="offcanvas" />
</OffcanvasHeader>
<OffcanvasBody>
<p>Try scrolling the rest of the page to see this option in action.</p>
<b-button
type="button"
color="primary"
@click="hideClicked"
>
Hide
</b-button>
</OffcanvasBody>
</Offcanvas>
</template>
<script setup lang="ts">
const demoOffcanvas = ref(null);
const toggleClicked = () => {
if (demoOffcanvas.value) {
demoOffcanvas.value.toggle();
}
};
const hideClicked = () => {
if (demoOffcanvas.value) {
demoOffcanvas.value.hide();
}
};
const showClicked = () => {
if (demoOffcanvas.value) {
demoOffcanvas.value.show();
}
};
</script>