Stretched Link
A stretched link makes its whole containing block clickable, so a card, list row or tile behaves like one big link. The nearest parent with position: relative (such as a card or position-relative) decides how far the clickable area reaches.
1Card with a stretched button
The button link stretches over the whole card; the dashed outline marks the clickable area.
<div class="card hp-hit" style="max-width:18rem">
<img src="https://images.unsplash.com/photo-1758691737124-05c5bffe46f0?auto=format&fit=crop&w=1200&h=800&q=70" class="card-img-top" alt="">
<div class="card-body">
<h3 class="h6 card-title">Team analytics</h3>
<p class="card-text small">Teams report saving around five hours a week after the first month.</p>
<a href="#" class="btn btn-primary btn-sm stretched-link">Explore</a>
</div>
</div>2Card title as the link
Putting stretched-link on the title link makes the heading the accessible name of the whole card.
<div class="card hp-hit" style="max-width:22rem">
<div class="card-body">
<span class="badge text-bg-light border mb-2">tutorial</span>
<h3 class="h6"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">The real cost of switching between tools</a></h3>
<p class="small text-body-secondary mb-0">Oct 13, 2025</p>
</div>
</div>3Media object
A d-flex row with position-relative so the link covers the image and the text.
A beginner's guide to getting started
Your data is encrypted, backed up daily and hosted in the region you choose.
Continue reading<div class="d-flex position-relative gap-3 hp-hit p-2 rounded">
<img src="https://images.unsplash.com/photo-1554902843-260acd0993f8?auto=format&fit=crop&w=1200&h=800&q=70" alt="" width="120" height="80" class="rounded flex-shrink-0 object-fit-cover">
<div>
<h3 class="h6 mb-1">A beginner's guide to getting started</h3>
<p class="small mb-1">Your data is encrypted, backed up daily and hosted in the region you choose.</p>
<a href="#" class="stretched-link small">Continue reading</a>
</div>
</div>4Column as the containing block
Grid columns are not positioned, so add position-relative to the column you want to be clickable.
Only this column is clickable
Clear reports turn weekly numbers into decisions in minutes, not days.
Open article<div class="row g-0 bg-body-tertiary rounded overflow-hidden">
<div class="col-md-5">
<img src="https://images.unsplash.com/photo-1742440710136-1976b1cad864?auto=format&fit=crop&w=1200&h=800&q=70" alt="" class="w-100 h-100 object-fit-cover" style="min-height:10rem">
</div>
<div class="col-md-7 p-3 position-relative hp-hit">
<h3 class="h6">Only this column is clickable</h3>
<p class="small">Clear reports turn weekly numbers into decisions in minutes, not days.</p>
<a href="#" class="stretched-link">Open article</a>
</div>
</div>5Product tiles
Shop tiles where the whole card opens the product page.
<div class="row g-3">
<div class="col-md-4">
<div class="card h-100 hp-hit">
<img src="../assets/img/product-3.svg" class="card-img-top" alt="">
<div class="card-body">
<h3 class="h6 mb-1"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Business plan</a></h3>
<span class="fw-semibold">$52.00</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 hp-hit">
<img src="../assets/img/product-11.svg" class="card-img-top" alt="">
<div class="card-body">
<h3 class="h6 mb-1"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">API boost</a></h3>
<span class="fw-semibold">$41.00</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 hp-hit">
<img src="../assets/img/product-5.svg" class="card-img-top" alt="">
<div class="card-body">
<h3 class="h6 mb-1"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Analytics add-on</a></h3>
<span class="fw-semibold">$11.00</span>
</div>
</div>
</div>
</div>6Notification rows
List group items are already positioned, so each row is clickable with one stretched link.
yesterday
2 min ago
<div class="list-group">
<div class="list-group-item d-flex gap-3">
<span class="text-primary"><i class="bi bi-chat-left-dots-fill" aria-hidden="true"></i></span>
<div>
<a href="#" class="stretched-link link-body-emphasis text-decoration-none fw-semibold small">Five things we learned this year</a>
<p class="small text-body-secondary mb-0">yesterday</p>
</div>
</div>
<div class="list-group-item d-flex gap-3">
<span class="text-primary"><i class="bi bi-bag-check-fill" aria-hidden="true"></i></span>
<div>
<a href="#" class="stretched-link link-body-emphasis text-decoration-none fw-semibold small">Writing status updates people actually read</a>
<p class="small text-body-secondary mb-0">2 days ago</p>
</div>
</div>
<div class="list-group-item d-flex gap-3">
<span class="text-primary"><i class="bi bi-chat-left-dots-fill" aria-hidden="true"></i></span>
<div>
<a href="#" class="stretched-link link-body-emphasis text-decoration-none fw-semibold small">Five things we learned this year</a>
<p class="small text-body-secondary mb-0">2 min ago</p>
</div>
</div>
</div>7Team member cards
Profile cards that open the member page from anywhere on the card.
<div class="row g-3">
<div class="col-6 col-md-4">
<div class="card text-center h-100">
<div class="card-body">
<img src="../assets/img/avatar-10.svg" alt="" width="72" height="72" class="rounded-circle mb-2">
<h3 class="h6 mb-0"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Ruby Lindqvist</a></h3>
<small class="text-body-secondary">Finance Lead</small>
</div>
</div>
</div>
<div class="col-6 col-md-4">
<div class="card text-center h-100">
<div class="card-body">
<img src="../assets/img/avatar-6.svg" alt="" width="72" height="72" class="rounded-circle mb-2">
<h3 class="h6 mb-0"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Maya Patel</a></h3>
<small class="text-body-secondary">Customer Success</small>
</div>
</div>
</div>
<div class="col-6 col-md-4">
<div class="card text-center h-100">
<div class="card-body">
<img src="../assets/img/avatar-4.svg" alt="" width="72" height="72" class="rounded-circle mb-2">
<h3 class="h6 mb-0"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Felix Whitaker</a></h3>
<small class="text-body-secondary">Data Analyst</small>
</div>
</div>
</div>
</div>8Horizontal blog card
A horizontal card layout with the stretched link in the body.
What we learned shipping 200 releases
Start free, upgrade when you grow and cancel any time with one click.
<div class="card overflow-hidden hp-hit">
<div class="row g-0">
<div class="col-4">
<img src="https://images.unsplash.com/photo-1531545514256-b1400bc00f31?auto=format&fit=crop&w=1200&h=800&q=70" alt="" class="w-100 h-100 object-fit-cover">
</div>
<div class="col-8">
<div class="card-body">
<h3 class="h6"><a href="#" class="stretched-link link-body-emphasis">What we learned shipping 200 releases</a></h3>
<p class="small mb-0 d-none d-sm-block">Start free, upgrade when you grow and cancel any time with one click.</p>
</div>
</div>
</div>
</div>9Pricing card
The plan card selects the plan wherever you click.
<div class="card border-primary hp-hit" style="max-width:18rem">
<div class="card-body text-center">
<h3 class="h6 text-uppercase text-primary">Starter</h3>
<p class="display-6 mb-0">$22.99</p>
<p class="small text-body-secondary">per month</p>
<a href="#" class="btn btn-outline-primary w-100 stretched-link">Select Starter</a>
</div>
</div>10Feature tiles
Bordered feature tiles made clickable with a position-relative wrapper.
<div class="row g-3">
<div class="col-md-4">
<div class="position-relative border rounded-3 p-3 h-100">
<span class="fs-3 text-primary"><i class="bi bi-lightning-charge-fill" aria-hidden="true"></i></span>
<h3 class="h6 mt-2">Audit trail</h3>
<p class="small mb-0">Real-time dashboards show what is on track and what needs attention.</p>
<a href="#" class="stretched-link" aria-label="Learn more about this feature"></a>
</div>
</div>
<div class="col-md-4">
<div class="position-relative border rounded-3 p-3 h-100">
<span class="fs-3 text-primary"><i class="bi bi-shield-check" aria-hidden="true"></i></span>
<h3 class="h6 mt-2">Open API</h3>
<p class="small mb-0">Automations take care of the repetitive steps, so people can focus on real work.</p>
<a href="#" class="stretched-link" aria-label="Learn more about this feature"></a>
</div>
</div>
<div class="col-md-4">
<div class="position-relative border rounded-3 p-3 h-100">
<span class="fs-3 text-primary"><i class="bi bi-graph-up-arrow" aria-hidden="true"></i></span>
<h3 class="h6 mt-2">99.99% uptime</h3>
<p class="small mb-0">Set up in an afternoon, connect the tools you use and invite your team.</p>
<a href="#" class="stretched-link" aria-label="Learn more about this feature"></a>
</div>
</div>
</div>11Search results
Each result block is one large target, handy on touch screens.
A beginner's guide to getting started
Onboarding guides and live chat help new colleagues get going on day one.
What our customers asked us most
Clear prices, honest advice and no surprises along the way.
A practical guide to async work
Friendly people answer your questions quickly, by phone, chat or email.
<div class="vstack gap-3">
<div class="position-relative">
<small class="text-success">yaraen-craft.example/release</small>
<h3 class="h6 mb-1"><a href="#" class="stretched-link">A beginner's guide to getting started</a></h3>
<p class="small text-body-secondary mb-0">Onboarding guides and live chat help new colleagues get going on day one.</p>
</div>
<div class="position-relative">
<small class="text-success">yaraen-craft.example/story</small>
<h3 class="h6 mb-1"><a href="#" class="stretched-link">What our customers asked us most</a></h3>
<p class="small text-body-secondary mb-0">Clear prices, honest advice and no surprises along the way.</p>
</div>
<div class="position-relative">
<small class="text-success">yaraen-craft.example/process</small>
<h3 class="h6 mb-1"><a href="#" class="stretched-link">A practical guide to async work</a></h3>
<p class="small text-body-secondary mb-0">Friendly people answer your questions quickly, by phone, chat or email.</p>
</div>
</div>12File tiles
File cards in a drive view open the file from anywhere on the tile.
<div class="row g-2">
<div class="col-6 col-md-3">
<div class="position-relative border rounded p-3 text-center">
<span class="fs-2 text-danger"><i class="bi bi-filetype-pdf" aria-hidden="true"></i></span><a href="#" class="stretched-link d-block small text-truncate link-body-emphasis text-decoration-none">update-22</a>
</div>
</div>
<div class="col-6 col-md-3">
<div class="position-relative border rounded p-3 text-center">
<span class="fs-2 text-success"><i class="bi bi-filetype-xlsx" aria-hidden="true"></i></span><a href="#" class="stretched-link d-block small text-truncate link-body-emphasis text-decoration-none">release-7</a>
</div>
</div>
<div class="col-6 col-md-3">
<div class="position-relative border rounded p-3 text-center">
<span class="fs-2 text-warning"><i class="bi bi-filetype-pptx" aria-hidden="true"></i></span><a href="#" class="stretched-link d-block small text-truncate link-body-emphasis text-decoration-none">routine-14</a>
</div>
</div>
<div class="col-6 col-md-3">
<div class="position-relative border rounded p-3 text-center">
<span class="fs-2 text-info"><i class="bi bi-file-earmark-image-fill" aria-hidden="true"></i></span><a href="#" class="stretched-link d-block small text-truncate link-body-emphasis text-decoration-none">process-10</a>
</div>
</div>
</div>13Event card with date block
A date badge, title and place in one clickable card.
Our favourite tips for busy weeks
Auckland · 13:30<div class="card hp-hit" style="max-width:24rem">
<div class="card-body d-flex gap-3">
<div class="text-bg-primary rounded text-center px-3 py-2">
<small class="d-block">NOV</small><strong class="fs-4">21</strong>
</div>
<div>
<h3 class="h6 mb-1"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Our favourite tips for busy weeks</a></h3>
<small class="text-body-secondary"><i class="bi bi-geo-alt-fill" aria-hidden="true"></i> Auckland · 13:30</small>
</div>
</div>
</div>14Inbox rows
Message rows where the sender link stretches across the full row.
- Aria Carter08:00
Seven automations every team should set up
- Isla Moreau09:00
The small habits that make a big difference
- Nora Quinn17:15
How to choose the right plan
<ul class="list-group">
<li class="list-group-item list-group-item-action d-flex gap-3 align-items-start"><img src="../assets/img/avatar-4.svg" alt="" width="36" height="36" class="rounded-circle"><div class="flex-grow-1"><a href="#" class="stretched-link text-decoration-none link-body-emphasis fw-semibold small">Aria Carter</a><p class="small text-body-secondary mb-0">Seven automations every team should set up</p></div><small class="text-body-secondary text-nowrap">08:00</small></li>
<li class="list-group-item list-group-item-action d-flex gap-3 align-items-start"><img src="../assets/img/avatar-11.svg" alt="" width="36" height="36" class="rounded-circle"><div class="flex-grow-1"><a href="#" class="stretched-link text-decoration-none link-body-emphasis fw-semibold small">Isla Moreau</a><p class="small text-body-secondary mb-0">The small habits that make a big difference</p></div><small class="text-body-secondary text-nowrap">09:00</small></li>
<li class="list-group-item list-group-item-action d-flex gap-3 align-items-start"><img src="../assets/img/avatar-4.svg" alt="" width="36" height="36" class="rounded-circle"><div class="flex-grow-1"><a href="#" class="stretched-link text-decoration-none link-body-emphasis fw-semibold small">Nora Quinn</a><p class="small text-body-secondary mb-0">How to choose the right plan</p></div><small class="text-body-secondary text-nowrap">17:15</small></li>
</ul>15Limiting the clickable area
Only the inner box has position-relative, so the stretched link covers it and not the outer card.
This text is outside the clickable area.
<div class="card">
<div class="card-body">
<p class="small text-body-secondary">This text is outside the clickable area.</p>
<div class="position-relative bg-body-tertiary rounded p-3 hp-hit">
<strong class="d-block">Workflow automation</strong> <a href="#" class="stretched-link small">Open</a>
</div>
</div>
</div>16Category image tiles
Image tiles with an overlay caption; the caption link opens the category.
<div class="row g-2">
<div class="col-md-4">
<div class="position-relative rounded-3 overflow-hidden">
<img src="https://images.unsplash.com/photo-1690264351371-b75a9a9bdbdd?auto=format&fit=crop&w=800&h=800&q=70" alt="" class="w-100 object-fit-cover" style="height:9rem">
<div class="position-absolute bottom-0 start-0 end-0 p-2" style="background:rgba(0,0,0,.5)">
<a href="#" class="stretched-link link-light fw-semibold text-decoration-none">Support</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="position-relative rounded-3 overflow-hidden">
<img src="https://images.unsplash.com/photo-1531545514256-b1400bc00f31?auto=format&fit=crop&w=800&h=800&q=70" alt="" class="w-100 object-fit-cover" style="height:9rem">
<div class="position-absolute bottom-0 start-0 end-0 p-2" style="background:rgba(0,0,0,.5)">
<a href="#" class="stretched-link link-light fw-semibold text-decoration-none">Sales</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="position-relative rounded-3 overflow-hidden">
<img src="https://images.unsplash.com/photo-1690264421892-46e3af5c3455?auto=format&fit=crop&w=800&h=800&q=70" alt="" class="w-100 object-fit-cover" style="height:9rem">
<div class="position-absolute bottom-0 start-0 end-0 p-2" style="background:rgba(0,0,0,.5)">
<a href="#" class="stretched-link link-light fw-semibold text-decoration-none">Product</a>
</div>
</div>
</div>
</div>17Course card with progress
A learning card that resumes the course from anywhere on the card.
API integrations
<div class="card hp-hit" style="max-width:20rem">
<div class="card-body">
<h3 class="h6"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">API integrations</a></h3>
<div class="progress mb-1" role="progressbar" aria-label="Course progress" aria-valuenow="21" aria-valuemin="0" aria-valuemax="100" style="--bs-progress-height:.5rem">
<div class="progress-bar" style="width:21%">
</div>
</div>
<small class="text-body-secondary">21% complete</small>
</div>
</div>18Clickable dashboard tiles
Metric tiles that open the matching report.
<div class="row g-2">
<div class="col-md-4">
<div class="card">
<div class="card-body d-flex align-items-center gap-3">
<span class="fs-3 text-primary"><i class="bi bi-cart-fill" aria-hidden="true"></i></span>
<div>
<div class="fs-5 fw-bold">
7.4k
</div>
<a href="#" class="stretched-link small link-secondary">Orders</a>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body d-flex align-items-center gap-3">
<span class="fs-3 text-primary"><i class="bi bi-people-fill" aria-hidden="true"></i></span>
<div>
<div class="fs-5 fw-bold">
5.2k
</div>
<a href="#" class="stretched-link small link-secondary">Visitors</a>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body d-flex align-items-center gap-3">
<span class="fs-3 text-primary"><i class="bi bi-chat-square-text-fill" aria-hidden="true"></i></span>
<div>
<div class="fs-5 fw-bold">
5.6k
</div>
<a href="#" class="stretched-link small link-secondary">Tickets</a>
</div>
</div>
</div>
</div>
</div>19Job listings
Job rows with the title as the stretched link and the details as plain text.
<div class="list-group">
<div class="list-group-item py-3">
<div class="d-flex flex-wrap justify-content-between gap-2">
<a href="#" class="stretched-link fw-semibold text-decoration-none">Marketing Lead</a><span class="badge text-bg-light border">Full time</span>
</div>
<small class="text-body-secondary">Operations · Lisbon</small>
</div>
<div class="list-group-item py-3">
<div class="d-flex flex-wrap justify-content-between gap-2">
<a href="#" class="stretched-link fw-semibold text-decoration-none">Project Manager</a><span class="badge text-bg-light border">Full time</span>
</div>
<small class="text-body-secondary">Legal · Lisbon</small>
</div>
<div class="list-group-item py-3">
<div class="d-flex flex-wrap justify-content-between gap-2">
<a href="#" class="stretched-link fw-semibold text-decoration-none">Frontend Engineer</a><span class="badge text-bg-light border">Part time</span>
</div>
<small class="text-body-secondary">Customer Support · Montreal</small>
</div>
</div>20Extra link above the stretched link
Give a second link position-relative and z-2 so it sits above the stretched area and stays clickable on its own.
Planning a product launch in six weeks
Every update lands in one place, so nothing gets lost in email threads.
#case study<div class="card hp-hit" style="max-width:22rem">
<div class="card-body">
<h3 class="h6"><a href="#" class="stretched-link link-body-emphasis text-decoration-none">Planning a product launch in six weeks</a></h3>
<p class="small">Every update lands in one place, so nothing gets lost in email threads.</p>
<a href="#" class="badge text-bg-primary text-decoration-none position-relative z-2">#case study</a>
</div>
</div>