An offcanvas component lets you show hidden content that slides in from the side of the screen. It helps keep your page clean and lets users focus on main content.
Offcanvas component in Bootsrap
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample"> Toggle Offcanvas </button> <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas Title</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> Content goes here. </div> </div>
The data-bs-toggle="offcanvas" attribute on the button triggers the offcanvas.
The offcanvas-start class makes it slide in from the left. You can use offcanvas-end, offcanvas-top, or offcanvas-bottom for other directions.
<button class="btn btn-secondary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight"> Open Right Offcanvas </button> <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasRightLabel">Right Side Panel</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> This panel slides in from the right. </div> </div>
<button class="btn btn-success" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasBottom" aria-controls="offcanvasBottom"> Open Bottom Offcanvas </button> <div class="offcanvas offcanvas-bottom" tabindex="-1" id="offcanvasBottom" aria-labelledby="offcanvasBottomLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasBottomLabel">Bottom Panel</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> This panel slides up from the bottom. </div> </div>
This is a simple webpage with a button that opens a menu sliding in from the left. The menu contains links. The offcanvas can be closed by clicking the close button or outside the panel.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Bootstrap Offcanvas Example</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" /> </head> <body> <main class="container py-4"> <h1>Offcanvas Component Demo</h1> <button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample"> Show Menu </button> <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasExampleLabel">Menu</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> <ul class="list-unstyled"> <li><a href="#" class="text-decoration-none">Home</a></li> <li><a href="#" class="text-decoration-none">About</a></li> <li><a href="#" class="text-decoration-none">Services</a></li> <li><a href="#" class="text-decoration-none">Contact</a></li> </ul> </div> </div> </main> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </body> </html>
Always include aria-controls and aria-labelledby for accessibility.
Use Bootstrap's JavaScript bundle to enable the offcanvas functionality.
Offcanvas works well on mobile and desktop for hiding extra content.
Offcanvas lets you hide content off-screen and slide it in when needed.
Use data attributes to toggle offcanvas with buttons.
It improves user experience by keeping the page clean and focused.
Practice
offcanvas component?Solution
Step 1: Understand the offcanvas component role
The offcanvas component is designed to keep content hidden off-screen initially.Step 2: Recognize its behavior on trigger
When triggered, it slides in to show the hidden content, improving page focus.Final Answer:
To hide content off-screen and slide it in when triggered -> Option AQuick Check:
Offcanvas = hidden sliding content [OK]
- Confusing offcanvas with modal popups
- Thinking it creates fixed headers or footers
- Assuming it always shows content without sliding
Solution
Step 1: Identify the correct data attribute for offcanvas toggle
Bootstrap usesdata-bs-toggle="offcanvas"to toggle offcanvas components.Step 2: Confirm the target attribute
Thedata-bs-targetattribute points to the offcanvas element's ID, e.g.,#myOffcanvas.Final Answer:
<button data-bs-toggle="offcanvas" data-bs-target="#myOffcanvas">Toggle</button> -> Option CQuick Check:
Toggle offcanvas = data-bs-toggle="offcanvas" [OK]
- Using data-toggle instead of data-bs-toggle
- Using modal or dropdown toggle attributes
- Missing the correct data-bs-target selector
<button class="btn btn-primary" data-bs-toggle="offcanvas" data-bs-target="#demoOffcanvas">Open</button>
<div class="offcanvas offcanvas-start" tabindex="-1" id="demoOffcanvas">
<div class="offcanvas-header">
<h5>Menu</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">Content here</div>
</div>Solution
Step 1: Analyze the button attributes
The button usesdata-bs-toggle="offcanvas"and targets#demoOffcanvas, so it triggers the offcanvas component.Step 2: Understand the offcanvas element classes
The offcanvas has classoffcanvas-start, meaning it slides in from the left side.Final Answer:
A sidebar slides in from the left showing 'Menu' and 'Content here' -> Option DQuick Check:
offcanvas-start = slide from left [OK]
- Confusing offcanvas with modal popups
- Forgetting to include Bootstrap JS for functionality
- Assuming offcanvas appears as dropdown
<button class="btn btn-secondary" data-bs-toggle="offcanvas" data-target="#sidePanel">Show</button>
<div class="offcanvas offcanvas-end" tabindex="-1" id="sidePanel">
<div class="offcanvas-header">
<h5>Side Panel</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">Details here</div>
</div>Solution
Step 1: Check button data attributes for toggling offcanvas
Bootstrap 5 requiresdata-bs-targetfor toggling, notdata-target.Step 2: Verify other attributes and classes
The offcanvas element and button classes are correct; no need forshowclass initially.Final Answer:
The button uses incorrect attribute data-target instead of data-bs-target -> Option BQuick Check:
Use data-bs-target, not data-target [OK]
- Using old Bootstrap 4 attribute names
- Adding show class manually on offcanvas
- Assuming button needs type="submit"
Solution
Step 1: Choose the correct offcanvas position class
To slide in from the bottom, use theoffcanvas-bottomclass.Step 2: Ensure accessibility and closing behavior
Settingtabindex="-1"allows keyboard focus and enables closing with Escape key and outside clicks by default.Final Answer:
Use offcanvas-bottom class on the offcanvas and ensure tabindex="-1" is set -> Option AQuick Check:
Bottom offcanvas = offcanvas-bottom + tabindex="-1" [OK]
- Using offcanvas-top instead of offcanvas-bottom
- Disabling backdrop with data-bs-backdrop="false"
- Omitting tabindex attribute causing keyboard issues
Ready to prove it?
Pass the test and this pattern moves unknown
