Back to Full Page Component

Full Blog Post Page

#Blog page#Blog Post Page#Main Blog Content Section#Trending Posts Slider#Categories Sidebar#Tags Widget

Live preview

Source code

html
<!-- i. Breadcrumb Section -->
<section class="py-3 bg-light border-bottom">
  <div class="container">
    <nav aria-label="breadcrumb">
      <ol class="breadcrumb mb-0">
        <li class="breadcrumb-item"><a href="index.html" class="text-decoration-none">Home</a></li>
        <li class="breadcrumb-item active fw-bold text-primary" aria-current="page">Insights & Articles</li>
      </ol>
    </nav>
  </div>
</section>

<!-- v. Trending Posts Slider (Bootstrap Carousel) -->
<section class="py-5 bg-white">
  <div class="container">
    <h4 class="fw-bold mb-4"><i class="bi bi-fire text-danger me-2"></i>Trending Now</h4>
    <div id="trendingCarousel" class="carousel slide rounded-4 shadow-sm overflow-hidden" data-bs-ride="carousel">
      <div class="carousel-inner">
        <div class="carousel-item active" style="height: 350px;">
          <img src="https://images.unsplash.com/photo-1550751827-4bd374c3f58b?auto=format&fit=crop&q=80&w=1200" class="d-block w-100 h-100 object-fit-cover" alt="Trending 1">
          <div class="carousel-caption d-none d-md-block text-start start-0 bottom-0 w-100 p-5 bg-gradient-dark">
            <span class="badge bg-danger mb-2">Editor's Choice</span>
            <h2 class="fw-bold">Securing Modern Web Applications: A Comprehensive Guide</h2>
            <p>Essential practices for developers to prevent common security vulnerabilities.</p>
          </div>
        </div>
        <div class="carousel-item" style="height: 350px;">
          <img src="https://miro.medium.com/v2/resize:fit:1200/1*FU1Znu39t43bkZWUqkf6sg.jpeg" class="d-block w-100 h-100 object-fit-cover" alt="Trending 2">
          <div class="carousel-caption d-none d-md-block text-start start-0 bottom-0 w-100 p-5 bg-gradient-dark">
            <span class="badge bg-primary mb-2">Design Trend</span>
            <h2 class="fw-bold">Why Minimalism still Dominates UI Design in 2024</h2>
            <p>Exploring the psychological impact of clean interfaces on user conversion rates.</p>
          </div>
        </div>
      </div>
      <button class="carousel-control-prev" type="button" data-bs-target="#trendingCarousel" data-bs-slide="prev">
        <span class="carousel-control-prev-icon bg-dark p-3 rounded-circle"></span>
      </button>
      <button class="carousel-control-next" type="button" data-bs-target="#trendingCarousel" data-bs-slide="next">
        <span class="carousel-control-next-icon bg-dark p-3 rounded-circle"></span>
      </button>
    </div>
  </div>
</section>

