Snippets Icons

Bootstrap 5 Review Summary Box with Heart Ratings

A review summary card with a large average score, heart rating and a bar for each rating level showing share and count. Values are computed from the data in the script.

Bootstrap 5 No jQuery Dec 2019 2.5K views

<section class="wdw-stage">
  <div class="container" style="max-width:980px">
    <div class="row g-4 align-items-stretch">
      <div class="col-lg-6">
        <div class="wdw-card p-4 p-sm-5 h-100">
          <h1 class="h4 wdw-heading mb-4">Customer reviews</h1>
          <div class="d-flex align-items-center gap-4 mb-4">
            <div class="rv-score fw-bold text-body-emphasis lh-1" id="rvAvg">4.6</div>
            <div>
              <div class="rv-hearts" id="rvHearts" role="img" aria-label="4.6 out of 5 hearts"><span class="rv-heart"><span class="rv-heart__off"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__off"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__off"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__off"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__off"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span><span class="rv-heart__on" style="width:57%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span></div>
              <div class="wdw-muted mt-1">Based on <span id="rvTotal">1,319</span> reviews</div>
            </div>
          </div>
          <ul class="list-unstyled d-grid gap-3 mb-4" id="rvBars">
          <li class="rv-row" data-count="986" data-star="5">
            <span class="rv-label">5<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg><span class="visually-hidden"> hearts</span></span>
            <div class="progress bg-body-secondary" role="progressbar" aria-label="5 hearts: 75% (986)" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar" style="width:75%"></div></div>
            <span class="rv-pct">75%</span><span class="rv-count">(986)</span>
          </li>
          <li class="rv-row" data-count="205" data-star="4">
            <span class="rv-label">4<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg><span class="visually-hidden"> hearts</span></span>
            <div class="progress bg-body-secondary" role="progressbar" aria-label="4 hearts: 16% (205)" aria-valuenow="16" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar" style="width:16%"></div></div>
            <span class="rv-pct">16%</span><span class="rv-count">(205)</span>
          </li>
          <li class="rv-row" data-count="65" data-star="3">
            <span class="rv-label">3<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg><span class="visually-hidden"> hearts</span></span>
            <div class="progress bg-body-secondary" role="progressbar" aria-label="3 hearts: 5% (65)" aria-valuenow="5" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar" style="width:5%"></div></div>
            <span class="rv-pct">5%</span><span class="rv-count">(65)</span>
          </li>
          <li class="rv-row" data-count="17" data-star="2">
            <span class="rv-label">2<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg><span class="visually-hidden"> hearts</span></span>
            <div class="progress bg-body-secondary" role="progressbar" aria-label="2 hearts: 1% (17)" aria-valuenow="1" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar" style="width:1%"></div></div>
            <span class="rv-pct">1%</span><span class="rv-count">(17)</span>
          </li>
          <li class="rv-row" data-count="46" data-star="1">
            <span class="rv-label">1<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg><span class="visually-hidden"> hearts</span></span>
            <div class="progress bg-body-secondary" role="progressbar" aria-label="1 hearts: 3% (46)" aria-valuenow="3" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar" style="width:3%"></div></div>
            <span class="rv-pct">3%</span><span class="rv-count">(46)</span>
          </li>
          </ul>
          <button type="button" class="btn btn-outline-primary rounded-pill w-100">View all reviews</button>
        </div>
      </div>
      <div class="col-lg-6">
        <figure class="wdw-card p-4 p-sm-5 h-100 mb-0 d-flex flex-column">
          <span class="wdw-eyebrow mb-3">Top review</span>
          <div class="rv-hearts rv-hearts--sm mb-3" role="img" aria-label="5 out of 5 hearts"><span class="rv-heart"><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span><span class="rv-heart"><span class="rv-heart__on" style="width:100%"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z"/></svg></span></span></div>
          <blockquote class="fs-5 fw-semibold text-body-emphasis mb-4">“Setup took ten minutes and the support team answered every question the same day. It has been rock solid for months.”</blockquote>
          <figcaption class="d-flex align-items-center gap-3 mt-auto">
            <img src="https://i.pravatar.cc/96?img=32" width="48" height="48" class="rounded-circle" alt="Portrait of Maya Collins">
            <div class="lh-sm"><div class="fw-bold text-body-emphasis">Maya Collins</div><span class="badge rounded-pill bg-primary-subtle text-primary-emphasis mt-1">Verified buyer</span></div>
          </figcaption>
        </figure>
      </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.