Create compact, semantic navigation surfaces with Bootstrap-native nav patterns for app shells.
Use .nav and .nav-link for links that move between pages, sections, or persistent app routes. Wrap the links in a labelled nav region, use one Bootstrap nav style for the whole set, and keep labels short enough to scan in sidebars, tabs, or compact header rows.
.nav
.nav-link
nav
Mark the current destination with the active state and the appropriate current-page signal, and keep disabled items out of required paths. Icons, badges, and counters should clarify the destination or status; they should not replace the visible link label.
Choose the pattern from the information architecture: horizontal pills for peer routes, vertical lists for sidebars, and underline nav for lightweight filters. If clicking a control changes a panel without navigating to a route, use Tabs rather than Navigation.
Use a compact pill row for workspace routes where current context should be clearly emphasized.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16<nav aria-label="Workspace sections"> <ul class="nav nav-pills"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span> Dashboard </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Tasks </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Apps </span> </a> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true" tabindex="-1"> <span> Settings </span> </a> </li> </ul> </nav>
<nav aria-label="Workspace sections"> <ul class="nav nav-pills"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span> Dashboard </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Tasks </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Apps </span> </a> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true" tabindex="-1"> <span> Settings </span> </a> </li> </ul> </nav>
Use one-level, icon-led sidebar items for predictable routes; nested flyouts are handled in a dedicated sidebar pattern.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22<nav aria-label="App sections"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> Dashboard </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> Tasks </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> Apps </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-messages-square" data-icon="inline-start" aria-hidden="true"></i></span> <span> Chats </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-users" data-icon="inline-start" aria-hidden="true"></i></span> <span> Users </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-settings" data-icon="inline-start" aria-hidden="true"></i></span> <span> Settings </span> </a> </li> </ul> </nav>
<nav aria-label="App sections"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> Dashboard </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> Tasks </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> Apps </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-messages-square" data-icon="inline-start" aria-hidden="true"></i></span> <span> Chats </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-users" data-icon="inline-start" aria-hidden="true"></i></span> <span> Users </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-settings" data-icon="inline-start" aria-hidden="true"></i></span> <span> Settings </span> </a> </li> </ul> </nav>
Connect 2rem icon frames in a vertical route menu. Completed steps use the theme's primary colors; the current page keeps its independent pill highlight. Supply an icon for each step and keep completion independent of availability.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16<nav aria-label="Application steps"> <ul class="nav nav-pills nav-steps flex-column"> <li class="nav-item" data-nav-completed="true"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-folder-open" data-icon="inline-start" aria-hidden="true"></i></span> <span> Details <span class="nav-link-description d-block small">Details saved</span><span class="visually-hidden">Completed</span> </span> </a> </li> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-user" data-icon="inline-start" aria-hidden="true"></i></span> <span> Members <span class="nav-link-description d-block small">Choose your team</span> </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-calendar" data-icon="inline-start" aria-hidden="true"></i></span> <span> Schedule <span class="nav-link-description d-block small">Choose a date</span> </span> </a> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true" tabindex="-1"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-send" data-icon="inline-start" aria-hidden="true"></i></span> <span> Submit <span class="nav-link-description d-block small">Available after review</span> </span> </a> </li> </ul> </nav>
<nav aria-label="Application steps"> <ul class="nav nav-pills nav-steps flex-column"> <li class="nav-item" data-nav-completed="true"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-folder-open" data-icon="inline-start" aria-hidden="true"></i></span> <span> Details <span class="nav-link-description d-block small">Details saved</span><span class="visually-hidden">Completed</span> </span> </a> </li> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-user" data-icon="inline-start" aria-hidden="true"></i></span> <span> Members <span class="nav-link-description d-block small">Choose your team</span> </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-calendar" data-icon="inline-start" aria-hidden="true"></i></span> <span> Schedule <span class="nav-link-description d-block small">Choose a date</span> </span> </a> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true" tabindex="-1"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-send" data-icon="inline-start" aria-hidden="true"></i></span> <span> Submit <span class="nav-link-description d-block small">Available after review</span> </span> </a> </li> </ul> </nav>
Use underlines for lightweight filters in narrow views where emphasis should stay subtle.
1 2 3 4 5 6 7 8 9 10 11 12 13<nav aria-label="Project filters"> <ul class="nav nav-underline"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span> All </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Open </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Archived </span> </a> </li> </ul> </nav>
<nav aria-label="Project filters"> <ul class="nav nav-underline"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span> All </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Open </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Archived </span> </a> </li> </ul> </nav>
Use the base style when surrounding layout defines the visual weight and only the active link needs state.
1 2 3 4 5 6 7 8 9 10 11 12 13<nav aria-label="Plain navigation"> <ul class="nav"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span> Overview </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Reports </span> </a> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true" tabindex="-1"> <span> Disabled </span> </a> </li> </ul> </nav>
<nav aria-label="Plain navigation"> <ul class="nav"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span> Overview </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span> Reports </span> </a> </li> <li class="nav-item"> <a class="nav-link disabled" aria-disabled="true" tabindex="-1"> <span> Disabled </span> </a> </li> </ul> </nav>
Validate the same sidebar navigation pattern across Arabic and Hebrew RTL examples, with English as the LTR comparison.
1 2 3 4 5 6 7 8 9 10 11 12 13<nav aria-label="أقسام التطبيق" dir="rtl"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> لوحة التحكم </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> المهام </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> التطبيقات </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> </ul> </nav>
<nav aria-label="أقسام التطبيق" dir="rtl"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> لوحة التحكم </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> المهام </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> التطبيقات </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> </ul> </nav>
1 2 3 4 5 6 7 8 9 10 11 12 13<nav aria-label="אזורי האפליקציה" dir="rtl"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> לוח בקרה </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> משימות </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> יישומים </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> </ul> </nav>
<nav aria-label="אזורי האפליקציה" dir="rtl"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> לוח בקרה </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> משימות </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> יישומים </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> </ul> </nav>
1 2 3 4 5 6 7 8 9 10 11 12 13<nav aria-label="App sections" dir="ltr"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> Dashboard </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> Tasks </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> Apps </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> </ul> </nav>
<nav aria-label="App sections" dir="ltr"> <ul class="nav nav-pills flex-column gap-1"> <li class="nav-item"> <a class="nav-link active" href="#" aria-current="page"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-layout-dashboard" data-icon="inline-start" aria-hidden="true"></i></span> <span> Dashboard </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-list-check" data-icon="inline-start" aria-hidden="true"></i></span> <span> Tasks </span> </a> </li> <li class="nav-item"> <a class="nav-link" href="#"> <span class="nav-link-icon" aria-hidden="true"><i class="lucide lucide-package" data-icon="inline-start" aria-hidden="true"></i></span> <span> Apps </span> <span class="badge text-bg-primary rounded-pill ms-auto">3</span> </a> </li> </ul> </nav>
For dynamic tabs, pills, and JavaScript tab panels, continue with the Bootstrap Navs and tabs documentation.
No matching pages.
Restore the default appearance.