Snippets Accordion

Bootstrap 5 Accordion Sidebar Menu

A sidebar accordion menu with icons, count badges and one-at-a-time collapsible sections next to a simple content panel.

Bootstrap 5 No jQuery Sep 2020 2.1K views

<section class="wdw-stage">
  <div class="container" style="max-width:960px">
    <div class="row g-4 align-items-start">
      <div class="col-md-4 col-lg-3">
        <nav class="wdw-card p-2 am d-flex flex-column" aria-label="Sidebar">
          <div class="d-flex align-items-center gap-2 px-3 pt-3 pb-2 mb-1"><span class="wdw-icon" style="width:2.25rem;height:2.25rem"><i class="bi bi-lightning-charge-fill"></i></span><strong class="wdw-heading">Acme App</strong></div>
          <div class="accordion accordion-flush" id="amAcc">
            <div class="accordion-item">
              <h2 class="accordion-header"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#am-acc" aria-expanded="false" aria-controls="am-acc"><i class="bi bi-person"></i>Account</button></h2>
              <div id="am-acc" class="accordion-collapse collapse" data-bs-parent="#amAcc"><div class="accordion-body p-0 pb-2"><div class="list-group list-group-flush am-links">
                <a href="#" data-label="Profile" data-stats="1|0|0" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-person-circle"></i><span>Profile</span></a>
                <a href="#" data-label="Security" data-stats="4|1|0" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-shield-lock"></i><span>Security</span></a>
              </div></div></div>
            </div>
            <div class="accordion-item">
              <h2 class="accordion-header"><button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#am-msg" aria-expanded="true" aria-controls="am-msg"><i class="bi bi-chat-dots"></i>Messages</button></h2>
              <div id="am-msg" class="accordion-collapse collapse show" data-bs-parent="#amAcc"><div class="accordion-body p-0 pb-2"><div class="list-group list-group-flush am-links">
                <a href="#" data-label="Inbox" data-stats="20|8|3" class="list-group-item list-group-item-action d-flex align-items-center gap-2 active"><i class="bi bi-inbox"></i><span>Inbox</span><span class="badge rounded-pill ms-auto text-bg-primary">20</span></a>
                <a href="#" data-label="Sent" data-stats="64|0|5" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-send"></i><span>Sent</span></a>
                <a href="#" data-label="Drafts" data-stats="15|15|0" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-file-earmark-text"></i><span>Drafts</span><span class="badge rounded-pill ms-auto text-bg-primary">15</span></a>
                <a href="#" data-label="Trash" data-stats="9|0|0" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-trash3"></i><span>Trash</span></a>
              </div></div></div>
            </div>
            <div class="accordion-item">
              <h2 class="accordion-header"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#am-rep" aria-expanded="false" aria-controls="am-rep"><i class="bi bi-bar-chart"></i>Reports</button></h2>
              <div id="am-rep" class="accordion-collapse collapse" data-bs-parent="#amAcc"><div class="accordion-body p-0 pb-2"><div class="list-group list-group-flush am-links">
                <a href="#" data-label="Traffic" data-stats="12|3|1" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-graph-up"></i><span>Traffic</span></a>
                <a href="#" data-label="Revenue" data-stats="7|2|1" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-cash-coin"></i><span>Revenue</span></a>
              </div></div></div>
            </div>
            <div class="accordion-item">
              <h2 class="accordion-header"><button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#am-set" aria-expanded="false" aria-controls="am-set"><i class="bi bi-gear"></i>Settings</button></h2>
              <div id="am-set" class="accordion-collapse collapse" data-bs-parent="#amAcc"><div class="accordion-body p-0 pb-2"><div class="list-group list-group-flush am-links">
                <a href="#" data-label="General" data-stats="5|0|0" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-sliders"></i><span>General</span></a>
                <a href="#" data-label="Notifications" data-stats="18|6|2" class="list-group-item list-group-item-action d-flex align-items-center gap-2"><i class="bi bi-bell"></i><span>Notifications</span></a>
              </div></div></div>
            </div>
            <a href="#" class="am-logout text-danger d-flex align-items-center gap-2"><i class="bi bi-power"></i>Logout</a>
          </div>
          <div class="d-flex align-items-center gap-2 p-2 mt-2 border-top pt-3">
            <img class="rounded-circle" width="36" height="36" src="https://i.pravatar.cc/72?img=32" alt="">
            <div class="lh-sm"><div class="fw-semibold small">Alex Morgan</div><small class="text-body-secondary">[email protected]</small></div>
          </div>
        </nav>
      </div>
      <div class="col-md-8 col-lg-9">
        <div class="wdw-card p-4 p-lg-5">
          <span class="wdw-eyebrow mb-2" id="amCrumb">Messages › Inbox</span>
          <h1 class="wdw-heading display-6 mb-3" id="amTitle">Inbox</h1>
          <p class="wdw-muted mb-4">Pick any link in the accordion menu and this panel follows along. Open one section at a time and show counts with badges.</p>
          <div class="row g-3 mb-4">
            <div class="col-4"><div class="wdw-card-sm p-3"><small class="text-body-secondary">Total</small><div class="h3 fw-bold mb-0" id="amS1">20</div></div></div>
            <div class="col-4"><div class="wdw-card-sm p-3"><small class="text-body-secondary">Unread</small><div class="h3 fw-bold mb-0" id="amS2">8</div></div></div>
            <div class="col-4"><div class="wdw-card-sm p-3"><small class="text-body-secondary">Starred</small><div class="h3 fw-bold mb-0" id="amS3">3</div></div></div>
          </div>
          <div class="list-group list-group-flush mb-4">
            <div class="list-group-item px-0 d-flex align-items-center gap-3 bg-transparent"><img class="rounded-circle" width="36" height="36" src="https://i.pravatar.cc/72?img=12" alt=""><div class="lh-sm"><div class="fw-semibold small">Lukasz Holeczek</div><small class="text-body-secondary">Quarterly planning: draft roadmap</small></div><small class="ms-auto text-body-secondary">3:47 PM</small></div>
            <div class="list-group-item px-0 d-flex align-items-center gap-3 bg-transparent"><img class="rounded-circle" width="36" height="36" src="https://i.pravatar.cc/72?img=47" alt=""><div class="lh-sm"><div class="fw-semibold small">Maya Patel</div><small class="text-body-secondary">Invoice #2041 is ready</small></div><small class="ms-auto text-body-secondary">1:12 PM</small></div>
          </div>
          <a class="btn btn-primary rounded-pill px-4" href="#">Learn more</a>
        </div>
      </div>
    </div>
  </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.