CodeMIRAI
0 XP

Navbar

2 min read 3 runnable examples Quiz included

A responsive navbar

HTML + Bootstrap
<nav class="navbar navbar-expand-lg bg-body-tertiary border-bottom">
  <div class="container-fluid">
    <a class="navbar-brand fw-bold" href="#">CodeMIRAI</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNav"
            aria-controls="mainNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="mainNav">
      <ul class="navbar-nav me-auto">
        <li class="nav-item"><a class="nav-link active" aria-current="page" href="#">Home</a></li>
        <li class="nav-item"><a class="nav-link" href="#">Courses</a></li>
        <li class="nav-item"><a class="nav-link" href="#">Practice</a></li>
      </ul>
    </div>
  </div>
</nav>
<p class="p-3">This preview is narrower than the <code>lg</code> breakpoint, so the links are tucked behind the menu button. Click it.</p>

How the parts fit together:

PartJob
navbar navbar-expand-lga navbar that shows its links in a row from lg up, and collapses below it
navbar-brandthe logo or site name
navbar-togglerthe menu button, shown only while collapsed
collapse navbar-collapsethe part that hides and shows; its id matches the toggler's data-bs-target
navbar-nav, nav-item, nav-linkthe list of links
active and aria-current="page"marks the current page, visually and for screen readers

The menu button works through Bootstrap's JavaScript, which the preview loads for you. On your own page, include bootstrap.bundle.min.js.

Always expanded, and on the right

HTML + Bootstrap
<nav class="navbar navbar-expand-md bg-body-tertiary border-bottom">
  <div class="container">
    <a class="navbar-brand" href="#">📚 Learn</a>
    <ul class="navbar-nav ms-auto flex-row gap-3">
      <li class="nav-item"><a class="nav-link" href="#">Docs</a></li>
      <li class="nav-item"><a class="nav-link" href="#">Blog</a></li>
      <li class="nav-item"><a class="btn btn-primary btn-sm" href="#">Sign up</a></li>
    </ul>
  </div>
</nav>

navbar-expand-md expands from 768px, which this preview reaches. ms-auto on the list pushes the links to the right of the brand.

HTML + Bootstrap
<nav class="navbar navbar-expand bg-dark" data-bs-theme="dark">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Shop</a>
    <ul class="navbar-nav me-auto">
      <li class="nav-item"><a class="nav-link active" aria-current="page" href="#">Home</a></li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Categories</a>
        <ul class="dropdown-menu">
          <li><a class="dropdown-item" href="#">Keyboards</a></li>
          <li><a class="dropdown-item" href="#">Monitors</a></li>
          <li><hr class="dropdown-divider"></li>
          <li><a class="dropdown-item" href="#">All products</a></li>
        </ul>
      </li>
    </ul>
    <form class="d-flex" role="search">
      <input class="form-control form-control-sm me-2" type="search" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-light btn-sm" type="submit">Go</button>
    </form>
  </div>
</nav>
<div style="height: 160px"></div>
  • data-bs-theme="dark" switches the navbar's text and icons to light colours, for a dark background.
  • navbar-expand, with no breakpoint, never collapses.
  • A dropdown needs dropdown on the item, data-bs-toggle="dropdown" on its link, and a dropdown-menu list. Click Categories to open it.

Keeping it on screen

Add sticky-top to the navbar to keep it at the top of the window while the page scrolls, or fixed-top to fix it there permanently. A fixed navbar covers the top of the page, so the page's content then needs some top padding.

Finished this lesson?Mark it complete to earn +20 XP and move your progress on.