Back to Full Page Component

Shop Full Page

Breadcrumb Section Product Filter Sidebar Product Grid Pagination Popular Brands Slider (Native Carousel Styling for Brands)

#Shop Full Page#Shop page#Shop

Live preview

Source code

html
<div class="container py-4">
  <!-- i. Breadcrumb Section -->
  <nav aria-label="breadcrumb" class="mb-4">
    <ol class="breadcrumb bg-light p-3 rounded-3">
      <li class="breadcrumb-item"><a href="#" class="text-decoration-none">Home</a></li>
      <li class="breadcrumb-item active" aria-current="page">Shop</li>
    </ol>
  </nav>

  <div class="row">
    <!-- iii. Product Filter Sidebar -->
    <aside class="col-lg-3 d-none d-lg-block">
      <div class="card border-0 shadow-sm rounded-4 p-3 mb-4">
        <h5 class="fw-bold mb-3 border-bottom pb-2">Filter by Price</h5>
        <input type="range" class="form-range mb-2" min="0" max="1000" id="priceRange">
        <div class="d-flex justify-content-between small text-muted">
          <span>$0</span>
          <span>$1000</span>
        </div>
      </div>

      <div class="card border-0 shadow-sm rounded-4 p-3 mb-4">
        <h5 class="fw-bold mb-3 border-bottom pb-2">Colors</h5>
        <div class="d-flex flex-wrap gap-2">
          <button class="btn btn-dark rounded-circle p-2" style="width: 25px; height: 25px;"></button>
          <button class="btn btn-primary rounded-circle p-2" style="width: 25px; height: 25px;"></button>
          <button class="btn btn-danger rounded-circle p-2" style="width: 25px; height: 25px;"></button>
          <button class="btn btn-warning rounded-circle p-2" style="width: 25px; height: 25px;"></button>
          <button class="btn btn-info rounded-circle p-2" style="width: 25px; height: 25px;"></button>
        </div>
      </div>

      <div class="card border-0 shadow-sm rounded-4 p-3 mb-4">
        <h5 class="fw-bold mb-3 border-bottom pb-2">Size</h5>
        <div class="form-check small mb-2">
          <input class="form-check-input" type="checkbox" id="sizeS">
          <label class="form-check-label" for="sizeS">Small (S)</label>
        </div>
        <div class="form-check small mb-2">
          <input class="form-check-input" type="checkbox" id="sizeM">
          <label class="form-check-label" for="sizeM">Medium (M)</label>
        </div>
        <div class="form-check small mb-2">
          <input class="form-check-input" type="checkbox" id="sizeL">
          <label class="form-check-label" for="sizeL">Large (L)</label>
        </div>
      </div>
    </aside>

    <!-- Right Side Main Content -->
    <main class="col-lg-9">
      <!-- ii. Search & Sort By Dropdown Section -->
      <div class="card border-0 shadow-sm rounded-4 p-3 mb-4">
        <div class="row align-items-center g-3">
          <div class="col-md-6">
            <div class="input-group">
              <input type="text" class="form-control border-end-0" placeholder="Search products...">
              <span class="input-group-text bg-white border-start-0 text-muted">
                <i class="bi bi-search"></i>
              </span>
            </div>
          </div>
          <div class="col-md-6 text-md-end">
            <div class="d-inline-flex align-items-center gap-2">
              <label class="text-nowrap small fw-bold">Sort By:</label>
              <select class="form-select form-select-sm border-0 bg-light shadow-none">
                <option>Newest Arrivals</option>
                <option>Price: Low to High</option>
                <option>Price: High to Low</option>
                <option>Best Rating</option>
              </select>
            </div>
          </div>
        </div>
      </div>

      <!-- iv. Product Grid -->
      <div class="row g-4">
        <!-- Product Card Loop x 6 -->
        <div class="col-sm-6 col-md-4">
          <div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden shop-card">
            <img src="https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=400" class="card-img-top" alt="Product">
            <div class="card-body text-center">
              <h6 class="fw-bold mb-2">Red Sport Shoes</h6>
              <p class="text-primary fw-bold mb-3">$85.00</p>
              <button class="btn btn-outline-dark btn-sm rounded-pill w-100">Add to Cart</button>
            </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-4">
          <div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden shop-card">
            <img src="https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=400" class="card-img-top" alt="Product">
            <div class="card-body text-center">
              <h6 class="fw-bold mb-2">Luxury Smart Watch</h6>
              <p class="text-primary fw-bold mb-3">$150.00</p>
              <button class="btn btn-outline-dark btn-sm rounded-pill w-100">Add to Cart</button>
            </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-4">
          <div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden shop-card">
            <img src="https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=400" class="card-img-top" alt="Product">
            <div class="card-body text-center">
              <h6 class="fw-bold mb-2">Studio Wireless Headphones</h6>
              <p class="text-primary fw-bold mb-3">$299.00</p>
              <button class="btn btn-outline-dark btn-sm rounded-pill w-100">Add to Cart</button>
            </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-4">
          <div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden shop-card">
            <img src="https://images.unsplash.com/photo-1526170315870-ef6d82f58326?w=400" class="card-img-top" alt="Product">
            <div class="card-body text-center">
              <h6 class="fw-bold mb-2">Vintage Camera Pack</h6>
              <p class="text-primary fw-bold mb-3">$450.00</p>
              <button class="btn btn-outline-dark btn-sm rounded-pill w-100">Add to Cart</button>
            </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-4">
          <div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden shop-card">
            <img src="https://images.unsplash.com/photo-1525966222134-fcfa99b8ae77?w=400" class="card-img-top" alt="Product">
            <div class="card-body text-center">
              <h6 class="fw-bold mb-2">Classic Leather Sneakers</h6>
              <p class="text-primary fw-bold mb-3">$95.00</p>
              <button class="btn btn-outline-dark btn-sm rounded-pill w-100">Add to Cart</button>
            </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-4">
          <div class="card border-0 shadow-sm h-100 rounded-4 overflow-hidden shop-card">
            <img src="https://images.unsplash.com/photo-1584917865442-de89df76afd3?w=400" class="card-img-top" alt="Product">
            <div class="card-body text-center">
              <h6 class="fw-bold mb-2">Canvas Tote Bag</h6>
              <p class="text-primary fw-bold mb-3">$45.00</p>
              <button class="btn btn-outline-dark btn-sm rounded-pill w-100">Add to Cart</button>
            </div>
          </div>
        </div>
      </div>

      <!-- Pagination -->
      <nav class="mt-5">
        <ul class="pagination justify-content-center">
          <li class="page-item disabled"><a class="page-link shadow-none rounded-start-pill" href="#">Previous</a></li>
          <li class="page-item active"><a class="page-link shadow-none" href="#">1</a></li>
          <li class="page-item"><a class="page-link shadow-none" href="#">2</a></li>
          <li class="page-item"><a class="page-link shadow-none" href="#">3</a></li>
          <li class="page-item"><a class="page-link shadow-none rounded-end-pill" href="#">Next</a></li>
        </ul>
      </nav>
    </main>
  </div>

  <!-- v. Popular Brands Slider (Native Carousel Styling for Brands) -->
  <div class="py-5 mt-5 border-top">
    <h4 class="fw-bold text-center mb-5 uppercase">Popular Brands</h4>
    <div class="row row-cols-2 row-cols-md-5 align-items-center justify-content-center g-4 text-center grayscale-brands">
      <div class="col"><img src="https://upload.wikimedia.org/wikipedia/commons/2/20/Adidas_Logo.svg" alt="Brand" height="40"></div>
      <div class="col"><img src="https://upload.wikimedia.org/wikipedia/commons/9/94/Puma_Logo.svg" alt="Brand" height="40"></div>
      <div class="col"><img src="https://upload.wikimedia.org/wikipedia/commons/a/a6/Logo_NIKE.svg" alt="Brand" height="25"></div>
      <div class="col"><img src="https://upload.wikimedia.org/wikipedia/commons/f/fa/Apple_logo_black.svg" alt="Brand" height="40"></div>
      <div class="col"><img src="https://upload.wikimedia.org/wikipedia/commons/0/08/Samsung_Logo.svg" alt="Brand" height="20"></div>
    </div>
  </div>
