Snippets Buttons

Bootstrap 5 Product Page with Buy Now Button

A product page with image, price and savings, star rating, tabs for details, shipping and reviews, a quantity stepper and add-to-cart and buy-now buttons.

Bootstrap 5 No jQuery Jul 2020 2.1K views

<section class="wdw-stage">
  <div class="container" style="max-width: 1080px">
    <div class="wdw-card overflow-hidden">
      <div class="row g-0">
        <div class="col-lg-6 pp-media bg-body-tertiary position-relative">
          <img src="https://images.unsplash.com/photo-1485965120184-e220f721d03e?auto=format&fit=crop&w=1000&q=80" alt="City bike leaning against a wall" class="w-100 h-100 object-fit-cover">
          <span class="badge text-bg-dark rounded-pill position-absolute top-0 start-0 m-3 px-3 py-2">New season</span>
        </div>
        <div class="col-lg-6 p-4 p-md-5">
          <span class="wdw-eyebrow">City bikes</span>
          <h1 class="wdw-heading h2 mt-1 mb-2">Tyre City Cycle 21</h1>
          <div class="d-flex align-items-center gap-2 mb-3">
            <span class="pp-stars" role="img" aria-label="Rated 4.5 out of 5">
              <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3 6.9 7.5.7-5.7 5 1.7 7.3L12 17.8 5.5 21.9l1.7-7.3-5.7-5 7.5-.7z"/></svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3 6.9 7.5.7-5.7 5 1.7 7.3L12 17.8 5.5 21.9l1.7-7.3-5.7-5 7.5-.7z"/></svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3 6.9 7.5.7-5.7 5 1.7 7.3L12 17.8 5.5 21.9l1.7-7.3-5.7-5 7.5-.7z"/></svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2l3 6.9 7.5.7-5.7 5 1.7 7.3L12 17.8 5.5 21.9l1.7-7.3-5.7-5 7.5-.7z"/></svg><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" class="opacity-25"><path d="M12 2l3 6.9 7.5.7-5.7 5 1.7 7.3L12 17.8 5.5 21.9l1.7-7.3-5.7-5 7.5-.7z"/></svg>
            </span>
            <span class="small wdw-muted">4.5 · 250 reviews</span>
          </div>
          <div class="d-flex align-items-baseline gap-2 mb-4">
            <span class="fs-2 fw-bold text-body-emphasis">$289</span>
            <s class="wdw-muted">$349</s>
            <span class="badge bg-success-subtle text-success-emphasis rounded-pill">Save 17%</span>
          </div>

          <ul class="nav nav-pills gap-1 mb-3" role="tablist">
            <li class="nav-item" role="presentation"><button class="nav-link active rounded-pill" id="pp-tab-d" data-bs-toggle="pill" data-bs-target="#pp-d" type="button" role="tab" aria-controls="pp-d" aria-selected="true">Details</button></li>
            <li class="nav-item" role="presentation"><button class="nav-link rounded-pill" id="pp-tab-s" data-bs-toggle="pill" data-bs-target="#pp-s" type="button" role="tab" aria-controls="pp-s" aria-selected="false">Shipping</button></li>
            <li class="nav-item" role="presentation"><button class="nav-link rounded-pill" id="pp-tab-r" data-bs-toggle="pill" data-bs-target="#pp-r" type="button" role="tab" aria-controls="pp-r" aria-selected="false">Reviews</button></li>
          </ul>
          <div class="tab-content mb-4 pp-tabs">
            <div class="tab-pane fade show active" id="pp-d" role="tabpanel" aria-labelledby="pp-tab-d" tabindex="0">
              <ul class="list-unstyled d-grid gap-2 mb-0">
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> 100% quality checked</li>
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> 12 months warranty</li>
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Easy returns within 30 days</li>
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Lightweight steel frame</li>
              </ul>
            </div>
            <div class="tab-pane fade" id="pp-s" role="tabpanel" aria-labelledby="pp-tab-s" tabindex="0">
              <ul class="list-unstyled d-grid gap-2 mb-0">
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Free shipping on every order</li>
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Normal delivery in 4 to 5 days</li>
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Express delivery in 2 to 3 days</li>
                <li class="d-flex gap-2 align-items-center"><svg class="pp-ck" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7.5"/></svg> Cash on delivery available</li>
              </ul>
            </div>
            <div class="tab-pane fade" id="pp-r" role="tabpanel" aria-labelledby="pp-tab-r" tabindex="0">
              <figure class="mb-0">
                <blockquote class="mb-1">Solid build and great on rough trails. Assembly took twenty minutes.</blockquote>
                <figcaption class="small wdw-muted">Ravi K., verified buyer</figcaption>
              </figure>
            </div>
          </div>

          <div class="d-flex flex-wrap gap-2">
            <div class="input-group pp-qty" role="group" aria-label="Quantity">
              <button class="btn btn-outline-secondary px-3" type="button" data-qty="-1" aria-label="Decrease quantity">−</button>
              <input type="text" class="form-control text-center px-0" value="1" id="ppQty" inputmode="numeric" aria-label="Quantity" readonly>
              <button class="btn btn-outline-secondary px-3" type="button" data-qty="1" aria-label="Increase quantity">+</button>
            </div>
            <button type="button" class="btn btn-outline-primary rounded-pill px-4 flex-fill">Add to cart</button>
            <button type="button" class="btn btn-primary rounded-pill px-4 flex-fill">Buy now</button>
          </div>
        </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.