Bootstrap navs
Bootstrap Navs component allows to create simple navigation. Learn how to use Bootstrap nav to quickly and easily create elegant and flexible navs.
Base nav
The base .nav
component is made with flexbox and implements a strong grounds for building all kinds of navigation components. It incorporates some style overrides, some link padding for larger hit areas, and basic disabled styling.
The base .nav
component does not incorporate any .active
state. The examples below include the class, principally to demonstrate that this unique class does not trigger any individual styling.
<ul class="nav">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
Classes are used throughout, so your markup can be super flexible. Add <ul>
s like above, or roll your own with say a <nav>
element. Because the .nav
uses display: flex
, the nav links function the same as nav items would, but without the additional markup.
<nav class="nav">
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#">Disabled</a>
</nav>
Available styles
Adjust the style of .nav
s component with Bootstrap’s css classes and utilities. Combine and match as required, or build your own.
Alignment
Horizontal
Modify the horizontal alignment of your nav using flexbox utilities. By default, navs are left-aligned, but you can quickly change them to right or center aligned.
Centered with .justify-content-center
:
<ul class="nav justify-content-center">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
Right-aligned with .justify-content-end
:
<ul class="nav justify-content-end">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
Vertical
Stack your navigation by adjusting the flex item direction with the .flex-column
utility. Want to stack them on some viewports but not others? Use the responsive versions (e.g., .flex-sm-column
).
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
As always, vertical navigation is possible without <ul>
s, too.
<nav class="nav flex-column">
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#">Disabled</a>
</nav>
Tabs
Gets the primary nav from above and appends the .nav-tabs
class to create a tabbed interface. Use them to build tabbable areas with our tab JavaScript plugin.
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
Pills
Take that same HTML, but use .nav-pills
instead:
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
Fill and justify
Force your .nav
’s contents to reach the full available width one of two modifier classes. To proportionately fill all free space with your .nav-item
s, use .nav-fill
. See that all horizontal space is filled, but not every nav item has the equal width.
<ul class="nav nav-pills nav-fill">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Longer nav link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
When using a <nav>
-based navigation, be certain to add .nav-item
on the anchors.
<nav class="nav nav-pills nav-fill">
<a class="nav-item nav-link active" href="#">Active</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link disabled" href="#">Disabled</a>
</nav>
For same width elements, use .nav-justified
. Nav links will fill all horizontal space but unlike the .nav-fill
above, each nav item will have the same width.
<nav class="nav nav-pills nav-justified">
<a class="nav-link active" href="#">Active</a>
<a class="nav-link" href="#">Longer nav link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#">Disabled</a>
</nav>
Alike to the .nav-fill
example using a <nav>
-based navigation, be certain to include .nav-item
on the anchors.
<nav class="nav nav-pills nav-justified">
<a class="nav-item nav-link active" href="#">Active</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link disabled" href="#">Disabled</a>
</nav>
Working with flex utilities
If you require responsive nav variations, you shoul consider using a range of flexbox utilities. While more verbose, those utilities offer excellent customization across responsive breakpoints. In the following example, our nav will be stacked on the lowest breakpoint, then change to a horizontal layout that fills the available width starting from the small breakpoint.
<nav class="nav nav-pills flex-column flex-sm-row">
<a class="flex-sm-fill text-sm-center nav-link active" href="#">Active</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
<a class="flex-sm-fill text-sm-center nav-link disabled" href="#">Disabled</a>
</nav>
Regarding accessibility
If you’re using navs to implement a navigation bar, be certain to add a role="navigation"
to the parent container of the <ul>
, or wrap a <nav>
element around the full navigation. Don’t attach the role to the <ul>
itself, as this would prevent it from being declared as an actual list by assistive technologies.
Using dropdowns
Add dropdown menus with some HTML and the dropdowns JavaScript plugin.
Tabs with dropdowns
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
Pills with dropdowns
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" href="#">Active</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
JavaScript behavior
Curabitur eget arcu quam. Nullam blandit justo eu commodo mollis. Quisque hendrerit orci vitae ante faucibus molestie. Praesent maximus et dolor eu condimentum. Praesent egestas est eu sem scelerisque tempor. Curabitur posuere metus vitae risus ultricies fermentum. Nulla fermentum, elit ac maximus laoreet, arcu massa bibendum ipsum, ac feugiat tellus orci id erat. Pellentesque elit felis, vehicula et egestas nec, pulvinar quis magna. Morbi sit amet malesuada erat, a placerat ex.
Praesent imperdiet, nulla sit amet vehicula volutpat, dolor velit aliquet mauris, a placerat orci urna vitae tellus. In hac habitasse platea dictumst. Donec ut elit eu urna tristique pellentesque. Maecenas dignissim iaculis scelerisque. Aenean ligula neque, efficitur sed elementum id, posuere eget lectus. Sed tristique sollicitudin arcu at interdum. Donec eget gravida nisi, id mollis nibh. Aliquam id accumsan quam. Praesent at suscipit magna. Sed porttitor tincidunt congue. Fusce dignissim dapibus consectetur. Ut bibendum finibus sem eu sodales. Nullam porta nisi lacus, at mollis arcu malesuada at.
Suspendisse finibus ullamcorper metus, vel bibendum libero rhoncus a. Sed quam purus, imperdiet dapibus eleifend et, vulputate ac augue. Aenean eu faucibus urna, eget auctor orci. Curabitur mollis suscipit quam. Mauris sit amet velit eu mi vulputate eleifend. Ut vitae tortor scelerisque, fermentum dolor a, efficitur nunc. Aliquam aliquam molestie justo lobortis congue.
To help fit your needs, this works with <ul>
-based markup, as shown above, or with any arbitrary “roll your own” markup. Note that if you’re using <nav>
, you shouldn’t add role="tablist"
directly to it, as this would override the element’s natural role as a navigation landmark. Instead, switch to an alternative element (in the example below, a simple <div>
) and wrap the <nav>
around it.
The tabs plugin also works with pills.
In rutrum ante tincidunt, venenatis lorem eget, tristique eros. Phasellus lacinia, lorem at elementum pulvinar, urna justo commodo ipsum, quis lacinia felis lectus at ligula. Phasellus volutpat tortor in dolor convallis, sit amet dignissim leo feugiat. Curabitur suscipit sit amet felis eu gravida. Aliquam eget ullamcorper erat, in condimentum dolor. Suspendisse at sem sed ligula tincidunt mattis. Aenean mattis, mauris non suscipit commodo, orci nulla fermentum nisi, id bibendum orci magna ac metus. Morbi eget justo vitae arcu maximus fringilla sit amet eget dui. Nulla pharetra dolor id lorem egestas, et venenatis diam maximus. Nullam facilisis ac magna finibus dictum. Sed varius sit amet diam nec ultrices.
Suspendisse finibus ullamcorper metus, vel bibendum libero rhoncus a. Sed quam purus, imperdiet dapibus eleifend et, vulputate ac augue. Aenean eu faucibus urna, eget auctor orci. Curabitur mollis suscipit quam. Mauris sit amet velit eu mi vulputate eleifend. Ut vitae tortor scelerisque, fermentum dolor a, efficitur nunc. Aliquam aliquam molestie justo lobortis congue.
Praesent imperdiet, nulla sit amet vehicula volutpat, dolor velit aliquet mauris, a placerat orci urna vitae tellus. In hac habitasse platea dictumst. Donec ut elit eu urna tristique pellentesque. Maecenas dignissim iaculis scelerisque. Aenean ligula neque, efficitur sed elementum id, posuere eget lectus. Sed tristique sollicitudin arcu at interdum. Donec eget gravida nisi, id mollis nibh. Aliquam id accumsan quam. Praesent at suscipit magna. Sed porttitor tincidunt congue. Fusce dignissim dapibus consectetur. Ut bibendum finibus sem eu sodales. Nullam porta nisi lacus, at mollis arcu malesuada at.
And with vertical pills.
Praesent imperdiet, nulla sit amet vehicula volutpat, dolor velit aliquet mauris, a placerat orci urna vitae tellus. In hac habitasse platea dictumst. Donec ut elit eu urna tristique pellentesque. Maecenas dignissim iaculis scelerisque. Aenean ligula neque, efficitur sed elementum id, posuere eget lectus. Sed tristique sollicitudin arcu at interdum. Donec eget gravida nisi, id mollis nibh. Aliquam id accumsan quam. Praesent at suscipit magna. Sed porttitor tincidunt congue. Fusce dignissim dapibus consectetur. Ut bibendum finibus sem eu sodales. Nullam porta nisi lacus, at mollis arcu malesuada at.
Suspendisse finibus ullamcorper metus, vel bibendum libero rhoncus a. Sed quam purus, imperdiet dapibus eleifend et, vulputate ac augue. Aenean eu faucibus urna, eget auctor orci. Curabitur mollis suscipit quam. Mauris sit amet velit eu mi vulputate eleifend. Ut vitae tortor scelerisque, fermentum dolor a, efficitur nunc. Aliquam aliquam molestie justo lobortis congue.
Fusce consequat, purus at luctus pulvinar, sapien libero scelerisque neque, sed bibendum ex dui at felis. Integer sed imperdiet nibh, non eleifend lectus. Sed interdum, tortor et rutrum elementum, nisi risus venenatis risus, eget dictum ligula lacus et magna. Nullam pharetra enim quis velit pellentesque euismod. Integer nec neque massa. Maecenas sollicitudin id justo id varius. Maecenas vel nisl eget velit aliquam facilisis. Aenean luctus placerat ornare. Cras congue dolor et enim molestie rhoncus. Proin volutpat, augue eget luctus scelerisque, orci nisi mollis eros, ut volutpat ipsum justo ac tortor.
In rutrum ante tincidunt, venenatis lorem eget, tristique eros. Phasellus lacinia, lorem at elementum pulvinar, urna justo commodo ipsum, quis lacinia felis lectus at ligula. Phasellus volutpat tortor in dolor convallis, sit amet dignissim leo feugiat. Curabitur suscipit sit amet felis eu gravida. Aliquam eget ullamcorper erat, in condimentum dolor. Suspendisse at sem sed ligula tincidunt mattis. Aenean mattis, mauris non suscipit commodo, orci nulla fermentum nisi, id bibendum orci magna ac metus.
Using data attributes
You can activate a tab or pill navigation without writing any JavaScript by simply specifying data-toggle="tab"
or data-toggle="pill"
on an element. Use these data attributes on .nav-tabs
or .nav-pills
.
Via JavaScript
Enable tabbable tabs via JavaScript (each tab needs to be activated individually):
You can activate individual tabs in several ways:
Fade effect
To make tabs fade in, add .fade
to each .tab-pane
. The first tab pane must also have .show
to make the initial content visible.
Methods
Asynchronous methods and transitions
All API methods are asynchronous and start a transition. They return to the caller as soon as the transition is started but before it ends. In addition, a method call on a transitioning component will be ignored.
$().tab
Activates a tab element and content container. The tab should have either a data-target
or an href
targeting a container node in the DOM.
.tab(‘show’)
Selects the given tab and shows its associated pane. Any other tab that was previously selected becomes unselected and its associated pane is hidden. Returns to the caller before the tab pane has been shown (i.e., before the shown.bs.tab
event occurs).
.tab(‘dispose’)
Destroys an element’s tab.
Events
When showing a new tab, the events fire in the following order:
hide.bs.tab
(on the current active tab)show.bs.tab
(on the to-be-shown tab)hidden.bs.tab
(on the previous active tab, the same one as for thehide.bs.tab
event)shown.bs.tab
(on the newly-active just-shown tab, the same one as for theshow.bs.tab
event)
If no tab was already active, then the hide.bs.tab
and hidden.bs.tab
events will not be fired.
Event Type | Description |
---|---|
show.bs.tab | This event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively. |
shown.bs.tab | This event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively. |
hide.bs.tab | This event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use event.target and event.relatedTarget to target the current active tab and the new soon-to-be-active tab, respectively. |
hidden.bs.tab | This event fires after a new tab is shown (and thus the previous active tab is hidden). Use event.target and event.relatedTarget to target the previous active tab and the new active tab, respectively. |