Snippets Accordion

Bootstrap 5 Product Filter Sidebar with Accordion

A product filter sidebar with collapsible groups, checkbox options with counts, live result tally and a clear-all action.

Bootstrap 5 No jQuery May 2020 4.7K views

<section class="wdw-stage">
  <div class="container" style="max-width: 420px">
    <form class="wdw-card p-4" id="filterForm" onsubmit="return false">
      <div class="d-flex align-items-center justify-content-between gap-3 mb-3">
        <div>
          <span class="wdw-eyebrow">Laptops</span>
          <h1 class="wdw-heading h4 mb-0">Filters</h1>
          <p class="small wdw-muted mb-0" id="filterCount" aria-live="polite">142 products match</p>
        </div>
        <button type="button" class="btn btn-sm btn-outline-secondary rounded-pill px-3 flex-shrink-0" id="filterClear">Clear all</button>
      </div>
      <div class="d-flex flex-wrap gap-2 mb-2 filter-chips" id="filterChips" aria-label="Selected filters"></div>
      <div class="accordion accordion-flush filter-acc" id="filterAcc">
        <div class="accordion-item bg-transparent">
          <h2 class="accordion-header">
            <button class="accordion-button bg-transparent shadow-none px-0 fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#fg0" aria-expanded="true" aria-controls="fg0">Processor <span class="badge rounded-pill bg-primary ms-2 filter-badge d-none">0</span></button>
          </h2>
          <div id="fg0" class="accordion-collapse collapse show" data-bs-parent="#filterAcc">
            <div class="accordion-body px-0 pt-0 list-group list-group-flush gap-1">
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f0_0"><input class="form-check-input m-0" type="checkbox" id="f0_0" value="Intel Core i9"><span class="flex-grow-1">Intel Core i9</span><span class="small wdw-muted">48</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f0_1"><input class="form-check-input m-0" type="checkbox" id="f0_1" value="Intel Core i7"><span class="flex-grow-1">Intel Core i7</span><span class="small wdw-muted">92</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f0_2"><input class="form-check-input m-0" type="checkbox" id="f0_2" value="Intel Core i5"><span class="flex-grow-1">Intel Core i5</span><span class="small wdw-muted">130</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f0_3"><input class="form-check-input m-0" type="checkbox" id="f0_3" value="AMD Ryzen 7"><span class="flex-grow-1">AMD Ryzen 7</span><span class="small wdw-muted">41</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f0_4"><input class="form-check-input m-0" type="checkbox" id="f0_4" value="Apple M3"><span class="flex-grow-1">Apple M3</span><span class="small wdw-muted">27</span></label>
            </div>
          </div>
        </div>
        <div class="accordion-item bg-transparent">
          <h2 class="accordion-header">
            <button class="accordion-button bg-transparent shadow-none px-0 fw-semibold collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fg1" aria-expanded="false" aria-controls="fg1">Brand <span class="badge rounded-pill bg-primary ms-2 filter-badge d-none">0</span></button>
          </h2>
          <div id="fg1" class="accordion-collapse collapse" data-bs-parent="#filterAcc">
            <div class="accordion-body px-0 pt-0 list-group list-group-flush gap-1">
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f1_0"><input class="form-check-input m-0" type="checkbox" id="f1_0" value="Apple"><span class="flex-grow-1">Apple</span><span class="small wdw-muted">27</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f1_1"><input class="form-check-input m-0" type="checkbox" id="f1_1" value="Dell"><span class="flex-grow-1">Dell</span><span class="small wdw-muted">64</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f1_2"><input class="form-check-input m-0" type="checkbox" id="f1_2" value="Lenovo"><span class="flex-grow-1">Lenovo</span><span class="small wdw-muted">88</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f1_3"><input class="form-check-input m-0" type="checkbox" id="f1_3" value="ASUS"><span class="flex-grow-1">ASUS</span><span class="small wdw-muted">71</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f1_4"><input class="form-check-input m-0" type="checkbox" id="f1_4" value="HP"><span class="flex-grow-1">HP</span><span class="small wdw-muted">59</span></label>
            </div>
          </div>
        </div>
        <div class="accordion-item bg-transparent">
          <h2 class="accordion-header">
            <button class="accordion-button bg-transparent shadow-none px-0 fw-semibold collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fg2" aria-expanded="false" aria-controls="fg2">Screen size <span class="badge rounded-pill bg-primary ms-2 filter-badge d-none">0</span></button>
          </h2>
          <div id="fg2" class="accordion-collapse collapse" data-bs-parent="#filterAcc">
            <div class="accordion-body px-0 pt-0 list-group list-group-flush gap-1">
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f2_0"><input class="form-check-input m-0" type="checkbox" id="f2_0" value="13 inch"><span class="flex-grow-1">13 inch</span><span class="small wdw-muted">52</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f2_1"><input class="form-check-input m-0" type="checkbox" id="f2_1" value="14 inch"><span class="flex-grow-1">14 inch</span><span class="small wdw-muted">77</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f2_2"><input class="form-check-input m-0" type="checkbox" id="f2_2" value="15.6 inch"><span class="flex-grow-1">15.6 inch</span><span class="small wdw-muted">103</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f2_3"><input class="form-check-input m-0" type="checkbox" id="f2_3" value="17 inch"><span class="flex-grow-1">17 inch</span><span class="small wdw-muted">18</span></label>
            </div>
          </div>
        </div>
        <div class="accordion-item bg-transparent">
          <h2 class="accordion-header">
            <button class="accordion-button bg-transparent shadow-none px-0 fw-semibold collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#fg3" aria-expanded="false" aria-controls="fg3">Operating system <span class="badge rounded-pill bg-primary ms-2 filter-badge d-none">0</span></button>
          </h2>
          <div id="fg3" class="accordion-collapse collapse" data-bs-parent="#filterAcc">
            <div class="accordion-body px-0 pt-0 list-group list-group-flush gap-1">
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f3_0"><input class="form-check-input m-0" type="checkbox" id="f3_0" value="macOS"><span class="flex-grow-1">macOS</span><span class="small wdw-muted">27</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f3_1"><input class="form-check-input m-0" type="checkbox" id="f3_1" value="Windows 11"><span class="flex-grow-1">Windows 11</span><span class="small wdw-muted">214</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f3_2"><input class="form-check-input m-0" type="checkbox" id="f3_2" value="Linux"><span class="flex-grow-1">Linux</span><span class="small wdw-muted">12</span></label>
              <label class="list-group-item bg-transparent border-0 rounded-3 d-flex align-items-center gap-3 py-2 px-2 filter-opt" for="f3_3"><input class="form-check-input m-0" type="checkbox" id="f3_3" value="ChromeOS"><span class="flex-grow-1">ChromeOS</span><span class="small wdw-muted">34</span></label>
            </div>
          </div>
        </div>
      </div>
      <button type="submit" class="btn btn-primary rounded-pill w-100 mt-3" id="filterApply">Show results</button>
    </form>
  </div>
</section>

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