Snippets Menu

Bootstrap 5 Mobile App Menu with Icon Tiles

A phone-sized app menu with a two-column grid of icon tiles, a highlighted current item and a header button that switches between grid and list layouts.

Bootstrap 5 No jQuery Mar 2020 2.3K views

<section class="wdw-stage">
  <div class="container d-flex flex-column align-items-center gap-4">
    <div class="app wdw-aurora rounded-5 p-3 p-sm-4" id="app-menu">
      <div class="d-flex justify-content-between align-items-center mb-3">
        <button type="button" class="app-round" aria-label="Back"><i class="bi bi-arrow-left" aria-hidden="true"></i></button>
        <p class="app-title mb-0 fw-bold" id="app-title">Home</p>
        <button type="button" class="app-round" id="app-layout" aria-label="Switch to list view" aria-pressed="false"><i class="bi bi-three-dots-vertical" aria-hidden="true"></i></button>
      </div>
      <nav aria-label="App menu">
        <ul class="app-grid list-unstyled m-0 p-0">
          <li><button type="button" class="app-tile is-active" aria-current="page" data-label="Home"><i class="bi bi-house-door" aria-hidden="true"></i><span>Home</span></button></li>
          <li><button type="button" class="app-tile" data-label="Likes"><i class="bi bi-heart" aria-hidden="true"></i><span>Likes</span></button></li>
          <li><button type="button" class="app-tile" data-label="Stats"><i class="bi bi-bar-chart" aria-hidden="true"></i><span>Stats</span></button></li>
          <li><button type="button" class="app-tile" data-label="Pictures"><i class="bi bi-image" aria-hidden="true"></i><span>Pictures</span></button></li>
          <li><button type="button" class="app-tile" data-label="Share"><i class="bi bi-send" aria-hidden="true"></i><span>Share</span></button></li>
          <li><button type="button" class="app-tile" data-label="Settings"><i class="bi bi-gear" aria-hidden="true"></i><span>Settings</span></button></li>
        </ul>
      </nav>
    </div>
    <p class="wdw-muted small mb-0" aria-live="polite">Tap a tile to select it, or use the menu button to change layout.</p>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.