Canvas HTML Template solves that gap with a dedicated block content system that ships pre-styled, pre-spaced, and ready to drop into any project. The block-content-cards.html demo page is a focused reference for exactly those building blocks: cards in multiple image configurations, text-only card variants, and number-based display elements that suit statistics, counters, and countdown scenarios alike.
Key Takeaways
- Canvas ships a dedicated
block-content-cards.htmldemo page covering five distinct card layout patterns. - Card image position (top, bottom, center) is controlled through class variants, not custom CSS overrides.
- Text-only card variants (center and right alignment) give you clean stat blocks suitable for counters and countdown displays.
- All blocks inherit Canvas CSS custom properties such as
--cnvs-themecolor, so a single token change re-skins every block simultaneously. - Blocks are self-contained HTML sections, making them straightforward to extract into Nunjucks partials or a Vite component workflow.
What the Block Content Cards Demo Actually Covers
The Canvas block content cards demo is not a single card component. It is a curated collection of full-width page sections, each demonstrating a different content presentation pattern. Five named sections appear in the file:
- Card Image Top: the classic Bootstrap card with the image rendered above the text body.
- Card Image Bottom: image placed beneath the text, useful when copy needs to lead the eye before the visual.
- Card Image Center: image floated or absolutely positioned at the mid-point of the card, breaking the top/bottom binary.
- Card Text Center: no image at all. Typography, a stat or counter value, and a supporting label sit centred inside the card frame.
- Card Text Right: a similar text-only block with right-aligned content, used for asymmetric grid rows or pull-quote style layouts.
Each section is a standalone slice of HTML. You can copy one section independently without pulling in dependencies from another. That self-containment is the core promise of a block-based template system.

Card Image Variants: Top, Bottom, and Center
Bootstrap 5 natively supports .card-img-top and .card-img-bottom for basic image placement. Canvas extends this with additional wrapper conventions and spacing utilities so that each variant feels intentional rather than incidental.
Card Image Top is the safest choice for blog post listings, product grids, or team member cards. Browsers render it with a single reflow: the image loads, the text follows, and cumulative layout shift stays minimal. This variant pairs well with the lazy-loading and critical CSS techniques covered in our post on Critical CSS for Bootstrap 5 Templates.
Card Image Bottom works when the textual content carries more decision-making weight than the image. A pricing feature card, for example, might want the headline and bullet list to register before the supporting illustration appears below.
Card Image Center is the most visually distinctive of the three. The image overlaps the card boundary, typically using a negative margin or transform offset, so it appears to float at the midpoint between two stacked cards or between a card and its surrounding section background. This pattern is common in agency showcase pages and SaaS feature grids. It is also the variant most likely to need attention during performance audits: the offset geometry can cause layout shift if the image dimensions are not explicitly set.
<!-- Card Image Top: minimal Canvas structure -->
<div class="card">
<div class="card-image">
<img src="assets/images/feature.jpg" alt="Feature illustration" class="card-img-top">
</div>
<div class="card-body">
<h3 class="card-title">Feature Heading</h3>
<p class="card-text">Supporting description goes here.</p>
</div>
</div>All three image variants are responsive by default. Canvas uses Bootstrap 5’s fluid image classes internally, so no explicit width or height override is needed for standard use. If you need cards to respond to their container width rather than the viewport, see our detailed walkthrough on Container Queries for Reusable Bootstrap 5 Card Components.
Text-Only Cards for Counters and Stats
The Card Text Center and Card Text Right sections serve a different purpose from the image variants. They are designed for numerical or short-form content: statistics blocks, animated counters, countdown timers, or any situation where a large typographic value needs a framed container.
A typical counter card in Canvas places a large numeral (often rendered via a countup.js-compatible data attribute) inside a card body with generous vertical padding. The supporting label sits below in a smaller weight. Because the card has no image DOM element, it renders faster and sidesteps any layout shift associated with image loading.
<!-- Card Text Center: counter / stat block -->
<div class="card text-center">
<div class="card-body py-5">
<h2 class="display-4 fw-bold" style="color: var(--cnvs-themecolor);">
2,400+
</h2>
<p class="text-muted mb-0">Active customers worldwide</p>
</div>
</div>Card Text Right is useful in asymmetric grid layouts where a row pairs a large editorial column on the left with a stacked set of stat cards on the right. Right-aligning the text within each card creates a visual flush against the gutter, reinforcing the sense that the numbers belong together as a group.
Both text card variants inherit --cnvs-themecolor for accent colour. A single CSS variable change in your root styles recolours every highlight across all stat blocks simultaneously, which matters on projects with strict brand colour guidelines.