<!-- Main Blog Content Section -->
<section class="py-5 bg-light">
  <div class="container">
    <div class="row g-5">
      <!-- ii. Latest Tech/Design Posts -->
      <div class="col-lg-8">
        <h3 class="fw-bold mb-4 border-start border-primary border-4 ps-3">Latest Posts</h3>

        <!-- Blog Post 1 -->
        <article class="card border-0 shadow-sm rounded-4 overflow-hidden mb-5 hover-lift">
          <img src="https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&q=80&w=800" class="card-img-top" alt="Tech Post">
          <div class="card-body p-4 p-md-5">
            <div class="d-flex align-items-center mb-3 text-secondary small">
              <span class="me-3"><i class="bi bi-calendar3 me-1"></i> Oct 24, 2023</span>
              <span class="me-3"><i class="bi bi-person me-1"></i> By Alex Rivera</span>
              <span><i class="bi bi-chat-dots me-1"></i> 15 Comments</span>
            </div>
            <h2 class="card-title fw-bold mb-3 h3">Building Scalable Architecture with Node.js</h2>
            <p class="card-text text-muted mb-4">Learn how to structure your backend projects for growth, performance, and long-term maintainability using enterprise patterns.</p>

            <!-- iv. Post Tags -->
            <div class="mb-4">
              <span class="badge bg-light text-dark border me-1">#NodeJS</span>
              <span class="badge bg-light text-dark border me-1">#Backend</span>
              <span class="badge bg-light text-dark border me-1">#Microservices</span>
            </div>

            <a href="#" class="btn btn-primary rounded-pill px-4">Continue Reading</a>
          </div>
        </article>

        <!-- iv. Comments Section (Preview) -->
        <div class="bg-white p-4 p-md-5 rounded-4 shadow-sm border mb-4">
          <h4 class="fw-bold mb-4">Comments (2)</h4>
          <div class="d-flex mb-4">
            <img src="https://i.pravatar.cc/50?u=1" class="rounded-circle me-3" width="50" height="50" alt="User">
            <div class="bg-light p-3 rounded-3 flex-grow-1">
              <h6 class="fw-bold mb-1">John Doe</h6>
              <p class="small text-muted mb-0">Great insights! I've been struggling with microservices architecture lately, and this cleared up a lot.</p>
            </div>
          </div>
          <div class="text-end">
            <button class="btn btn-outline-primary btn-sm rounded-pill px-4">Leave a Comment</button>
          </div>
        </div>
      </div>

      <!-- iii. Categories Sidebar -->
      <div class="col-lg-4">
        <div class="sticky-top" style="top: 100px;">
          <!-- Search Widget -->
          <div class="card border-0 shadow-sm rounded-4 p-4 mb-4">
            <h5 class="fw-bold mb-3">Find Article</h5>
            <div class="input-group">
              <input type="text" class="form-control rounded-pill-start" placeholder="Keyword...">
              <button class="btn btn-primary rounded-pill-end"><i class="bi bi-search"></i></button>
            </div>
          </div>

          <!-- Categories Widget -->
          <div class="card border-0 shadow-sm rounded-4 p-4 mb-4">
            <h5 class="fw-bold mb-3">Categories</h5>
            <ul class="list-group list-group-flush">
              <li class="list-group-item d-flex justify-content-between align-items-center border-0 px-0 py-2">
                <a href="#" class="text-decoration-none text-dark hover-primary-text"><i class="bi bi-chevron-right me-2 small"></i> Web Development</a>
                <span class="badge bg-primary-subtle text-primary rounded-pill">25</span>
              </li>
              <li class="list-group-item d-flex justify-content-between align-items-center border-0 px-0 py-2">
                <a href="#" class="text-decoration-none text-dark hover-primary-text"><i class="bi bi-chevron-right me-2 small"></i> UI/UX Design</a>
                <span class="badge bg-primary-subtle text-primary rounded-pill">18</span>
              </li>
              <li class="list-group-item d-flex justify-content-between align-items-center border-0 px-0 py-2">
                <a href="#" class="text-decoration-none text-dark hover-primary-text"><i class="bi bi-chevron-right me-2 small"></i> DevOps</a>
                <span class="badge bg-primary-subtle text-primary rounded-pill">09</span>
              </li>
              <li class="list-group-item d-flex justify-content-between align-items-center border-0 px-0 py-2">
                <a href="#" class="text-decoration-none text-dark hover-primary-text"><i class="bi bi-chevron-right me-2 small"></i> Career Tips</a>
                <span class="badge bg-primary-subtle text-primary rounded-pill">12</span>
              </li>
            </ul>
          </div>

          <!-- Tags Widget -->
          <div class="card border-0 shadow-sm rounded-4 p-4">
            <h5 class="fw-bold mb-3">Popular Tags</h5>
            <div class="d-flex flex-wrap gap-2">
              <a href="#" class="btn btn-sm btn-light border px-3 rounded-pill text-dark small">JavaScript</a>
              <a href="#" class="btn btn-sm btn-light border px-3 rounded-pill text-dark small">Figma</a>
              <a href="#" class="btn btn-sm btn-light border px-3 rounded-pill text-dark small">Python</a>
              <a href="#" class="btn btn-sm btn-light border px-3 rounded-pill text-dark small">React</a>
              <a href="#" class="btn btn-sm btn-light border px-3 rounded-pill text-dark small">Azure</a>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>

<style>
  .bg-gradient-dark {
    background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0) 100%);
  }

  .hover-lift {
    transition: transform 0.3s ease-out;
  }

  .hover-lift:hover {
    transform: translateY(-8px);
  }

  .rounded-pill-start {
    border-top-left-radius: 50rem !important;
    border-bottom-left-radius: 50rem !important;
    padding-left: 1.5rem;
  }

  .rounded-pill-end {
    border-top-right-radius: 50rem !important;
    border-bottom-right-radius: 50rem !important;
    padding-right: 1.5rem;
  }

  .hover-primary-text:hover {
    color: #0d6efd !important;
  }

  .object-fit-cover {
    object-fit: cover;
  }

</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 Full Blog Post 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 Full Blog Post 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: Full Blog Post Page

Browser compatibility & standards

The Full Blog Post 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 — Full Blog Post Page (card grid)

When and why to use this card grid

Cards are the workhorse layout unit of modern web design: product tiles, blog teasers, feature lists and pricing tables are all card grids underneath. Bootstrap's .card plus the responsive .row-cols-* utilities give you an equal-height, equal-gutter grid with zero custom CSS, which is exactly what you want when the number of items is dynamic.

Accessibility & ARIA attributes

A card is a container, not a widget, so it needs no ARIA role by default. What it does need is a correct heading level inside (usually <h3> when the section above uses <h2>) and a single unambiguous link. If the whole card should be clickable, use the stretched-link pattern (.stretched-link on the title anchor) rather than wrapping the card in an <a>: it keeps nested buttons focusable and avoids nesting interactive elements, which is invalid HTML and confuses screen readers.

Performance notes for this pattern

Card grids frequently ship dozens of images at once. Add loading="lazy" and decoding="async" to every image below the fold, and pin the aspect ratio with the .ratio utility so late-arriving images don't shift the grid. If your grid can grow past about 50 items, paginate or virtualise it — a 200-card DOM subtree measurably slows scrolling on low-end Android devices.

Three customisation tricks

  • Use .row-cols-1 .row-cols-md-2 .row-cols-lg-3 .g-4 for a grid that reflows cleanly at every breakpoint.
  • Add .h-100 on the inner .card so every card in a row matches the tallest sibling.
  • Swap .card-img-top for a .ratio.ratio-16x9 wrapper to guarantee identical image heights regardless of source dimensions.

Mistakes to avoid

  • Forgetting .h-100, which leaves ragged card bottoms whenever copy lengths differ.
  • Nesting an <a> inside an <a> to make the whole card clickable.

More designs in this section