Bootstrap 5 Tutorial
v5.3.0Bootstrap 5 Tutorial
Popovers in Bootstrap 5
Popovers: Small overlay content that appears when clicking on an element.
Basic Popover
Simple Popover Example
<!-- Basic popover -->
<button type="button"
class="btn btn-lg btn-danger"
data-bs-toggle="popover"
data-bs-title="Popover title"
data-bs-content="Popover content">
Click to toggle popover
</button>
<!-- JavaScript initialization -->
<script>
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
</script>Popover Directions
All Placement Options
<!-- Placement options --> <button data-bs-placement="top">Top</button> <button data-bs-placement="right">Right</button> <button data-bs-placement="bottom">Bottom</button> <button data-bs-placement="left">Left</button> <button data-bs-placement="auto">Auto (default)</button>
HTML Content in Popovers
Rich Content Popovers
<!-- HTML content in popover -->
<button type="button"
class="btn btn-info"
data-bs-toggle="popover"
data-bs-html="true"
data-bs-title="<i class='bi bi-info-circle'></i> Information"
data-bs-content="<div><strong>Important:</strong> This is HTML content.<br><button class='btn btn-sm btn-primary'>Action</button></div>">
HTML Content Popover
</button>
<!-- Alternative method using data-bs-content selector -->
<button type="button"
class="btn btn-secondary"
data-bs-toggle="popover"
data-bs-html="true"
data-bs-content="#htmlContent">
Popover with selector
</button>
<div id="htmlContent" class="d-none">
<h5>Custom HTML Content</h5>
<p>This content will be displayed in the popover.</p>
<button class="btn btn-sm btn-primary">Click me</button>
</div>Popover Triggers
Click (Default)
data-bs-toggle="popover"Hover
data-bs-trigger="hover"Focus
data-bs-trigger="focus"Dismissible Popovers
Close on Next Click
Dismissible popover
<!-- Dismissible popover --> <a tabindex="0" class="btn btn-lg btn-warning" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible" data-bs-content="Click anywhere to dismiss"> Dismissible popover </a>
Customizing Popovers
Custom Class
Delay Options
<!-- Custom class -->
<button data-bs-custom-class="custom-popover">
Custom Styled
</button>
<!-- Custom CSS -->
.custom-popover {
background-color: #6f42c1;
color: white;
}
<!-- Delay options -->
<button data-bs-delay='{"show": 500, "hide": 100}'>
Delayed Popover
</button>Practical Examples
Real-World Usage
Form Field Help
Action Confirmation
User Profile Preview
Status Indicator
PendingJavaScript API
JavaScript Methods
| Method | Description | Example |
|---|---|---|
.show() | Shows popover | myPopover.show() |
.hide() | Hides popover | myPopover.hide() |
.toggle() | Toggles popover | myPopover.toggle() |
.dispose() | Destroys popover | myPopover.dispose() |
.enable() | Enables popover | myPopover.enable() |
.disable() | Disables popover | myPopover.disable() |
.toggleEnabled() | Toggles enabled state | myPopover.toggleEnabled() |
.update() | Updates popover position | myPopover.update() |
Events
show.bs.popover- Fires immediately when show is calledshown.bs.popover- Fires when popover is visiblehide.bs.popover- Fires immediately when hide is calledhidden.bs.popover- Fires when popover is hiddeninserted.bs.popover- Fires after popover content is added to DOM
// JavaScript initialization and usage
// Initialize all popovers
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
// Initialize specific popover with options
const myPopover = new bootstrap.Popover(document.getElementById('myPopover'), {
title: 'Custom Title',
content: 'Custom content',
placement: 'right',
trigger: 'hover',
html: true,
delay: {show: 300, hide: 100}
})
// Programmatic control
myPopover.show() // Show popover
myPopover.hide() // Hide popover
myPopover.toggle() // Toggle popover
myPopover.dispose() // Destroy popover
// Event handling
document.getElementById('myPopover').addEventListener('shown.bs.popover', function () {
console.log('Popover was shown')
})Accessibility Features
Accessibility Best Practices
- Add
aria-describedbyfor screen readers - Use proper focus management
- Ensure keyboard navigation works
- Add close functionality for keyboard users
- Test with screen readers
- Provide alternative ways to access information
Common Issues and Solutions
Troubleshooting
- Popover not showing: Check Bootstrap JS is loaded
- Content not displaying: Verify data attributes are correct
- Wrong positioning: Check container has proper positioning
- Multiple popovers: Ensure each has unique ID or proper initialization
- Mobile issues: Test touch interactions
- Performance: Avoid too many popovers on one page