Bootstrap 5 Cheatsheet
Getting Started
<!-- CSS (CDN) -->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
rel="stylesheet">
<!-- JS (Popper + Bootstrap JS, needed for interactive components) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
Basic page scaffold
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap 5 App</title>
<link href=".../bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">Hello, Bootstrap!</div>
<script src=".../bootstrap.bundle.min.js"></script>
</body>
</html>
Breakpoints & Containers
Breakpoints
Infix | ≥ px | Example usage |
---|---|---|
(none) | 0 | .col-6 , .d-block |
sm |
576 | .col-sm-6 , .d-sm-flex |
md |
768 | .col-md-4 , .text-md-start |
lg |
992 | .col-lg-3 , .d-lg-none |
xl |
1200 | .col-xl-2 , .p-xl-5 |
xxl |
1400 | .col-xxl-1 , .container-xxl |
Containers
<div class="container">...</div> <!-- responsive fixed widths -->
<div class="container-sm">...</div> <!-- min-width: 576px -->
<div class="container-md">...</div>
<div class="container-lg">...</div>
<div class="container-xl">...</div>
<div class="container-xxl">...</div>
<div class="container-fluid">...</div> <!-- always 100% width -->
Grid System (12-column)
Basic
<div class="container">
<div class="row">
<div class="col">1/3</div>
<div class="col">1/3</div>
<div class="col">1/3</div>
</div>
<div class="row">
<div class="col-4 col-md-3">Fixed cols</div>
<div class="col-8 col-md-9">Fixed cols</div>
</div>
</div>
Auto & Equal widths
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
<div class="col">...</div>
<div class="col">...</div>
<div class="col">...</div>
</div>
Gutters & No-gutter
<div class="row g-0">...</div> <!-- no gutters -->
<div class="row g-1">...</div> <!-- 0.25rem -->
<div class="row gx-4 gy-2">...</div> <!-- x/y gutters -->
Ordering & Offsetting
<div class="row">
<div class="col order-2 order-md-1">First visually (md+)</div>
<div class="col order-1 order-md-2">Second (md+)</div>
</div>
<div class="row">
<div class="col-4 offset-2">offset-2</div>
</div>
Alignment
<div class="row align-items-center justify-content-between">
<div class="col-4">A</div>
<div class="col-4">B</div>
</div>
Spacing Utilities
m|p{t|b|s|e|x|y}-{0..5}
(margin/padding; s=start, e=end; x=left+right, y=top+bottom)
Display, Flex, Grid, Order
Display
Flexbox
<div class="d-flex flex-column flex-md-row align-items-center justify-content-between gap-3">
<div class="order-2 order-md-1">One</div>
<div class="order-1 order-md-2">Two</div>
</div>
Stacks
<div class="vstack gap-2">
<div>Item</div>
<div>Item</div>
</div>
<div class="hstack gap-2">
<button class="btn btn-primary">Save</button>
<div class="vr"></div>
<a class="btn btn-link">Cancel</a>
</div>
CSS Grid helpers
<div class="d-grid gap-3">
<button class="btn btn-primary">Full width</button>
<button class="btn btn-outline-secondary">Full width</button>
</div>
<div class="d-grid gap-2 d-md-block">
<button class="btn btn-primary">Auto width (md+)</button>
</div>
Typography
<p class="h1">Heading style h1</p>
<h1 class="display-1">Display 1</h1>
<p class="lead">Lead paragraph</p>
<p class="fs-6 fw-bold fst-italic lh-lg text-muted">font-size/weight/style/line-height</p>
<p class="text-start text-md-center text-uppercase">responsive align & transform</p>
<p class="text-truncate" style="max-width: 240px;">Long text will truncate…</p>
Colors & Backgrounds
Text: text-{primary|secondary|success|danger|warning|info|light|dark|body|muted|white|black-50|white-50}
Background: bg-{primary|...}
, bg-gradient
Borders: border
, border-top
, border-{0|1|2|3|4|5}
, border-{primary|...}
<div class="p-3 text-bg-primary rounded">text-bg-primary</div>
<div class="p-3 bg-warning text-dark">Warning</div>
Sizing & Position
<img class="w-25 h-100" alt="">
<div class="min-vh-100">full viewport height</div>
<div class="position-relative">
<div class="position-absolute top-0 end-0 translate-middle">Badge</div>
</div>
<div class="fixed-top">...</div>
<div class="sticky-top">...</div>
Buttons
<button class="btn btn-primary">Primary</button>
<button class="btn btn-outline-secondary">Outline</button>
<button class="btn btn-success btn-lg">Large</button>
<button class="btn btn-danger btn-sm" disabled>Disabled</button>
<div class="d-grid gap-2">
<button class="btn btn-primary">Block (grid)</button>
</div>
Button groups
<div class="btn-group" role="group" aria-label="Basic">
<button class="btn btn-outline-primary">Left</button>
<button class="btn btn-outline-primary">Middle</button>
<button class="btn btn-outline-primary">Right</button>
</div>
Images & Figures
<img src="..." class="img-fluid rounded" alt="">
<img src="..." class="img-thumbnail" alt="">
<figure class="figure">
<img src="..." class="figure-img img-fluid rounded" alt="">
<figcaption class="figure-caption text-end">Caption</figcaption>
</figure>
Tables
<table class="table table-striped table-hover align-middle">
<thead class="table-dark">
<tr><th>#</th><th>First</th><th>Last</th></tr>
</thead>
<tbody>
<tr><td>1</td><td>Mark</td><td>Otto</td></tr>
</tbody>
</table>
<!-- Variants: .table-{primary|secondary|success|danger|warning|info|light|dark} -->
<!-- .table-sm, .table-bordered, .table-borderless, .table-striped-columns -->
Forms
<form class="row g-3">
<div class="col-md-6">
<label class="form-label">Email</label>
<input type="email" class="form-control" placeholder="name@example.com">
</div>
<div class="col-md-6">
<label class="form-label">Password</label>
<input type="password" class="form-control">
</div>
<div class="col-12">
<label class="form-label">Select</label>
<select class="form-select">
<option>One</option><option>Two</option>
</select>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="chk">
<label class="form-check-label" for="chk">Remember me</label>
</div>
</div>
<div class="col-12">
<button class="btn btn-primary">Submit</button>
</div>
</form>
Form text / validation
<input class="form-control is-valid">
<div class="valid-feedback">Looks good!</div>
<input class="form-control is-invalid">
<div class="invalid-feedback">Please provide a valid value.</div>
<div class="form-text">We'll never share your email.</div>
Input groups
<div class="input-group">
<span class="input-group-text">@</span>
<input type="text" class="form-control" placeholder="username">
<button class="btn btn-outline-secondary" type="button">Go</button>
</div>
Floating labels
<div class="form-floating">
<input type="email" class="form-control" id="fEmail" placeholder="name@example.com">
<label for="fEmail">Email address</label>
</div>
Switches & ranges
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="sw">
<label class="form-check-label" for="sw">Enable</label>
</div>
<input type="range" class="form-range" min="0" max="5" step="1">
Nav, Navbar, Tabs, Pills
Navbar
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container">
<a class="navbar-brand" href="#">Brand</a>
<button class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#nav">
<span class="navbar-toggler-icon"></span>
</button>
<div id="nav" class="collapse navbar-collapse">
<ul class="navbar-nav me-auto">
<li class="nav-item"><a class="nav-link active">Home</a></li>
<li class="nav-item"><a class="nav-link">Link</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown">Menu</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item">Action</a></li>
</ul>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search">
<button class="btn btn-outline-success">Search</button>
</form>
</div>
</div>
</nav>
Tabs & Pills
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item"><a class="nav-link active" data-bs-toggle="tab" href="#home">Home</a></li>
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#profile">Profile</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active p-3" id="home">...</div>
<div class="tab-pane fade p-3" id="profile">...</div>
</div>
<!-- Pills: .nav-pills -->
Cards
<div class="card" style="width: 18rem;">
<img src="..." class="card-img-top" alt="">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">Quick example text.</p>
<a href="#" class="btn btn-primary">Go</a>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">An item</li>
</ul>
<div class="card-footer text-body-secondary">Footer</div>
</div>
List Group
<ul class="list-group">
<li class="list-group-item active" aria-current="true">Active</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
Item <span class="badge bg-primary rounded-pill">14</span>
</li>
</ul>
<div class="list-group">
<a class="list-group-item list-group-item-action" aria-current="true">Link item</a>
</div>
Badges
<h1>Example <span class="badge text-bg-secondary">New</span></h1>
<button class="btn btn-primary">
Inbox <span class="badge text-bg-light text-dark">4</span>
</button>
Breadcrumbs & Pagination
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Library</li>
</ol>
</nav>
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="page-item disabled"><span class="page-link">Prev</span></li>
<li class="page-item active"><span class="page-link">1</span></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
</ul>
</nav>
Dropdowns
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown">Menu</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item active">Action</a></li>
<li><a class="dropdown-item">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item disabled">Disabled</a></li>
</ul>
</div>
Modal
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#m1">Launch</button>
<div class="modal fade" id="m1" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">Hello modal!</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button class="btn btn-primary">Save</button>
</div>
</div>
</div>
</div>
Offcanvas
<button class="btn btn-primary" data-bs-toggle="offcanvas" data-bs-target="#side">
Open sidebar
</button>
<div class="offcanvas offcanvas-start" id="side" tabindex="-1">
<div class="offcanvas-header">
<h5 class="offcanvas-title">Sidebar</h5>
<button class="btn-close" data-bs-dismiss="offcanvas"></button>
</div>
<div class="offcanvas-body">Content…</div>
</div>
Toasts
<div class="toast-container position-fixed bottom-0 end-0 p-3">
<div class="toast show" role="alert">
<div class="toast-header">
<strong class="me-auto">Bootstrap</strong>
<small>just now</small>
<button class="btn-close" data-bs-dismiss="toast"></button>
</div>
<div class="toast-body">Hello, world!</div>
</div>
</div>
Tooltips & Popovers
<button class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-title="Tooltip text">Hover me</button>
<button class="btn btn-info" data-bs-toggle="popover" data-bs-title="Title" data-bs-content="Popover content">
Click me
</button>
<script>
// Enable tooltips & popovers (once)
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => new bootstrap.Tooltip(el));
document.querySelectorAll('[data-bs-toggle="popover"]').forEach(el => new bootstrap.Popover(el));
</script>
Collapse & Accordion
<p>
<a class="btn btn-outline-primary" data-bs-toggle="collapse" href="#c1">Toggle</a>
</p>
<div class="collapse" id="c1"><div class="card card-body">Collapsed content</div></div>
<div class="accordion" id="acc">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#p1">Panel 1</button>
</h2>
<div id="p1" class="accordion-collapse collapse show" data-bs-parent="#acc">
<div class="accordion-body">Body</div>
</div>
</div>
</div>
Carousel
<div id="carousel" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-indicators">
<button data-bs-target="#carousel" data-bs-slide-to="0" class="active"></button>
<button data-bs-target="#carousel" data-bs-slide-to="1"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="">
<div class="carousel-caption d-none d-md-block"><h5>First</h5></div>
</div>
<div class="carousel-item"><img src="..." class="d-block w-100" alt=""></div>
</div>
<button class="carousel-control-prev" data-bs-target="#carousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon"></span>
</button>
<button class="carousel-control-next" data-bs-target="#carousel" data-bs-slide="next">
<span class="carousel-control-next-icon"></span>
</button>
</div>
Progress, Spinners, Placeholders
<div class="progress" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="progress-bar w-50">50%</div>
</div>
<div class="spinner-border" role="status"><span class="visually-hidden">Loading...</span></div>
<div class="spinner-grow" role="status"></div>
<p aria-hidden="true">
<span class="placeholder col-6"></span>
<span class="placeholder col-4 bg-primary"></span>
</p>
Ratios (Responsive Embeds)
<div class="ratio ratio-16x9">
<iframe src="..." allowfullscreen></iframe>
</div>
<!-- Also: ratio-1x1, ratio-4x3, ratio-21x9, or custom with CSS variable -->
Helpers & Accessibility
<span class="visually-hidden">Screenreader-only text</span>
<div class="clearfix"></div> <!-- clear floats -->
<div class="link-primary">Link style</div>
<img src="..." class="img-fluid" alt="Descriptive alt text">
Borders, Radius, Shadows
<div class="border border-2 border-info p-3 rounded-3 shadow-sm">Box</div>
<!-- Radius: .rounded, .rounded-0, .rounded-1..5, .rounded-circle, .rounded-pill -->
<!-- Shadows: .shadow-none, .shadow-sm, .shadow, .shadow-lg -->
Utilities (Patterns)
Most utilities follow:
- Responsive: append
-{breakpoint}
→.d-md-flex
- Stateful (hover/focus) on some utilities:
.link-primary:hover
(via custom CSS as needed) - Values: numeric scale
0–5
(or named likeauto
,start
,end
)
Common ones
<!-- Text -->
<p class="text-start text-md-center text-nowrap text-break">...</p>
<!-- Overflow -->
<div class="overflow-auto">...</div>
<!-- Opacity -->
<div class="opacity-50">Faded</div>
<!-- Z-index helpers (via position + utility classes) -->
<div class="position-relative z-3">On top</div>
<!-- Object fit -->
<img class="w-100" style="object-fit: cover; height: 200px;" alt="">
Icons (not included)
Use a separate icon set, e.g. Bootstrap Icons:
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
<i class="bi bi-alarm"></i>
JavaScript APIs (Programmatic Control)
// Collapse
const myCollapse = new bootstrap.Collapse('#c1');
// Modal events
const modalEl = document.getElementById('m1');
modalEl.addEventListener('shown.bs.modal', () => console.log('shown'));
// Carousel
const car = new bootstrap.Carousel('#carousel', { interval: 4000, pause: 'hover' });
Theming Tips
- Override CSS variables in a wrapper or
:root
:
- Add
.bg-body-tertiary
for subtle surfaces. - Use
.text-bg-*
helpers for readable colored chips.
Quick Layout Recipes
Centered, constrained content
<div class="container py-5">
<div class="row justify-content-center">
<div class="col-12 col-md-8 col-lg-6">...</div>
</div>
</div>
Responsive two-column with sticky sidebar
<div class="container">
<div class="row">
<aside class="col-md-4 d-none d-md-block">
<div class="sticky-top" style="top: 1rem;">Sidebar</div>
</aside>
<main class="col-12 col-md-8">Content</main>
</div>
</div>
Card deck with equal heights
<div class="row row-cols-1 row-cols-sm-2 row-cols-lg-3 g-4">
<div class="col">
<div class="card h-100">...</div>
</div>
<div class="col">
<div class="card h-100">...</div>
</div>
</div>
Debug Helpers
<div class="container">
<div class="row">
<div class="col-4"><div class="p-3 bg-light border">.col-4</div></div>
<div class="col-4"><div class="p-3 bg-light border">.col-4</div></div>
<div class="col-4"><div class="p-3 bg-light border">.col-4</div></div>
</div>
</div>
Accessibility Checklist (quick)
- Always set
lang
on<html>
. - Provide meaningful
alt
text for images. - Use
aria-*
attributes where provided by components. - Keep contrast high, especially on
.text-bg-*
and custom themes. - Leverage
.visually-hidden
for helper text.