Build hidden sidebars into your project for navigation, shopping carts, and more with a few classes and our JavaScript plugin.
Offcanvas on Bootstrap
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasExample" role="button" aria-controls="offcanvasExample">
Link with href
</a>
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample">
Button with data-bs-target
</button>
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
<ul class="ps-3">
<li class="">At vero eos et accusamus et iusto odio dignissimos</li>
<li class="">Et harum quidem rerum facilis</li>
<li class="">Temporibus autem quibusdam et aut officiis</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
You can trigger an offcanvas using a link with href
or a button with data-bs-target
, but both must include data-bs-toggle="offcanvas"
.
<!-- Enable body scrolling -->
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">Enable body scrolling</button>
<!-- Enable backdrop (default) -->
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasWithBackdrop" aria-controls="offcanvasWithBackdrop">Enable backdrop (default)</button>
<!-- Enable both scrolling & backdrop -->
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasWithBothOptions" aria-controls="offcanvasWithBothOptions">Enable both scrolling & backdrop</button>
<div class="offcanvas offcanvas-start" data-bs-scroll="true" data-bs-backdrop="false" tabindex="-1" id="offcanvasScrolling" aria-labelledby="offcanvasScrollingLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasScrollingLabel">Colored with scrolling</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
<ul class="ps-3">
<li class="">At vero eos et accusamus et iusto odio dignissimos</li>
<li class="">Et harum quidem rerum facilis</li>
<li class="">Temporibus autem quibusdam et aut officiis</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasWithBackdrop" aria-labelledby="offcanvasWithBackdropLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasWithBackdropLabel">Offcanvas with backdrop</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
<ul class="ps-3">
<li class="">At vero eos et accusamus et iusto odio dignissimos</li>
<li class="">Et harum quidem rerum facilis</li>
<li class="">Temporibus autem quibusdam et aut officiis</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
<div class="offcanvas offcanvas-start" data-bs-scroll="true" tabindex="-1" id="offcanvasWithBothOptions" aria-labelledby="offcanvasWithBothOptionsLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel">Backdroped with scrolling</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
<ul class="ps-3">
<li class="">At vero eos et accusamus et iusto odio dignissimos</li>
<li class="">Et harum quidem rerum facilis</li>
<li class="">Temporibus autem quibusdam et aut officiis</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
When an offcanvas and its backdrop are visible, <body>
scrolling is disabled. Use data-bs-scroll
to enable scrolling and data-bs-backdrop
to control the backdrop visibility.
<!-- Toggle Top offcanvas -->
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop" aria-controls="offcanvasTop">Toggle Top offcanvas</button>
<!-- Toggle right offcanvas -->
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Toggle right offcanvas</button>
<!-- Toggle bottom offcanvas -->
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasBottom" aria-controls="offcanvasBottom">Toggle bottom offcanvas</button>
<!-- Toggle Left offcanvas -->
<button class="btn btn-primary mt-2 mt-lg-0" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasLeft" aria-controls="offcanvasLeft">Toggle Left offcanvas</button>
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header">
<h5 id="offcanvasRightLabel">Offcanvas right</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
<div class="offcanvas offcanvas-bottom" tabindex="-1" id="offcanvasBottom" aria-labelledby="offcanvasBottomLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasBottomLabel">Offcanvas bottom</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasLeft" aria-labelledby="offcanvasLeftLabel">
<div class="offcanvas-header">
<h5 id="offcanvasLeftLabel">Offcanvas Left</h5>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
.offcanvas-start
positions the offcanvas on the left, .offcanvas-end
on the right, .offcanvas-top
displays it from the top, and .offcanvas-bottom
displays it from the bottom of the viewport.
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasDark" aria-controls="offcanvasDark">Dark offcanvas</button>
<div class="offcanvas offcanvas-start text-bg-dark" tabindex="-1" id="offcanvasDark" aria-labelledby="offcanvasDarkLabel">
<div class="offcanvas-header">
<h5 id="offcanvasDarkLabel">Dark Offcanvas</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div> <!-- end offcanvas-header-->
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text,
images, lists, etc.
</div>
<h5 class="mt-3">List</h5>
<ul class="ps-3">
<li class="">Nemo enim ipsam voluptatem quia aspernatur</li>
<li class="">Neque porro quisquam est, qui dolorem</li>
<li class="">Quis autem vel eum iure qui in ea</li>
</ul>
</div> <!-- end offcanvas-body-->
</div> <!-- end offcanvas-->
Customize the look of offcanvases using utility classes to suit different themes, such as dark navbars. Add .text-bg-dark
to .offcanvas
and .btn-close-white
to .btn-close
for dark styling.
Easily configure layout, styles, and preferences for your admin interface.