Color & Background
The text-bg-* helpers set a theme background together with a readable, contrasting text colour in one class. Use them for badges, tiles, banners and status labels when you want the pairing to stay accessible in every colour scheme.
1Every theme colour as a badge
One text-bg-* class sets the background and a contrasting text colour together.
<div class="d-flex flex-wrap gap-2">
<span class="badge text-bg-primary">primary</span><span class="badge text-bg-secondary">secondary</span><span class="badge text-bg-success">success</span><span class="badge text-bg-danger">danger</span><span class="badge text-bg-warning">warning</span><span class="badge text-bg-info">info</span><span class="badge text-bg-light">light</span><span class="badge text-bg-dark">dark</span>
</div>2Coloured cards
text-bg-* on a card colours the whole card and keeps the copy readable.
Content strategy
Clients stay with us for years because we treat their brand like our own.
Content strategy
We have helped more than a hundred companies launch, rebrand and grow online.
Campaign production
We keep things simple, so you can focus on what matters to you.
<div class="row g-3">
<div class="col-md-4">
<div class="card text-bg-primary h-100">
<div class="card-body">
<h3 class="h6 card-title">Content strategy</h3>
<p class="card-text small">Clients stay with us for years because we treat their brand like our own.</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card text-bg-success h-100">
<div class="card-body">
<h3 class="h6 card-title">Content strategy</h3>
<p class="card-text small">We have helped more than a hundred companies launch, rebrand and grow online.</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card text-bg-dark h-100">
<div class="card-body">
<h3 class="h6 card-title">Campaign production</h3>
<p class="card-text small">We keep things simple, so you can focus on what matters to you.</p>
</div>
</div>
</div>
</div>3Announcement banner
A full-width strip with text-bg-warning for a time-limited message.
<div class="text-bg-warning rounded p-3 d-flex flex-wrap align-items-center gap-2">
<span class="fs-5"><i class="bi bi-megaphone-fill" aria-hidden="true"></i></span> <span class="me-auto"><strong>Heads up:</strong> scheduled maintenance on Nov 12, 2026 at 07:15.</span> <a class="btn btn-sm btn-dark" href="#">Details</a>
</div>4Status labels in a table
Invoice states shown with text-bg-* badges in a table cell.
| Invoice | Client | Amount | Status |
|---|---|---|---|
| #ORD-7322 | Ivy Ibrahim | $576.80 | Paid |
| #PO-3488 | Theo Larsen | $871.01 | Pending |
| #INV-9264 | Nadia Quinn | $681.04 | Overdue |
| #INV-9812 | Amara Kowalski | $469.51 | Draft |
<div class="table-responsive">
<table class="table align-middle mb-0">
<thead>
<tr>
<th scope="col">Invoice</th>
<th scope="col">Client</th>
<th scope="col">Amount</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>#ORD-7322</td>
<td>Ivy Ibrahim</td>
<td>$576.80</td>
<td><span class="badge text-bg-success">Paid</span></td>
</tr>
<tr>
<td>#PO-3488</td>
<td>Theo Larsen</td>
<td>$871.01</td>
<td><span class="badge text-bg-warning">Pending</span></td>
</tr>
<tr>
<td>#INV-9264</td>
<td>Nadia Quinn</td>
<td>$681.04</td>
<td><span class="badge text-bg-danger">Overdue</span></td>
</tr>
<tr>
<td>#INV-9812</td>
<td>Amara Kowalski</td>
<td>$469.51</td>
<td><span class="badge text-bg-secondary">Draft</span></td>
</tr>
</tbody>
</table>
</div>5Counters on avatars
Small text-bg-danger pills show unread counts on profile pictures.
<div class="d-flex gap-4">
<div class="position-relative">
<img src="../assets/img/avatar-11.svg" alt="Priya Mensah" width="48" height="48" class="rounded-circle"><span class="position-absolute top-0 start-100 translate-middle badge rounded-pill text-bg-danger">3<span class="visually-hidden"> unread messages</span></span>
</div>
<div class="position-relative">
<img src="../assets/img/avatar-12.svg" alt="Diego Delgado" width="48" height="48" class="rounded-circle"><span class="position-absolute top-0 start-100 translate-middle badge rounded-pill text-bg-danger">8<span class="visually-hidden"> unread messages</span></span>
</div>
<div class="position-relative">
<img src="../assets/img/avatar-8.svg" alt="Maya Hughes" width="48" height="48" class="rounded-circle"><span class="position-absolute top-0 start-100 translate-middle badge rounded-pill text-bg-danger">15<span class="visually-hidden"> unread messages</span></span>
</div>
</div>6Pricing header
A dark header band with text-bg-dark above a light pricing body.
Team
$51.99- Weekly demos
- Weekly demos
<div class="card overflow-hidden" style="max-width:20rem">
<div class="text-bg-dark p-3 text-center">
<h3 class="h6 text-uppercase mb-1">Team</h3>
<span class="display-6">$51.99</span>
</div>
<ul class="list-group list-group-flush small">
<li class="list-group-item">Weekly demos</li>
<li class="list-group-item">Weekly demos</li>
</ul>
</div>7Calendar day chips
Today in text-bg-primary, a booked day in text-bg-info and free days in text-bg-light.
<div class="d-flex flex-wrap gap-2">
<div class="text-bg-light border rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>12</strong>
</div>
<div class="text-bg-light border rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>13</strong>
</div>
<div class="text-bg-primary rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>14</strong>
</div>
<div class="text-bg-light border rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>15</strong>
</div>
<div class="text-bg-info rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>16</strong>
</div>
<div class="text-bg-light border rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>17</strong>
</div>
<div class="text-bg-light border rounded text-center px-3 py-2">
<small class="d-block">Oct</small><strong>18</strong>
</div>
</div>8Checkout steps
Numbered step circles coloured by state: done, current and upcoming.
- Cart
- Address
- 3Payment
- 4Review
<ol class="list-unstyled d-flex flex-wrap gap-3 mb-0">
<li class="d-flex align-items-center gap-2"><span class="rounded-circle d-inline-flex align-items-center justify-content-center fw-semibold text-bg-success" style="width:2rem;height:2rem"><i class="bi bi-check-lg" aria-hidden="true"></i></span>Cart</li>
<li class="d-flex align-items-center gap-2"><span class="rounded-circle d-inline-flex align-items-center justify-content-center fw-semibold text-bg-success" style="width:2rem;height:2rem"><i class="bi bi-check-lg" aria-hidden="true"></i></span>Address</li>
<li class="d-flex align-items-center gap-2" aria-current="step"><span class="rounded-circle d-inline-flex align-items-center justify-content-center fw-semibold text-bg-primary" style="width:2rem;height:2rem">3</span>Payment</li>
<li class="d-flex align-items-center gap-2"><span class="rounded-circle d-inline-flex align-items-center justify-content-center fw-semibold text-bg-secondary" style="width:2rem;height:2rem">4</span>Review</li>
</ol>9Coloured toast
A toast-style message using text-bg-success for the whole box.
<div class="toast show align-items-center text-bg-success border-0" role="status" aria-live="polite" aria-atomic="true">
<div class="d-flex">
<div class="toast-body">
<i class="bi bi-check-circle-fill" aria-hidden="true"></i> Your changes to content strategy were saved.
</div>
<button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>10KPI tiles
Dashboard tiles where each metric gets its own theme background.
<div class="row g-3">
<div class="col-6 col-lg-3">
<div class="text-bg-primary rounded-3 p-3">
<div class="fs-4">
<i class="bi bi-people-fill" aria-hidden="true"></i>
</div>
<div class="fs-4 fw-bold">
636
</div>
<small>Customers</small>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="text-bg-success rounded-3 p-3">
<div class="fs-4">
<i class="bi bi-currency-dollar" aria-hidden="true"></i>
</div>
<div class="fs-4 fw-bold">
4.4k
</div>
<small>Revenue</small>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="text-bg-warning rounded-3 p-3">
<div class="fs-4">
<i class="bi bi-hourglass-split" aria-hidden="true"></i>
</div>
<div class="fs-4 fw-bold">
17.8k
</div>
<small>Waiting</small>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="text-bg-info rounded-3 p-3">
<div class="fs-4">
<i class="bi bi-star-fill" aria-hidden="true"></i>
</div>
<div class="fs-4 fw-bold">
9.8k
</div>
<small>Reviews</small>
</div>
</div>
</div>11Tinted backgrounds
text-bg-* respects --bs-bg-opacity, so one class gives lighter tints of the same colour. Put text on the full colour, labels beside the light tints.
<div class="d-flex flex-wrap gap-3">
<div class="text-center small">
<div class="text-bg-primary rounded mb-1" style="width:4rem;height:2.5rem;--bs-bg-opacity:1">
</div>
100%
</div>
<div class="text-center small">
<div class="text-bg-primary rounded mb-1" style="width:4rem;height:2.5rem;--bs-bg-opacity:0.75">
</div>
75%
</div>
<div class="text-center small">
<div class="text-bg-primary rounded mb-1" style="width:4rem;height:2.5rem;--bs-bg-opacity:0.5">
</div>
50%
</div>
<div class="text-center small">
<div class="text-bg-primary rounded mb-1" style="width:4rem;height:2.5rem;--bs-bg-opacity:0.25">
</div>
25%
</div>
<div class="text-center small">
<div class="text-bg-primary rounded mb-1" style="width:4rem;height:2.5rem;--bs-bg-opacity:0.1">
</div>
10%
</div>
</div>12Profile header
A cover band with text-bg-primary behind a profile name and actions.
Jonah Ortega
Support Specialist · Vancouver<div class="card overflow-hidden">
<div class="text-bg-primary p-4 d-flex flex-wrap align-items-center gap-3">
<img src="../assets/img/avatar-7.svg" alt="Jonah Ortega" width="64" height="64" class="rounded-circle border border-3 border-white">
<div class="me-auto">
<h3 class="h5 mb-0">Jonah Ortega</h3>
<small>Support Specialist · Vancouver</small>
</div>
<button type="button" class="btn btn-light btn-sm">Message</button>
</div>
</div>13Keyboard shortcut legend
text-bg-dark and text-bg-light make neat key caps in a help panel.
- Ctrl + K
- Open search
- Esc
- Close dialog
- ?
- Show shortcuts
<dl class="row small mb-0">
<dt class="col-6 fw-normal"><kbd class="text-bg-dark">Ctrl</kbd> + <kbd class="text-bg-dark">K</kbd></dt>
<dd class="col-6">Open search</dd>
<dt class="col-6 fw-normal"><kbd class="text-bg-light border">Esc</kbd></dt>
<dd class="col-6">Close dialog</dd>
<dt class="col-6 fw-normal"><kbd class="text-bg-light border">?</kbd></dt>
<dd class="col-6 mb-0">Show shortcuts</dd>
</dl>14Sale ribbon on a product
A text-bg-danger label positioned over a product image.
Packaging design
$4,350<div class="card" style="max-width:16rem">
<div class="position-relative">
<img src="../assets/img/product-11.svg" alt="Packaging design" class="card-img-top"> <span class="position-absolute top-0 start-0 m-2 px-2 py-1 rounded small fw-semibold text-bg-danger">-20%</span>
</div>
<div class="card-body">
<h3 class="h6 mb-1">Packaging design</h3>
<span class="fw-bold">$4,350</span>
</div>
</div>15Footer strip
A compact text-bg-dark footer with links that inherit the light text.
<footer class="text-bg-dark rounded p-3 d-flex flex-wrap gap-3 small">
<span>© 2026 Haloia</span> <a class="link-light" href="#">Privacy</a><a class="link-light" href="#">Terms</a><a class="link-light ms-auto" href="#">Contact</a>
</footer>16Activity timeline dots
Coloured icon dots make each activity type easy to spot.
- Five website mistakes that cost you leads2 days ago
- A beginner's guide to getting startedjust now
- Lessons from a year of client workshops7 hours ago
- Choosing colours that sell5 days ago
<ul class="list-unstyled mb-0 vstack gap-3">
<li class="d-flex gap-3"><span class="text-bg-success rounded-circle d-inline-flex align-items-center justify-content-center flex-shrink-0" style="width:2rem;height:2rem"><i class="bi bi-check-lg" aria-hidden="true"></i></span><div><strong class="d-block small">Five website mistakes that cost you leads</strong><small class="text-body-secondary">2 days ago</small></div></li>
<li class="d-flex gap-3"><span class="text-bg-info rounded-circle d-inline-flex align-items-center justify-content-center flex-shrink-0" style="width:2rem;height:2rem"><i class="bi bi-chat-fill" aria-hidden="true"></i></span><div><strong class="d-block small">A beginner's guide to getting started</strong><small class="text-body-secondary">just now</small></div></li>
<li class="d-flex gap-3"><span class="text-bg-warning rounded-circle d-inline-flex align-items-center justify-content-center flex-shrink-0" style="width:2rem;height:2rem"><i class="bi bi-pencil-fill" aria-hidden="true"></i></span><div><strong class="d-block small">Lessons from a year of client workshops</strong><small class="text-body-secondary">7 hours ago</small></div></li>
<li class="d-flex gap-3"><span class="text-bg-secondary rounded-circle d-inline-flex align-items-center justify-content-center flex-shrink-0" style="width:2rem;height:2rem"><i class="bi bi-clock-fill" aria-hidden="true"></i></span><div><strong class="d-block small">Choosing colours that sell</strong><small class="text-body-secondary">5 days ago</small></div></li>
</ul>17Kanban card priorities
Priority labels in text-bg-* on small task cards.
<div class="row g-2">
<div class="col-sm-4">
<div class="border rounded p-2 small">
<span class="badge text-bg-danger mb-1">High</span>
<div>
How we ran a rebrand in eight weeks
</div>
</div>
</div>
<div class="col-sm-4">
<div class="border rounded p-2 small">
<span class="badge text-bg-warning mb-1">Medium</span>
<div>
How to choose the right project
</div>
</div>
</div>
<div class="col-sm-4">
<div class="border rounded p-2 small">
<span class="badge text-bg-info mb-1">Low</span>
<div>
Our favourite tips for busy weeks
</div>
</div>
</div>
</div>18Chat bubbles
Incoming messages in text-bg-light, your own messages in text-bg-primary.
<div class="vstack gap-2">
<div class="text-bg-light border align-self-start rounded-4 px-3 py-2 small" style="max-width:80%">
We test early with real users, so the final design works on the first day.
</div>
<div class="text-bg-primary align-self-end rounded-4 px-3 py-2 small" style="max-width:80%">
Friendly people answer your questions quickly, by phone, chat or email.
</div>
<div class="text-bg-light border align-self-start rounded-4 px-3 py-2 small" style="max-width:80%">
Every detail is handled by people who care about getting it right.
</div>
<div class="text-bg-primary align-self-end rounded-4 px-3 py-2 small" style="max-width:80%">
We measure success in sign-ups, sales and brand recall, not just awards.
</div>
</div>19List group highlights
text-bg-* on individual list items to flag the selected and the problem rows.
- UX research
- Motion graphics (selected)
- Web design
- Campaign production (failed)
<ul class="list-group">
<li class="list-group-item">UX research</li>
<li class="list-group-item text-bg-primary" aria-current="true">Motion graphics (selected)</li>
<li class="list-group-item">Web design</li>
<li class="list-group-item text-bg-danger">Campaign production (failed)</li>
</ul>20Code chip
Inline file names and commands on a text-bg-dark chip inside running text.
Run npm run build and upload the
dist folder to your server.
<p class="mb-0">Run <code class="text-bg-dark rounded px-2 py-1">npm run build</code> and upload the <span class="text-bg-secondary rounded px-2 py-1 small font-monospace">dist</span> folder to your server.</p>