How Canvas Blocks Differ from Bare Bootstrap 5 Cards
Here is a direct account of what Canvas adds and where raw Bootstrap 5 is sufficient on its own.
Where Canvas adds genuine value:
- Pre-set spacing scales that match the rest of the Canvas design system, so blocks look coherent next to navigation, hero sections, and footers without manual calibration.
- Hover and shadow states already tuned for the card variants, saving several iterations of box-shadow adjustments.
- Full-section wrappers with background colour helpers, so each block can sit on a white, light, dark, or custom background without writing new utility combinations.
- Integration with
plugins.min.jsandfunctions.bundle.js, meaning animated counter behaviour attaches automatically when the relevant data attributes are present.
Where raw Bootstrap 5 may be enough:
- Internal tools or admin panels where visual polish is secondary to functional completeness.
- Projects already using a separate design system with its own card tokens.
- Single-purpose landing pages with only one or two card instances.
For multi-page marketing sites, agency portfolios, and SaaS products, the Canvas block system consistently reduces build time because the design decisions are already made and tested across 50-plus live demos.
Composing Blocks into Real Pages
The real productivity gain from a block-based system emerges when you start stacking sections. A typical Canvas features page might combine a hero section, a Card Image Top grid for product highlights, a Card Text Center row for key statistics, and a Card Image Bottom section for a case study preview. Because each block is a self-contained HTML section with its own background and spacing, the vertical rhythm composes naturally without custom glue CSS between sections.
These blocks are also ideal candidates for partials in a templating workflow. A Nunjucks setup, for example, lets you include the counter section across multiple pages with a single macro call. The post on Splitting a Large HTML Template Into Reusable Partials with Nunjucks explains the extraction process in detail.
For teams using Vite, the build step can bundle only the CSS and JS actually referenced by the active partials, keeping the production payload lean. The Canvas block sections contain no extraneous scripts, so tree-shaking via a modern bundler is straightforward.
Theming and Customisation
Canvas relies on CSS custom properties throughout its stylesheet. Every block section on the block-content-cards.html page respects the same token set. To rebrand all cards for a new client, a developer typically needs to update three to five root variables rather than hunting through dozens of selector rules:
<style>
:root {
--cnvs-themecolor: #7b2ff7; / primary accent /
--cnvs-themecolor-rgb: 123,47,247; / RGB variant for rgba() use /
}
</style>This approach keeps client-specific overrides isolated from the template core, which matters for long-term maintainability. If you follow a Git branching strategy for template projects, your customisation layer stays in a separate file and merges cleanly when Canvas releases an update.
Frequently Asked Questions
The block content demo is part of the Canvas HTML Template, which is distributed as a complete package on ThemeForest. Individual blocks are not sold separately. The full template includes over 50 live demos, all sharing the same design system, so the card blocks represent a small portion of the overall value.
The card structure itself is pure HTML and CSS. The animated countup behaviour, where a number increments on scroll into view, is handled by Canvas’s plugins.min.js bundle when the appropriate data attributes are present. If JavaScript is disabled or unavailable, the static numeral still displays correctly inside the card body.
Canvas reserves space for the offset image using explicit aspect-ratio constraints or min-height values on the card wrapper. This means the browser knows the card’s dimensions before the image finishes loading, preventing a visible reflow. For best results, include explicit width and height attributes on the <img> tag.
Yes, provided the markup follows the standard heading hierarchy. Canvas uses semantic HTML within card bodies: the large numeral is wrapped in an appropriate heading tag and the label sits in a paragraph element. No ARIA attributes are required for basic counter cards, though animated counters should include a static accessible label via aria-label for compliance with WCAG 2.1 AA.
Yes. Bootstrap 5’s grid allows different card types within a single .row. A common pattern is pairing two Card Image Top columns with one Card Text Center column in a three-column row. The only requirement is that card heights match across the row. Canvas applies Bootstrap’s .h-100 stretch utility by default on block sections so cards in the same row reach equal height without additional CSS.
Looking for a production-ready Bootstrap 5 HTML template? Browse Canvas Template demos and find the perfect starting point for your next project.
If you’re building with the Canvas HTML Template and want to ship production-ready Bootstrap 5 layouts faster, try Canvas Builder free — the visual builder that exports clean Canvas-ready markup in minutes.
Skip the setup and build it free
Spin up a complete Bootstrap 5 site, blog included, with Canvas Builder. No coding, no cost.
Rohit S
Rohit S builds Canvas at SemiColonWeb, the team behind the Canvas HTML Template, CanvasWP and CanvasBuilder AI.
More from the Canvas Blog