Popovers
Popovers are small overlays with a title and a few lines of content, opened by click, hover or focus. Use them for hints, definitions and details that do not deserve a whole dialog; the examples cover placements, triggers, disabled elements, custom styles and real interface spots.
1Basic popover
Click the button to toggle a popover with a title and content.
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="About Vela" data-bs-content="Granular roles keep sensitive work private while everyone else stays informed.">Click to toggle popover</button>2Four directions
<code>data-bs-placement</code> chooses top, right, bottom or left.
<div class="d-flex flex-wrap gap-2">
<button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-content="Popover on the top." data-bs-placement="top">Popover on top</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-content="Popover on the right." data-bs-placement="right">Popover on right</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-content="Popover on the bottom." data-bs-placement="bottom">Popover on bottom</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-content="Popover on the left." data-bs-placement="left">Popover on left</button>
</div>3Dismiss on next click
<code>data-bs-trigger="focus"</code> closes the popover when the user clicks anywhere else. Use an <code>a</code> with <code>tabindex</code>.
<a tabindex="0" class="btn btn-outline-danger" role="button" data-bs-toggle="popover" data-bs-title="Dismissible popover" data-bs-content="Click anywhere to close me." data-bs-trigger="focus">Dismissible popover</a>4Hover trigger
<code>data-bs-trigger="hover focus"</code> opens on mouse hover and on keyboard focus.
<button type="button" class="btn btn-outline-primary" data-bs-toggle="popover" data-bs-title="Quick facts" data-bs-content="Real-time collaboration is included in every plan." data-bs-trigger="hover focus"><i class="bi bi-cursor-fill" aria-hidden="true"></i> Hover me</button>5Disabled element
Disabled buttons do not fire events, so wrap them in a focusable span that carries the popover.
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Finish your profile to unlock this.">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>6In running text
A popover on an inline link explains a term without leaving the sentence.
Every order includes single sign-on at no extra cost, and you can cancel at any time.
<p class="mb-0">Every order includes <a tabindex="0" class="link-primary text-decoration-underline" role="button" data-bs-toggle="popover" data-bs-title="Smart reporting" data-bs-content="Your data is encrypted, backed up daily and hosted in the region you choose." data-bs-trigger="focus">single sign-on</a> at no extra cost, and you can cancel at any time.</p>7Help icon
A small round icon button next to a heading opens a hint.
Monthly budget
<div class="d-flex align-items-center gap-2">
<h3 class="h6 mb-0">Monthly budget</h3>
<button type="button" class="btn btn-link p-0 link-secondary" data-bs-toggle="popover" data-bs-title="How it works" data-bs-content="We sum all invoices that are due this month." data-bs-placement="right" aria-label="Help"><i class="bi bi-question-circle-fill" aria-hidden="true"></i></button>
</div>8Content only
Leave out <code>data-bs-title</code> for a popover without a header.
<button type="button" class="btn btn-outline-secondary" data-bs-toggle="popover" data-bs-content="Start free, upgrade when you grow and cancel any time with one click." data-bs-placement="bottom">No title</button>9Custom style
<code>data-bs-custom-class</code> adds a class to the popover so you can theme it.
<button type="button" class="btn btn-primary" data-bs-toggle="popover" data-bs-title="Branded popover" data-bs-content="Uses the template primary colour." data-bs-custom-class="cb-popover">Custom popover</button>10Status buttons
Small outline buttons whose popovers explain each status.
<div class="d-flex flex-wrap gap-2">
<button type="button" class="btn btn-sm btn-outline-success" data-bs-toggle="popover" data-bs-title="Paid" data-bs-content="Received on Nov 22, 2025" data-bs-placement="top">Paid</button>
<button type="button" class="btn btn-sm btn-outline-warning" data-bs-toggle="popover" data-bs-title="Pending" data-bs-content="Waiting for approval" data-bs-placement="top">Pending</button>
<button type="button" class="btn btn-sm btn-outline-danger" data-bs-toggle="popover" data-bs-title="Overdue" data-bs-content="Was due on Jun 1, 2026" data-bs-placement="top">Overdue</button>
<button type="button" class="btn btn-sm btn-outline-info" data-bs-toggle="popover" data-bs-title="Draft" data-bs-content="Not sent yet" data-bs-placement="top">Draft</button>
</div>11Form label hint
An info icon in a label explains what to enter.
<div style="max-width:360px">
<label for="pop-field-1115" class="form-label d-flex align-items-center gap-1">Tax number <a tabindex="0" class="link-secondary" role="button" data-bs-toggle="popover" data-bs-content="You find it on the top right of your last tax notice." data-bs-trigger="focus" aria-label="About the tax number"><i class="bi bi-info-circle-fill" aria-hidden="true"></i></a></label>
<input type="text" class="form-control" id="pop-field-1115">
</div>12In a table
Status badges in a table reveal details in a popover.
<div class="table-responsive">
<table class="table align-middle mb-0">
<thead>
<tr>
<th scope="col">Order</th>
<th scope="col">Total</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>#INV-3226</td>
<td>$575.42</td>
<td><a tabindex="0" class="badge text-bg-light border text-decoration-none" role="button" data-bs-toggle="popover" data-bs-title="On hold" data-bs-content="Last change 5 days ago by Ava." data-bs-trigger="focus" data-bs-placement="left">On hold</a></td>
</tr>
<tr>
<td>#TX-6760</td>
<td>$319.56</td>
<td><a tabindex="0" class="badge text-bg-light border text-decoration-none" role="button" data-bs-toggle="popover" data-bs-title="In review" data-bs-content="Last change yesterday by Samir." data-bs-trigger="focus" data-bs-placement="left">In review</a></td>
</tr>
<tr>
<td>#ORD-6651</td>
<td>$659.66</td>
<td><a tabindex="0" class="badge text-bg-light border text-decoration-none" role="button" data-bs-toggle="popover" data-bs-title="Approved" data-bs-content="Last change 5 min ago by Priya." data-bs-trigger="focus" data-bs-placement="left">Approved</a></td>
</tr>
</tbody>
</table>
</div>13User card
Clicking an avatar shows the person's name, role and city.
<button type="button" class="btn p-0 border-0 rounded-circle" data-bs-toggle="popover" data-bs-placement="right" data-bs-title="Leo Ibrahim" data-bs-content="Backend Engineer in Prague" aria-label="About Leo Ibrahim"><img src="../assets/img/avatar-4.svg" class="rounded-circle" width="48" height="48" alt="Leo Ibrahim"></button>14Long content
Popovers wrap longer text up to their maximum width.
<button type="button" class="btn btn-outline-dark" data-bs-toggle="popover" data-bs-title="Release notes" data-bs-content="Our open API and ready-made integrations fit into the stack you already have. We keep things simple, so you can focus on what matters to you. Onboarding guides and live chat help new colleagues get going on day one."><i class="bi bi-journal-text" aria-hidden="true"></i> What's new</button>15Auto placement
<code>data-bs-placement="auto"</code> lets the popover pick the side with the most room.
<button type="button" class="btn btn-info" data-bs-toggle="popover" data-bs-title="Auto" data-bs-content="I chose the best side for the current viewport." data-bs-placement="auto">Auto placed</button>16Offset
<code>data-bs-offset="0,16"</code> moves the popover further from its trigger.
<button type="button" class="btn btn-warning" data-bs-toggle="popover" data-bs-content="Sixteen pixels away from the button." data-bs-offset="0,16">Offset popover</button>17Feature list
Info icons in a pricing list explain each feature.
<div class="card" style="max-width:340px">
<div class="card-body">
<h3 class="h6">Pro plan</h3>
<ul class="list-unstyled mb-0">
<li class="d-flex align-items-center gap-2 mb-2"><span class="text-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>Audit trail<a tabindex="0" class="link-secondary ms-auto" role="button" data-bs-toggle="popover" data-bs-title="Audit trail" data-bs-content="Friendly people answer your questions quickly, by phone, chat or email." data-bs-trigger="focus" data-bs-placement="left" aria-label="About Audit trail"><i class="bi bi-info-circle-fill" aria-hidden="true"></i></a></li>
<li class="d-flex align-items-center gap-2 mb-2"><span class="text-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>99.99% uptime<a tabindex="0" class="link-secondary ms-auto" role="button" data-bs-toggle="popover" data-bs-title="99.99% uptime" data-bs-content="Plan projects, track progress and share updates without another status meeting." data-bs-trigger="focus" data-bs-placement="left" aria-label="About 99.99% uptime"><i class="bi bi-info-circle-fill" aria-hidden="true"></i></a></li>
<li class="d-flex align-items-center gap-2 mb-2"><span class="text-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>99.99% uptime<a tabindex="0" class="link-secondary ms-auto" role="button" data-bs-toggle="popover" data-bs-title="99.99% uptime" data-bs-content="Our team has done this many times, so you never have to guess." data-bs-trigger="focus" data-bs-placement="left" aria-label="About 99.99% uptime"><i class="bi bi-info-circle-fill" aria-hidden="true"></i></a></li>
<li class="d-flex align-items-center gap-2 mb-2"><span class="text-success"><i class="bi bi-check-lg" aria-hidden="true"></i></span>99.99% uptime<a tabindex="0" class="link-secondary ms-auto" role="button" data-bs-toggle="popover" data-bs-title="99.99% uptime" data-bs-content="Clear reports turn weekly numbers into decisions in minutes, not days." data-bs-trigger="focus" data-bs-placement="left" aria-label="About 99.99% uptime"><i class="bi bi-info-circle-fill" aria-hidden="true"></i></a></li>
</ul>
</div>
</div>18Toolbar
Popovers on buttons of a button group give each tool a short explanation.
<div class="btn-group" role="group" aria-label="Editor tools">
<button type="button" class="btn btn-outline-secondary" data-bs-toggle="popover" data-bs-title="Bold" data-bs-content="Make the selected text bold." data-bs-placement="bottom" data-bs-trigger="hover focus" aria-label="Bold"><i class="bi bi-type-bold" aria-hidden="true"></i></button>
<button type="button" class="btn btn-outline-secondary" data-bs-toggle="popover" data-bs-title="Italic" data-bs-content="Slant the selected text." data-bs-placement="bottom" data-bs-trigger="hover focus" aria-label="Italic"><i class="bi bi-type-italic" aria-hidden="true"></i></button>
<button type="button" class="btn btn-outline-secondary" data-bs-toggle="popover" data-bs-title="Link" data-bs-content="Turn the text into a link." data-bs-placement="bottom" data-bs-trigger="hover focus" aria-label="Link"><i class="bi bi-link-45deg" aria-hidden="true"></i></button>
</div>19Escape a scrolling box
<code>data-bs-container="body"</code> renders the popover outside an <code>overflow</code> container so it is not cut off.
Teams report saving around five hours a week after the first month.
We measure success by how many customers come back and tell their friends.
<div class="border rounded p-3 overflow-auto" style="max-height:90px">
<p class="small">Teams report saving around five hours a week after the first month.</p>
<button type="button" class="btn btn-sm btn-primary" data-bs-toggle="popover" data-bs-title="Not clipped" data-bs-content="Attached to the body element." data-bs-container="body">Open popover</button>
<p class="small mt-2 mb-0">We measure success by how many customers come back and tell their friends.</p>
</div>20Input focus hint
A focus-triggered popover on an input lists the password rules while typing.
<div style="max-width:320px">
<label for="pop-pass-1116" class="form-label">New password</label>
<input type="password" class="form-control" id="pop-pass-1116" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-placement="right" data-bs-title="Password rules" data-bs-content="At least 10 characters, one number and one symbol." autocomplete="new-password">
</div>