Opacity utilities set the transparency of a whole element, content included: opacity-100, -75, -50, -25 and -0. Use them for disabled looks, faded thumbnails or decoration; when only a background or border should fade, use bg-opacity-* or border-opacity-* instead.
1Opacity scale
opacity-100, -75, -50, -25 and -0 make the whole element, content included, more transparent - keep text out of strongly faded elements.
<div class="d-flex flex-wrap gap-3 small text-center">
<div>
<div class="bg-primary rounded-3 opacity-100 mb-1" style="width:4rem;height:3rem">
</div>
100
</div>
<div>
<div class="bg-primary rounded-3 opacity-75 mb-1" style="width:4rem;height:3rem">
</div>
75
</div>
<div>
<div class="bg-primary rounded-3 opacity-50 mb-1" style="width:4rem;height:3rem">
</div>
50
</div>
<div>
<div class="bg-primary rounded-3 opacity-25 mb-1" style="width:4rem;height:3rem">
</div>
25
</div>
<div>
<div class="bg-primary rounded-3 opacity-0 border mb-1" style="width:4rem;height:3rem">
</div>
0
</div>
</div>2Opacity versus bg-opacity
opacity-50 fades the text too, bg-opacity-50 fades only the background.
<div class="row g-2">
<div class="col-sm-6">
<figure class="mb-0">
<div inert>
<div class="bg-success text-white rounded-3 p-3 opacity-50 fw-semibold">
opacity-50
</div>
</div>
<figcaption class="small text-body-secondary mt-2 mb-0">The text fades too - here below 4.5:1.</figcaption>
</figure>
</div>
<div class="col-sm-6">
<div class="bg-success bg-opacity-50 rounded-3 p-3 fw-semibold">
bg-opacity-50
</div>
</div>
</div>3Disabled looking card
opacity-50 with pe-none shows an option that is not available yet.
<div class="row g-2">
<div class="col-sm-6">
<div class="border rounded-3 p-3">
<div class="fw-semibold">
Web design
</div>
<div class="small text-body-secondary">
Available
</div>
</div>
</div>
<div class="col-sm-6">
<div class="border rounded-3 p-3 opacity-50 pe-none" role="group" aria-disabled="true">
<div class="fw-semibold">
Content strategy
</div>
<div class="small text-body-secondary">
Coming soon
</div>
</div>
</div>
</div>4Faded image gallery
Non-selected thumbnails at opacity-50, the active one at full opacity.
<div class="d-flex gap-2">
<img src="https://images.unsplash.com/photo-1752650736252-dff5244c8a7a?auto=format&fit=crop&w=800&h=800&q=70" alt="Thumbnail 1" width="80" height="80" class="rounded-3 object-fit-cover border border-2 border-primary"> <img src="https://images.unsplash.com/photo-1787647561978-df268f9e9ec2?auto=format&fit=crop&w=800&h=800&q=70" alt="Thumbnail 2" width="80" height="80" class="rounded-3 object-fit-cover opacity-50"> <img src="https://images.unsplash.com/photo-1753162658407-93888aaabfae?auto=format&fit=crop&w=800&h=800&q=70" alt="Thumbnail 3" width="80" height="80" class="rounded-3 object-fit-cover opacity-50">
</div>5Logo wall
Partner logos at opacity-50 look calm and uniform.
<div class="d-flex flex-wrap justify-content-center align-items-center gap-4">
<img src="../assets/img/logo-1.svg" alt="Partner logo" width="120" class="opacity-50"> <img src="../assets/img/logo-2.svg" alt="Partner logo" width="120" class="opacity-50"> <img src="../assets/img/logo-3.svg" alt="Partner logo" width="120" class="opacity-50"> <img src="../assets/img/logo-4.svg" alt="Partner logo" width="120" class="opacity-50">
</div>6Completed tasks
Done items drop to opacity-75 and get a line through - still readable (opacity-50 text is below 4.5:1).
- Brand identity
- Content strategy
- Brand identity
<ul class="list-unstyled mb-0 d-grid gap-2">
<li class="opacity-75 text-decoration-line-through"><i class="bi bi-check-square-fill" aria-hidden="true"></i> Brand identity</li>
<li class="opacity-75 text-decoration-line-through"><i class="bi bi-check-square-fill" aria-hidden="true"></i> Content strategy</li>
<li><i class="bi bi-square-fill" aria-hidden="true"></i> Brand identity</li>
</ul>7Watermark text
Huge text at opacity-25 behind a heading as a decorative watermark (inert and aria-hidden: decoration has no contrast requirement).
Bold ideas, beautifully executed
Small teams, short feedback loops and no handoffs lost in translation.
<div class="position-relative overflow-hidden rounded-4 bg-body-tertiary p-4">
<div class="position-absolute top-50 start-50 translate-middle display-1 fw-bold text-primary opacity-25 text-nowrap pe-none" aria-hidden="true" inert>
2022
</div>
<h3 class="position-relative h5 fw-semibold mb-1">Bold ideas, beautifully executed</h3>
<p class="position-relative small mb-0">Small teams, short feedback loops and no handoffs lost in translation.</p>
</div>8Muted icons
Decorative icons at opacity-75 or -50 next to labels.
- 147 Harbour Road, Barcelona
- +1 (555) 441-9935
- omar.morgan@example.com
<ul class="list-unstyled mb-0 d-grid gap-2">
<li><span class="opacity-50 me-2"><i class="bi bi-geo-alt-fill" aria-hidden="true"></i></span>147 Harbour Road, Barcelona</li>
<li><span class="opacity-50 me-2"><i class="bi bi-telephone-fill" aria-hidden="true"></i></span>+1 (555) 441-9935</li>
<li><span class="opacity-50 me-2"><i class="bi bi-envelope-fill" aria-hidden="true"></i></span>omar.morgan@example.com</li>
</ul>9Inactive steps
Future steps of a progress indicator at opacity-50, marked aria-disabled until they can be reached.
<div class="d-flex flex-wrap gap-3 small fw-medium">
<span class="d-flex align-items-center gap-1"><span class="badge rounded-pill text-bg-success">1</span> Cart</span> <span class="d-flex align-items-center gap-1"><span class="badge rounded-pill text-bg-primary">2</span> Shipping</span> <span class="d-flex align-items-center gap-1 opacity-50" role="group" aria-disabled="true"><span class="badge rounded-pill text-bg-secondary">3</span> Payment</span> <span class="d-flex align-items-center gap-1 opacity-50" role="group" aria-disabled="true"><span class="badge rounded-pill text-bg-secondary">4</span> Review</span>
</div>10Hidden but taking space
opacity-0 keeps the layout slot, so neighbours do not move.
ABC<div class="d-flex gap-2">
<div class="bg-info-subtle rounded-3 p-3">
<code class="small">A</code>
</div>
<div class="bg-info-subtle rounded-3 p-3 opacity-0">
<code class="small">B</code>
</div>
<div class="bg-info-subtle rounded-3 p-3">
<code class="small">C</code>
</div>
</div>11Image tint over colour
An image at opacity-75 on a bg-primary parent picks up a brand tint.
<div class="bg-primary rounded-4 overflow-hidden" style="max-width:24rem">
<img src="https://images.unsplash.com/photo-1787647559705-d2ad3322020e?auto=format&fit=crop&w=1200&h=800&q=70" alt="Stories told in pixels and motion" class="w-100 d-block opacity-75">
</div>12Secondary actions
Quiet actions next to the main one: a link-style button, and opacity-50 on an action that is not available (a disabled button).
<div class="d-flex flex-wrap gap-2">
<button type="button" class="btn btn-primary">Save</button>
<button type="button" class="btn btn-link link-secondary">Duplicate</button>
<button type="button" class="btn btn-outline-secondary opacity-50" disabled>Archive</button>
</div>13Out of stock products
The sold out item has its picture at opacity-50, a label and its text at opacity-75 (still readable).
<div class="row g-3">
<div class="col-6 col-md-4">
<div class="border rounded-3 p-2">
<img src="../assets/img/product-1.svg" alt="Brand sprint" class="w-100 rounded-2">
<div class="small fw-medium mt-2 text-truncate">
Brand sprint
</div>
<div class="small">
$77.77
</div>
</div>
</div>
<div class="col-6 col-md-4">
<div class="border rounded-3 p-2 position-relative">
<img src="../assets/img/product-2.svg" alt="Website package" class="w-100 rounded-2 opacity-50"><span class="badge text-bg-dark position-absolute top-0 start-0 m-3">Sold out</span>
<div class="small fw-medium mt-2 text-truncate opacity-75">
Website package
</div>
<div class="small opacity-75">
$42.46
</div>
</div>
</div>
</div>14Placeholder skeleton
Rows of bg-body-secondary at opacity-75 sketch content while it loads.
<div class="d-flex gap-3 align-items-center" aria-hidden="true">
<div class="bg-body-secondary rounded-circle opacity-75" style="width:48px;height:48px">
</div>
<div class="flex-grow-1">
<div class="bg-body-secondary rounded-pill mb-2 w-50 opacity-75" style="height:10px">
</div>
<div class="bg-body-secondary rounded-pill w-75 opacity-50" style="height:10px">
</div>
</div>
</div>15Fading list
Older entries step down in opacity to suggest age.
- Design that earns attention
- Creative work with measurable results
- Digital products with personality
- Ideas worth talking about
<figure class="mb-0">
<div inert>
<ol class="list-unstyled mb-0 d-grid gap-1">
<li class="opacity-100">Design that earns attention</li>
<li class="opacity-75">Creative work with measurable results</li>
<li class="opacity-50">Digital products with personality</li>
<li class="opacity-25">Ideas worth talking about</li>
</ol>
</div>
<figcaption class="small text-body-secondary mt-2 mb-0">From opacity-50 down the entries are decoration - below 4.5:1, so link to the full history instead of fading what people must read.</figcaption>
</figure>16Background pattern dots
Large icons at opacity-25 placed in a corner decorate a banner.
Make your next launch unforgettable
Start in minutes and get help from a real person whenever you need it.
<div class="position-relative overflow-hidden text-bg-primary rounded-4 p-4">
<span class="position-absolute top-0 end-0 display-1 opacity-25 me-3" aria-hidden="true"><i class="bi bi-stars" aria-hidden="true"></i></span>
<h3 class="h5 fw-semibold position-relative">Make your next launch unforgettable</h3>
<p class="small mb-0 position-relative">Start in minutes and get help from a real person whenever you need it.</p>
</div>17Unavailable time slots
Booked slots are disabled buttons at opacity-25 among the free slots.
<div class="d-flex flex-wrap gap-2" role="group" aria-label="Time slots">
<button type="button" class="btn btn-sm btn-outline-secondary">09:00</button>
<button type="button" class="btn btn-sm btn-outline-secondary opacity-25" disabled>09:30</button>
<button type="button" class="btn btn-sm btn-outline-secondary">10:00</button>
<button type="button" class="btn btn-sm btn-outline-secondary opacity-25" disabled>10:30</button>
<button type="button" class="btn btn-sm btn-primary" aria-pressed="true">11:00</button>
<button type="button" class="btn btn-sm btn-outline-secondary">11:30</button>
</div>18Subdued footnote
A small footnote at opacity-75 below the main content.
Thousands of clients already trust us, and we work hard to keep it that way. Our team has done this many times, so you never have to guess.
* We keep things simple, so you can focus on what matters to you.
<div>
<p class="mb-1">Thousands of clients already trust us, and we work hard to keep it that way. Our team has done this many times, so you never have to guess.</p>
<p class="small opacity-75 mb-0">* We keep things simple, so you can focus on what matters to you.</p>
</div>19Overlay controls
Controls on top of an image sit on a dark pill at reduced background opacity.
<div class="position-relative rounded-4 overflow-hidden" style="max-width:26rem">
<img src="https://images.unsplash.com/photo-1742440710193-3547e0b9d4db?auto=format&fit=crop&w=1600&h=700&q=70" alt="Five website mistakes that cost you leads" class="w-100 d-block">
<div class="position-absolute bottom-0 start-50 translate-middle-x mb-3 bg-dark bg-opacity-50 rounded-pill px-3 py-1 d-flex gap-3 text-white">
<span><i class="bi bi-skip-backward-fill" aria-hidden="true"></i></span><span><i class="bi bi-play-fill" aria-hidden="true"></i></span><span><i class="bi bi-skip-forward-fill" aria-hidden="true"></i></span>
</div>
</div>20Avatar of inactive member
Members who left the team are shown at opacity-75 - quieter, still readable.
Leo Kim
Elena Hughes (inactive)
<ul class="list-unstyled mb-0 d-grid gap-2">
<li class="d-flex align-items-center gap-2"><img src="../assets/img/avatar-4.svg" alt="" width="32" height="32" class="rounded-circle"><span>Leo Kim</span></li>
<li class="d-flex align-items-center gap-2 opacity-75"><img src="../assets/img/avatar-5.svg" alt="" width="32" height="32" class="rounded-circle"><span>Elena Hughes <small>(inactive)</small></span></li>
</ul>