Offcanvas
Build hidden sidebars into your project for navigation, shopping carts, and more.
Backdrop
Scrolling the <body> element is disabled when an offcanvas and its backdrop are visible. Use the scroll prop to toggle <body> scrolling and the backdrop prop to toggle the backdrop.
'use client';
import React, { useState } from 'react';
import Button from 'react-bootstrap/Button';
import Offcanvas from 'react-bootstrap/Offcanvas';
const options = [
{
name: 'Enable backdrop (default)',
scroll: false,
backdrop: true,
},
{
name: 'Disable backdrop',
scroll: false,
backdrop: false,
},
{
name: 'Enable body scrolling',
scroll: true,
backdrop: false,
},
{
name: 'Enable both scrolling & backdrop',
scroll: true,
backdrop: true,
},
];
const OffCanvasItem = ({ name, ...props }) => {
const [show, setShow] = useState(false);
const handleClose = () => setShow(false);
const toggleShow = () => setShow(prevShow => !prevShow);
return (
<>
<Button variant="primary" onClick={toggleShow} className="me-2">
{name}
</Button>
<Offcanvas show={show} onHide={handleClose} {...props}>
<Offcanvas.Header closeButton>
<Offcanvas.Title>Offcanvas</Offcanvas.Title>
</Offcanvas.Header>
<Offcanvas.Body>
Some text as placeholder. In real life you can have the elements you
have chosen. Like, text, images, lists, etc.
</Offcanvas.Body>
</Offcanvas>
</>
);
};
const OffCanvasExample = () => {
return (
<>
{options.map((props, idx) => (
<OffCanvasItem key={idx} {...props} />
))}
</>
);
};
export default OffCanvasExample;
Placement
Offcanvas supports a few different placements: start, end, top, bottom
'use client';
import React, { useState } from 'react';
import Button from 'react-bootstrap/Button';
import Offcanvas from 'react-bootstrap/Offcanvas';
function OffCanvasItem({ name, ...props }) {
const [show, setShow] = useState(false);
const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
return (
<>
<Button variant="primary" onClick={handleShow} className="me-2">
Toggle {name} offcanvas
</Button>
<Offcanvas show={show} onHide={handleClose} {...props}>
<Offcanvas.Header closeButton>
<Offcanvas.Title>Offcanvas</Offcanvas.Title>
</Offcanvas.Header>
<Offcanvas.Body>
Some text as placeholder. In real life you can have the elements you
have chosen. Like, text, images, lists, etc.
</Offcanvas.Body>
</Offcanvas>
</>
);
}
function OffCanvasPlacementExample() {
const placements = ['start', 'end', 'top', 'bottom'];
return (
<>
{placements.map((placement, idx) => (
<OffCanvasItem key={idx} placement={placement} name={placement} />
))}
</>
);
}
export default OffCanvasPlacementExample;