</div>

<style>
  .breadcrumb-item+.breadcrumb-item::before {
    content: ">";
  }

  .shop-card img {
    transition: transform 0.3s ease;
  }

  .shop-card:hover img {
    transform: scale(1.05);
  }

  .grayscale-brands img {
    filter: grayscale(1);
    opacity: 0.5;
    transition: all 0.3s ease;
  }

  .grayscale-brands img:hover {
    filter: grayscale(0);
    opacity: 1;
  }

  .page-link {
    border: none;
    color: #333;
  }

  .page-item.active .page-link {
    background-color: #0d6efd;
  }

</style>
How to use this component

Add it to your project in three steps

  1. Copy the HTML from the Source code tab above and paste it inside your <div class="container"> wrapper.
  2. Make sure the Bootstrap 5 CDN CSS and JS are linked in your <head> and before </body>. Any CodeShikhi component assumes Bootstrap 5.3+ is already loaded.
  3. Swap the placeholder text, links, and images for your own content — the layout, spacing, and responsive behaviour stay intact.

The Shop Full Page block is fully responsive and works on every screen from 320 px phones to 1440 px+ desktops without additional CSS.

Accessibility checklist

Ship it accessible by default

  • Use semantic HTML landmarks — <header>, <nav>, <main>, <footer> — so screen readers can navigate your page.
  • Give every image an alt attribute (empty alt="" if it's decorative).
  • Label icon-only buttons with aria-label and keep focus outlines visible.
  • Maintain a contrast ratio of at least 4.5:1 for body text against its background.
  • Test the component with Tab / Shift+Tab and Enter — every interactive element should be reachable.
Step-by-step customisation

Make it match your brand

  1. Change the colour palette by overriding Bootstrap CSS variables: --bs-primary, --bs-body-bg.
  2. Adjust spacing with utility classes such as py-5, gap-4, and mt-lg-5 — no custom CSS required.
  3. Swap the typography by loading a Google Font in your <head> and setting --bs-body-font-family.
  4. Replace stock images with brand assets. Keep dimensions similar to avoid layout shift.
  5. Preview at multiple breakpoints (mobile, tablet, desktop) and tweak column spans if content wraps awkwardly.

Need the full theory? Read our Bootstrap 5 Technical Introduction Guide for grid, breakpoints, and Sass customisation in depth.

About the Shop Full Page component

This component is part of the free CodeShikhi (কোড শিখি) Bootstrap 5 library — a growing collection of copy-paste website building blocks curated for learners and freelance developers. Every block is written in clean, semantic HTML with Bootstrap utility classes, keeps custom CSS to the minimum needed, and works without any build step. Use it as a starting point and adapt the markup, colours, and content to fit your project's brand and audience.

If you spot a bug, want a new variation, or would like to contribute an improvement, reach us via the contact page — we ship updates weekly based on community feedback.

Detailed Technical Breakdown

Detailed Technical Breakdown: Shop Full Page

Browser compatibility & standards

The Shop Full Page component is authored against Bootstrap 5.3, which drops legacy Internet Explorer support and targets modern evergreen engines — Chrome, Edge, Firefox, Safari, and all Chromium-based mobile browsers. Because the markup relies exclusively on the standard CSS features that ship with Bootstrap (Flexbox, CSS Grid, CSS custom properties, and the responsive breakpoint system), you can safely deploy this component to any browser released in the last five years without polyfills. If you need to support very old WebKit or Samsung Internet builds, load the standard Bootstrap 5 CSS from the official jsDelivr CDN — the bundled autoprefixer output already covers those vendor prefixes.

Performance impact

Performance-wise this block is intentionally light. The HTML payload for a typical Bootstrap component is under 4 KB gzipped, and it shares the same Bootstrap CSS/JS bundle you are already loading — meaning the marginal cost of adding it to a page is effectively zero KB on repeat visits. There is no JavaScript framework runtime, no hydration cost, and no client-side data fetching. The only images referenced are placeholders you will replace with your own assets; when you do, serve them as WebP or AVIF, add explicit width and height attributes to prevent layout shift (CLS), and lazy-load anything below the fold with loading="lazy". These small changes typically move Lighthouse Performance scores from the mid-80s into the 95+ range on both mobile and desktop.

Utility classes used

The component leans on Bootstrap's utility-first classes to stay declarative: spacing utilities (p-*, m-*, gap-*), the flex helpers (d-flex, align-items-*, justify-content-*), the grid system (container, row, col-lg-*), typography helpers (display-*, lead, text-*), and colour utilities that resolve to Bootstrap CSS variables such as --bs-primary, --bs-body-bg, and --bs-border-color. Because everything is expressed as utilities you can re-theme the entire component by overriding a handful of CSS variables at the :root level — no Sass recompile required.

Exact customisation steps

  1. Copy the source HTML from the tab above and paste it inside your <body>. The outer <div class="container"> wrapper is already included so the component sits on the Bootstrap grid.
  2. Replace the placeholder headings and paragraphs with your own copy. Keep heading levels in order (h1h2h3) so screen readers and search engines can parse the document outline.
  3. Swap any <img> tags for your brand assets. Match the original aspect ratio to avoid layout shift, and always fill in a meaningful alt attribute.
  4. Retune the palette by overriding CSS variables::root { --bs-primary: #4f46e5; --bs-body-bg: #ffffff; }. All utility colour classes update automatically.
  5. Test at each Bootstrap breakpoint — sm (576 px), md (768 px),lg (992 px), xl (1200 px), xxl (1400 px) — using your browser's device toolbar, and tweak column spans if long content wraps.
  6. Ship it with the standard Bootstrap 5 CDN in the <head> and the JS bundle before the closing </body>. No build step required.
Technical & Performance Integration Guide

Technical & Performance Integration Guide — Shop Full Page (full-page template)

When and why to use this full-page template

A full-page template stitches together every block on this site into one deployable document: navigation, hero, feature grid, social proof, call to action and footer. Because it is a complete page, the integration rules shift from "drop this in" to "own the whole document head".

Accessibility & ARIA attributes

Exactly one <h1>, one <header>, one <main>, one <footer> per document. Add a skip link (<a class="visually-hidden-focusable" href="#main">Skip to content</a>) as the first focusable element so keyboard users can bypass the navigation. Set the correct lang attribute on <html> — screen readers use it to pick the right pronunciation engine, which matters when you mix Bangla and English content.

Performance notes for this pattern

Load Bootstrap CSS in the head and the JS bundle just before </body>. Inline the handful of critical CSS rules the hero needs and let everything else arrive normally. Lazy-load every image below the fold, preload the hero image and the primary webfont, and self-host fonts with font-display: swap if you want to remove a third-party connection entirely. A page built this way typically lands in the 90s on mobile Lighthouse without further tuning.

Three customisation tricks

  • Keep one and only one navbar and one footer — duplicated landmarks confuse both crawlers and screen readers.
  • Give every section an id and link the navbar anchors to them for instant on-page navigation.
  • Add Organization and WebSite JSON-LD once in the head so the whole template ships search-ready.

Mistakes to avoid

  • Copying two heroes into the same document, leaving two <h1> elements.
  • Forgetting the responsive viewport meta tag, which makes the entire mobile layout render at desktop width.

More designs in this section