Stacks
Stacks are flexbox shortcuts: vstack lines items up vertically, hstack horizontally, and the gap utilities space them evenly. Push an item to the far side with ms-auto and separate groups with a vertical rule.
1Horizontal toolbar
hstack with gap-2 lines up buttons; ms-auto pushes the last group to the far end.
<div class="hstack gap-2 p-2 border rounded bg-body-tertiary">
<button type="button" class="btn btn-sm btn-primary"><i class="bi bi-plus-lg" aria-hidden="true"></i> New</button>
<button type="button" class="btn btn-sm btn-outline-secondary"><i class="bi bi-upload" aria-hidden="true"></i> Import</button>
<div class="vr">
</div>
<button type="button" class="btn btn-sm btn-light" aria-label="Filter"><i class="bi bi-funnel-fill" aria-hidden="true"></i></button>
<button type="button" class="btn btn-sm btn-light ms-auto" aria-label="Settings"><i class="bi bi-gear-fill" aria-hidden="true"></i></button>
</div>2Vertical sign-in form
vstack with gap-3 spaces the fields of a compact form without margin utilities.
<form class="vstack gap-3" style="max-width:22rem">
<div>
<label class="form-label" for="hp-email-1236">Email</label>
<input class="form-control" id="hp-email-1236" type="email" autocomplete="email">
</div>
<div>
<label class="form-label" for="hp-pass-1237">Password</label>
<input class="form-control" id="hp-pass-1237" type="password" autocomplete="current-password">
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
<a class="small text-center" href="#">Forgot your password?</a>
</form>3Profile row
An avatar, a name and role block and a follow button in one hstack.
<div class="hstack gap-3 p-3 border rounded">
<img src="../assets/img/avatar-6.svg" alt="Kai Larsen" width="48" height="48" class="rounded-circle">
<div class="vstack gap-0">
<strong>Kai Larsen</strong> <small class="text-body-secondary">Finance Lead · Edinburgh</small>
</div>
<button type="button" class="btn btn-sm btn-outline-primary ms-auto">Follow</button>
</div>4Notification list
A vstack of notification items, each an hstack of icon, message and time.
<div class="vstack gap-2">
<div class="hstack gap-3 align-items-start p-2 border rounded">
<span class="text-success fs-5"><i class="bi bi-bag-check-fill" aria-hidden="true"></i></span>
<div class="small">
The new free cancellation lets your work organised with friendly support.
</div>
<small class="ms-auto text-nowrap text-body-secondary">just now</small>
</div>
<div class="hstack gap-3 align-items-start p-2 border rounded">
<span class="text-primary fs-5"><i class="bi bi-chat-left-text-fill" aria-hidden="true"></i></span>
<div class="small">
Our guided tours gives complex tasks into simple steps for teams of every size.
</div>
<small class="ms-auto text-nowrap text-body-secondary">5 hours ago</small>
</div>
<div class="hstack gap-3 align-items-start p-2 border rounded">
<span class="text-warning fs-5"><i class="bi bi-exclamation-triangle-fill" aria-hidden="true"></i></span>
<div class="small">
The new local guides lets complex tasks into simple steps on any device.
</div>
<small class="ms-auto text-nowrap text-body-secondary">yesterday</small>
</div>
</div>5Centred button stack
vstack with col-md-5 mx-auto centres full-width buttons, as on a mobile landing screen.
<div class="vstack gap-2 col-md-5 mx-auto">
<button type="button" class="btn btn-primary">Create an account</button>
<button type="button" class="btn btn-outline-secondary">I already have one</button>
<small class="text-center text-body-secondary">Free for 14 days, no card needed</small>
</div>6Stacked feature cards
Cards stacked with vstack gap-3; inside each card an hstack pairs the icon with its text.
Flexible dates
The new flexible dates helps time back in your day from the very first day.
Best price guarantee
The new free cancellation brings the whole team on the same page with friendly support.
24/7 assistance
Our travel insurance lets customers coming back at a fair price.
<div class="vstack gap-3">
<div class="card">
<div class="card-body hstack gap-3">
<span class="fs-3 text-primary"><i class="bi bi-people-fill" aria-hidden="true"></i></span>
<div>
<h3 class="h6 mb-1">Flexible dates</h3>
<p class="small mb-0">The new flexible dates helps time back in your day from the very first day.</p>
</div>
</div>
</div>
<div class="card">
<div class="card-body hstack gap-3">
<span class="fs-3 text-primary"><i class="bi bi-people-fill" aria-hidden="true"></i></span>
<div>
<h3 class="h6 mb-1">Best price guarantee</h3>
<p class="small mb-0">The new free cancellation brings the whole team on the same page with friendly support.</p>
</div>
</div>
</div>
<div class="card">
<div class="card-body hstack gap-3">
<span class="fs-3 text-primary"><i class="bi bi-shield-check" aria-hidden="true"></i></span>
<div>
<h3 class="h6 mb-1">24/7 assistance</h3>
<p class="small mb-0">Our travel insurance lets customers coming back at a fair price.</p>
</div>
</div>
</div>
</div>7Inline subscribe form
An hstack holding an input, a button and a divider link, a common newsletter pattern.
<form class="hstack gap-2">
<label class="visually-hidden" for="hp-q-1238">Email address</label>
<input class="form-control me-auto" id="hp-q-1238" type="email" placeholder="you@example.com">
<button type="submit" class="btn btn-secondary">Subscribe</button>
<div class="vr">
</div>
<button type="reset" class="btn btn-outline-danger">Reset</button>
</form>8Pricing feature list
A vstack of check-mark rows inside a pricing card.
Business
$68.65 / month
<div class="card" style="max-width:22rem">
<div class="card-body vstack gap-2">
<h3 class="h5 mb-0">Business</h3>
<p class="fs-3 fw-bold mb-1">$68.65<small class="fs-6 fw-normal text-body-secondary"> / month</small></p>
<div class="hstack gap-2">
<span class="text-success"><i class="bi bi-check-circle-fill" aria-hidden="true"></i></span>Flexible dates
</div>
<div class="hstack gap-2">
<span class="text-success"><i class="bi bi-check-circle-fill" aria-hidden="true"></i></span>Curated stays
</div>
<div class="hstack gap-2">
<span class="text-success"><i class="bi bi-check-circle-fill" aria-hidden="true"></i></span>Free cancellation
</div>
<div class="hstack gap-2">
<span class="text-success"><i class="bi bi-check-circle-fill" aria-hidden="true"></i></span>Local guides
</div>
<div class="hstack gap-2">
<span class="text-success"><i class="bi bi-check-circle-fill" aria-hidden="true"></i></span>Best price guarantee
</div>
<button type="button" class="btn btn-primary mt-2">Choose plan</button>
</div>
</div>9Footer link row
hstack with flex-wrap and gap-3 for a row of footer links that wraps on narrow screens.
<footer class="hstack flex-wrap gap-3 small border-top pt-3">
<span class="fw-semibold">Brand name 14</span> <a href="#">About</a><a href="#">Careers</a><a href="#">Press</a><a href="#">Help centre</a> <span class="ms-auto text-body-secondary">© 2026</span>
</footer>10Chat bubbles
A vstack where align-self-start and align-self-end place incoming and outgoing messages.
<div class="vstack gap-2">
<div class="px-3 py-2 rounded-3 small bg-body-tertiary align-self-start" style="max-width:80%">
The new best price guarantee gives every detail in view at a fair price.
</div>
<div class="px-3 py-2 rounded-3 small text-bg-primary align-self-end" style="max-width:80%">
Our hotel booking turns new ideas to life for teams of every size.
</div>
<div class="px-3 py-2 rounded-3 small bg-body-tertiary align-self-start" style="max-width:80%">
This calm journey makes the whole team on the same page wherever you are.
</div>
<div class="px-3 py-2 rounded-3 small text-bg-primary align-self-end" style="max-width:80%">
A friendly project lets results you can measure in just a few clicks.
</div>
</div>11Wrapping tag row
hstack plus flex-wrap and gap-1 keeps tags tidy when they run onto a second line.
<div class="hstack flex-wrap gap-1">
<span class="badge rounded-pill text-bg-light border">Culture</span><span class="badge rounded-pill text-bg-light border">Adventure</span><span class="badge rounded-pill text-bg-light border">City</span><span class="badge rounded-pill text-bg-light border">Beach</span><span class="badge rounded-pill text-bg-light border">Mountain</span>
</div>12Settings rows
Each setting is an hstack with the label on the left and a switch pushed right with ms-auto.
<div class="vstack border rounded">
<div class="hstack gap-3 p-3 border-bottom">
<span class="fs-5 text-primary"><i class="bi bi-envelope-fill" aria-hidden="true"></i></span>
<label class="form-check-label" for="hp-switch-1239">Email notifications</label>
<div class="form-check form-switch ms-auto mb-0">
<input class="form-check-input" type="checkbox" role="switch" id="hp-switch-1239" checked>
</div>
</div>
<div class="hstack gap-3 p-3">
<span class="fs-5 text-primary"><i class="bi bi-moon-stars" aria-hidden="true"></i></span>
<label class="form-check-label" for="hp-switch-1240">Dark mode</label>
<div class="form-check form-switch ms-auto mb-0">
<input class="form-check-input" type="checkbox" role="switch" id="hp-switch-1240">
</div>
</div>
</div>13Stats with dividers
An hstack of figures separated by vertical rules.
<div class="hstack gap-3 gap-md-4 p-3 border rounded justify-content-center text-center">
<div>
<div class="fs-4 fw-bold">
1.1k
</div>
<small class="text-body-secondary">Clients</small>
</div>
<div class="vr">
</div>
<div>
<div class="fs-4 fw-bold">
486
</div>
<small class="text-body-secondary">Projects</small>
</div>
<div class="vr">
</div>
<div>
<div class="fs-4 fw-bold">
4.6
</div>
<small class="text-body-secondary">Rating</small>
</div>
</div>14Card meta line
An hstack in a card footer for author, date and a like counter.
How we rebuilt our idea
A smart story connects results you can measure with friendly support.
<div class="card" style="max-width:24rem">
<div class="card-body">
<h3 class="h6">How we rebuilt our idea</h3>
<p class="small mb-0">A smart story connects results you can measure with friendly support.</p>
</div>
<div class="card-footer hstack gap-2 small text-body-secondary">
<img src="../assets/img/avatar-5.svg" alt="" width="24" height="24" class="rounded-circle"> <span>Ravi Brennan</span><span>·</span><span>Oct 13, 2026</span> <span class="ms-auto"><i class="bi bi-heart-fill" aria-hidden="true"></i> 165</span>
</div>
</div>15Order timeline
A vstack of steps, each an hstack of status badge and text.
<div class="vstack gap-3">
<div class="hstack gap-3">
<span class="badge rounded-pill text-bg-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>
<div class="vstack">
<strong class="small">Order placed</strong><small class="text-body-secondary">Jun 22, 2026</small>
</div>
</div>
<div class="hstack gap-3">
<span class="badge rounded-pill text-bg-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>
<div class="vstack">
<strong class="small">Packed</strong><small class="text-body-secondary">Sep 6, 2026</small>
</div>
</div>
<div class="hstack gap-3">
<span class="badge rounded-pill text-bg-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>
<div class="vstack">
<strong class="small">Shipped</strong><small class="text-body-secondary">Sep 21, 2026</small>
</div>
</div>
<div class="hstack gap-3">
<span class="badge rounded-pill text-bg-secondary"><i class="bi bi-clock-fill" aria-hidden="true"></i></span>
<div class="vstack">
<strong class="small">Delivered</strong><small class="text-body-secondary">Expected Dec 7, 2026</small>
</div>
</div>
</div>16Search bar
An hstack combining a search field, a filter select and a button.
<form class="hstack gap-2 flex-wrap flex-sm-nowrap" role="search">
<label class="visually-hidden" for="hp-search-1241">Search</label>
<input class="form-control" id="hp-search-1241" type="search" placeholder="Search culture">
<label class="visually-hidden" for="hp-search-1241-type">Type</label>
<select class="form-select w-auto" id="hp-search-1241-type">
<option>All</option>
<option>Recent</option>
</select>
<button type="submit" class="btn btn-primary"><i class="bi bi-search" aria-hidden="true"></i></button>
</form>17File rows
Attachment rows with icon, name and size, and a download button aligned right.
<div class="vstack gap-2">
<div class="hstack gap-3 p-2 border rounded">
<span class="fs-4 text-danger"><i class="bi bi-filetype-pdf" aria-hidden="true"></i></span>
<div class="vstack">
<span class="small fw-semibold">report-2025.pdf</span><small class="text-body-secondary">565 KB</small>
</div>
<button type="button" class="btn btn-sm btn-light ms-auto" aria-label="Download report"><i class="bi bi-download" aria-hidden="true"></i></button>
</div>
<div class="hstack gap-3 p-2 border rounded">
<span class="fs-4 text-primary"><i class="bi bi-filetype-docx" aria-hidden="true"></i></span>
<div class="vstack">
<span class="small fw-semibold">proposal-2026.docx</span><small class="text-body-secondary">836 KB</small>
</div>
<button type="button" class="btn btn-sm btn-light ms-auto" aria-label="Download proposal"><i class="bi bi-download" aria-hidden="true"></i></button>
</div>
<div class="hstack gap-3 p-2 border rounded">
<span class="fs-4 text-success"><i class="bi bi-filetype-xlsx" aria-hidden="true"></i></span>
<div class="vstack">
<span class="small fw-semibold">budget-2026.xlsx</span><small class="text-body-secondary">472 KB</small>
</div>
<button type="button" class="btn btn-sm btn-light ms-auto" aria-label="Download budget"><i class="bi bi-download" aria-hidden="true"></i></button>
</div>
</div>18Nested stacks
A vstack page section whose header is an hstack: stacks nest freely.
This flexible team lets time back in your day at a fair price.
<section class="vstack gap-3 p-3 border rounded">
<div class="hstack gap-2">
<h3 class="h5 mb-0">Holiday packages</h3>
<span class="badge text-bg-primary">21</span> <a class="ms-auto small" href="#">View all</a>
</div>
<p class="mb-0 small">This flexible team lets time back in your day at a fair price.</p>
<div class="hstack gap-2">
<button type="button" class="btn btn-sm btn-primary">Open</button>
<button type="button" class="btn btn-sm btn-light">Share</button>
</div>
</section>19Gap sizes compared
The same hstack with gap-0, gap-2 and gap-4 to compare spacing.
<div class="vstack gap-3">
<div>
<small class="text-body-secondary">gap-0</small>
<div class="hstack gap-0">
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
</div>
</div>
<div>
<small class="text-body-secondary">gap-2</small>
<div class="hstack gap-2">
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
</div>
</div>
<div>
<small class="text-body-secondary">gap-4</small>
<div class="hstack gap-4">
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
<div class="p-2 bg-primary-subtle border border-primary-subtle rounded small">
Item
</div>
</div>
</div>
</div>20Responsive stack direction
Stacks are vertical on phones and switch to a row from md with flex-md-row.
<div class="vstack flex-md-row gap-3">
<div class="p-3 border rounded flex-fill">
<strong class="d-block"><i class="bi bi-pencil-fill" aria-hidden="true"></i> Plan</strong><small>The new flexible dates keeps complex tasks into simple steps without extra tools.</small>
</div>
<div class="p-3 border rounded flex-fill">
<strong class="d-block"><i class="bi bi-hammer" aria-hidden="true"></i> Build</strong><small>The new local guides lets time back in your day all year round.</small>
</div>
<div class="p-3 border rounded flex-fill">
<strong class="d-block"><i class="bi bi-rocket-takeoff-fill" aria-hidden="true"></i> Launch</strong><small>This smart project lets projects moving forward wherever you are.</small>
</div>
</div>