bootstrap-icons
Bootstrap Icons
Bootstrap Icons is an official open-source icon library with over 2,000 icons designed to work with Bootstrap components and documentation.
Current Version: 1.13.x (check https://icons.getbootstrap.com for latest)
Installation Methods
CDN (Quickest)
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css" integrity="sha384-CK2SzKma4jA5H/MXDUU7i1TqZlCFaD4T01vtyDFvPlD97JQyS+IsSh1nI2EFbpyk" crossorigin="anonymous">
npm
npm install bootstrap-icons
Then import:
// In SCSS
@import "bootstrap-icons/font/bootstrap-icons.css";
// In JavaScript
import 'bootstrap-icons/font/bootstrap-icons.css';
Download
Download from https://icons.getbootstrap.com and include files locally.
Composer (PHP)
For PHP projects using Composer:
composer require twbs/bootstrap-icons
Then reference icons from the vendor directory:
// Laravel Blade example
<img src="{{ asset('vendor/twbs/bootstrap-icons/icons/heart.svg') }}" alt="Heart">
// Symfony Twig example
<img src="{{ asset('bundles/bootstrap-icons/icons/heart.svg') }}" alt="Heart">
Usage Methods
Icon Fonts (Recommended for Most Cases)
Icon fonts are the simplest method for most projects:
- Easy syntax: Just add
<i class="bi bi-*"></i> - Automatic sizing: Icons scale with surrounding text
- Color inheritance: Icons use the parent's
colorproperty - Single dependency: One CSS file provides all icons
For advanced use cases (color gradients, animation, or offline/email), consider SVG methods instead.
<!-- Basic usage -->
<i class="bi bi-alarm"></i>
<i class="bi bi-heart-fill"></i>
<i class="bi bi-check-circle"></i>
<!-- Sizing with font-size -->
<i class="bi bi-alarm" style="font-size: 2rem;"></i>
<!-- Sizing with Bootstrap utilities -->
<i class="bi bi-alarm fs-1"></i>
<i class="bi bi-alarm fs-3"></i>
<!-- Coloring -->
<i class="bi bi-heart-fill text-danger"></i>
<i class="bi bi-check-circle text-success"></i>
<i class="bi bi-star-fill text-warning"></i>
Embedded SVG
Copy SVG code directly from the website:
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-heart" viewBox="0 0 16 16">
<path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01L8 2.748zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143c.06.055.119.112.176.171a3.12 3.12 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15z"/>
</svg>
Benefits of embedded SVG:
- No external dependencies
- Full CSS control
- Can be manipulated with JavaScript
currentColorinherits text color
SVG Sprite
Include sprite once, reference icons:
<!-- Include sprite (in body or inline) -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="heart" viewBox="0 0 16 16">
<path d="m8 2.748-.717-.737C5.6.281..."/>
</symbol>
<symbol id="star" viewBox="0 0 16 16">
<path d="M2.866 14.85c-.078.444..."/>
</symbol>
</svg>
<!-- Use icons -->
<svg class="bi" width="32" height="32" fill="currentColor">
<use xlink:href="#heart"/>
</svg>
Or reference external sprite file:
<svg class="bi" width="32" height="32" fill="currentColor">
<use xlink:href="bootstrap-icons.svg#heart"/>
</svg>
External Image
Reference icon SVG files directly via <img> element:
<!-- Via CDN -->
<img src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/heart.svg" alt="Heart" width="32" height="32">
<!-- Local file -->
<img src="/assets/icons/heart.svg" alt="Heart" width="32" height="32">
When to use:
- Email templates (no CSS/font dependencies)
- Simple static pages
- Content management systems
- When caching individual icons
Trade-offs:
- Cannot inherit text color (use CSS method for that)
- Each icon is a separate HTTP request (unless using HTTP/2)
- Requires explicit width/height attributes
CSS Method
Include icons via CSS background-image or mask:
/* Background-image approach (fixed color) */
.icon-heart {
display: inline-block;
width: 1em;
height: 1em;
background-image: url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/heart.svg");
background-size: contain;
background-repeat: no-repeat;
}
/* Mask approach (inherits currentColor) */
.icon-heart-mask {
display: inline-block;
width: 1em;
height: 1em;
background-color: currentColor;
mask-image: url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/heart.svg");
mask-size: contain;
mask-repeat: no-repeat;
-webkit-mask-image: url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/heart.svg");
-webkit-mask-size: contain;
-webkit-mask-repeat: no-repeat;
}
When to use:
- Decorative icons applied via CSS classes
- Icons that need to inherit text color (use mask approach)
- Avoiding markup changes
Trade-offs:
- Background-image: Cannot change color dynamically
- Mask approach: Requires vendor prefixes for Safari (
-webkit-mask-*) - Both: Not accessible without additional ARIA markup
Styling Icons
Sizing
<!-- With inline styles -->
<i class="bi bi-heart" style="font-size: 24px;"></i>
<i class="bi bi-heart" style="font-size: 2rem;"></i>
<!-- With Bootstrap font-size utilities -->
<i class="bi bi-heart fs-1"></i> <!-- 2.5rem -->
<i class="bi bi-heart fs-2"></i> <!-- 2rem -->
<i class="bi bi-heart fs-3"></i> <!-- 1.75rem -->
<i class="bi bi-heart fs-4"></i> <!-- 1.5rem -->
<i class="bi bi-heart fs-5"></i> <!-- 1.25rem -->
<i class="bi bi-heart fs-6"></i> <!-- 1rem -->
<!-- With custom CSS class -->
<style>
.icon-lg { font-size: 3rem; }
.icon-md { font-size: 1.5rem; }
.icon-sm { font-size: 0.875rem; }
</style>
<i class="bi bi-heart icon-lg"></i>
<!-- SVG sizing with width/height -->
<svg class="bi" width="48" height="48">...</svg>
Coloring
<!-- Bootstrap text utilities -->
<i class="bi bi-heart text-primary"></i>
<i class="bi bi-heart text-danger"></i>
<i class="bi bi-heart text-success"></i>
<i class="bi bi-heart text-warning"></i>
<i class="bi bi-heart text-info"></i>
<!-- Inline color -->
<i class="bi bi-heart" style="color: #ff6b6b;"></i>
<!-- SVG with fill -->
<svg class="bi" fill="#ff6b6b">...</svg>
<!-- SVG with currentColor (inherits parent color) -->
<div style="color: red;">
<svg class="bi" fill="currentColor">...</svg>
</div>
Vertical Alignment
<!-- Align with text -->
<i class="bi bi-heart" style="vertical-align: middle;"></i>
<!-- Or use Bootstrap alignment -->
<i class="bi bi-heart align-middle"></i>
<!-- Common fix for vertical centering -->
<style>
.bi {
vertical-align: -.125em;
}
</style>
Accessibility
Icons with Meaning
When icons convey meaning, provide accessible text:
<!-- Option 1: Visually hidden text -->
<button class="btn btn-danger">
<i class="bi bi-trash" aria-hidden="true"></i>
<span class="visually-hidden">Delete</span>
</button>
<!-- Option 2: aria-label on parent -->
<button class="btn btn-danger" aria-label="Delete">
<i class="bi bi-trash" aria-hidden="true"></i>
</button>
<!-- Option 3: title attribute (tooltip) -->
<i class="bi bi-info-circle" title="More information" role="img" aria-label="More information"></i>
Decorative Icons
Hide purely decorative icons from screen readers:
<i class="bi bi-star-fill" aria-hidden="true"></i>
Icon with Visible Text
When text is visible, hide icon from screen readers:
<button class="btn btn-primary">
<i class="bi bi-download" aria-hidden="true"></i> Download
</button>
Common Patterns
Button with Icon
<!-- Icon before text -->
<button class="btn btn-primary">
<i class="bi bi-download me-1"></i> Download
</button>
<!-- Icon after text -->
<button class="btn btn-primary">
Next <i class="bi bi-arrow-right ms-1"></i>
</button>
<!-- Icon only -->
<button class="btn btn-outline-secondary" aria-label="Settings">
<i class="bi bi-gear-fill"></i>
</button>
Navigation with Icons
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" href="#">
<i class="bi bi-house-fill me-1"></i> Home
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<i class="bi bi-person me-1"></i> Profile
</a>
</li>
</ul>
List with Icons
<ul class="list-unstyled">
<li><i class="bi bi-check-circle text-success me-2"></i>Feature one</li>
<li><i class="bi bi-check-circle text-success me-2"></i>Feature two</li>
<li><i class="bi bi-x-circle text-danger me-2"></i>Not included</li>
</ul>
Social Icons
<div class="d-flex gap-3 fs-4">
<a href="#" class="text-decoration-none">
<i class="bi bi-facebook text-primary"></i>
</a>
<a href="#" class="text-decoration-none">
<i class="bi bi-twitter-x text-dark"></i>
</a>
<a href="#" class="text-decoration-none">
<i class="bi bi-instagram text-danger"></i>
</a>
<a href="#" class="text-decoration-none">
<i class="bi bi-linkedin text-primary"></i>
</a>
<a href="#" class="text-decoration-none">
<i class="bi bi-github text-dark"></i>
</a>
</div>
Icon Badges
<button class="btn btn-primary position-relative">
<i class="bi bi-envelope"></i>
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
99+
<span class="visually-hidden">unread messages</span>
</span>
</button>
Popular Icon Names
Actions
bi-plus, bi-dash, bi-x, bi-check, bi-pencil, bi-trash, bi-download, bi-upload, bi-search, bi-filter
Navigation
bi-arrow-left, bi-arrow-right, bi-arrow-up, bi-arrow-down, bi-chevron-left, bi-chevron-right, bi-house, bi-list, bi-grid
UI Elements
bi-bell, bi-gear, bi-sliders, bi-three-dots, bi-three-dots-vertical, bi-person, bi-people, bi-envelope, bi-chat
Status
bi-check-circle, bi-x-circle, bi-exclamation-circle, bi-info-circle, bi-question-circle
Files
bi-file, bi-folder, bi-image, bi-film, bi-music-note, bi-file-pdf, bi-file-word, bi-file-excel
Social
bi-facebook, bi-twitter-x, bi-instagram, bi-linkedin, bi-github, bi-youtube, bi-discord, bi-slack
Additional Resources
Reference Files
references/icon-categories.md- Full icon list organized by category (Actions, Navigation, UI Elements, Status, Files, Media, Social, Devices, Weather, E-commerce, Development)references/sass-integration.md- Sass variables, bundler configuration (Vite, Parcel, Webpack), integration with Bootstrap Sass, and troubleshootingreferences/rails-integration.md- Rails 8 Propshaft setup, cssbundling-rails, dartsass-rails, bootstrap-icons gem, and troubleshooting
Example Files
examples/icon-methods-styling-patterns.html- Icon fonts, embedded SVG, SVG sprites, sizing, coloring, and vertical alignment techniquesexamples/icon-ui-accessibility-patterns.html- Buttons, navigation, lists, social icons, badges, and accessibility patterns
More from sjnims/bootstrap-expert
bootstrap-layout
This skill should be used when the user asks about Bootstrap grid system, Bootstrap containers, Bootstrap breakpoints, Bootstrap columns, Bootstrap rows, Bootstrap gutters, Bootstrap responsive layout, Bootstrap CSS Grid, Bootstrap z-index, Bootstrap row-cols, Bootstrap offset classes, Bootstrap column ordering, how to create responsive layouts with Bootstrap, how to use Bootstrap grid, Bootstrap column sizing, Bootstrap auto-layout columns, or needs help with Bootstrap page layout and responsiveness.
88bootstrap-components
This skill should be used when the user asks about Bootstrap components, "how to create a modal", "navbar not collapsing", "carousel autoplay", "responsive card grid", "toast notifications", "dropdown menu", "accordion FAQ", "offcanvas sidebar", "tab navigation", "tooltip not showing", "popover not working", Bootstrap accordion, alerts, badges, breadcrumb, buttons, button groups, cards, carousel, close button, collapse, dropdowns, list group, modal, navbar, navs and tabs, offcanvas, pagination, placeholders, popovers, progress, scrollspy, spinners, toasts, tooltips, or needs help implementing any Bootstrap UI component.
60bootstrap-customize
This skill should be used when the user asks "how do I customize Bootstrap", "how to create a custom Bootstrap theme", "what Sass variables can I override", "how to implement dark mode in Bootstrap", "how to change Bootstrap colors", "how to override Bootstrap defaults", "how to add custom colors to Bootstrap", "how to enable Bootstrap shadows", "how to compile Bootstrap Sass", "how to use Bootstrap CSS variables", or needs help with Bootstrap theming, Sass variable overrides, CSS custom properties, or color mode implementation.
47bootstrap-content
This skill should be used when the user asks about Bootstrap typography, "how do I style text in Bootstrap", "show me Bootstrap heading styles", "Bootstrap text looks wrong", "text not wrapping in Bootstrap", "how to create responsive tables", "Bootstrap table not responsive", "Bootstrap table overflowing on mobile", "how do I format code blocks", "Bootstrap images not responsive", "why is my Bootstrap image not scaling", "how to center images in Bootstrap", "image thumbnail not working", "how to add figure captions", "figure caption not showing", display headings, lead text, text alignment, text formatting, tables, table styling, responsive images, figures, code blocks, blockquotes, lists, abbreviations, horizontal rules, Reboot CSS reset, or when help is needed styling text, tables, images, and other content elements in Bootstrap.
37bootstrap-forms
This skill should be used when the user asks about Bootstrap forms, Bootstrap form controls, Bootstrap input fields, Bootstrap select, Bootstrap checkboxes, Bootstrap radio buttons, Bootstrap switches, Bootstrap range inputs, Bootstrap input groups, Bootstrap floating labels, Bootstrap form validation, Bootstrap form layout, Bootstrap toggle buttons, how to create Bootstrap forms, needs help with form styling and validation in Bootstrap, wants to create a form, add form validation, style form inputs, make an inline form, add floating labels to inputs, create a login form, build a registration form, or validate user input.
35bootstrap-utilities
This skill should be used when the user asks about Bootstrap utilities, Bootstrap spacing utilities, Bootstrap margin utilities, Bootstrap padding utilities, Bootstrap display utilities, Bootstrap flex utilities, Bootstrap text utilities, Bootstrap color utilities, Bootstrap background utilities, Bootstrap border utilities, Bootstrap shadow utilities, Bootstrap sizing utilities, Bootstrap position utilities, Bootstrap visibility utilities, Bootstrap overflow utilities, Bootstrap opacity utilities, Bootstrap float utilities, Bootstrap vertical align utilities, Bootstrap link utilities, or needs help with Bootstrap utility classes.
34