-
Notifications
You must be signed in to change notification settings - Fork 118
Release notes for Bootstrap 5 upgrade
Note that this will have a significant impact on any scss and html customizations you may have made to your fork of this project.
The following links will be helpful:
Get started with Bootstrap v5.2.3
Migrating to v4
How to Migrate from Bootstrap Version 3 to 4
Migrating to v5
How to Migrate from Bootstrap Version 4 to 5
Use Bootstrap 5 with Ruby on Rails 6 and webpack
What happened to $grid-float-breakpoint in Bootstrap 4. And screen size breakpoint shift from 3 -> 4
What are media queries in Bootstrap 4?
- Node package changes:
- Changed version of
bootstrap "^3.4.1"-->"^5.2.3" - Added
@popperjs/core. - Removed
bootstrap-3-typeahead, bootstrap-sass & popper.js
- Changed version of
- Stylesheet changes
-
In
app/assets/stylesheets/application.scss:- removed
bootstrap-sassimport
and replaced with
@import "../../../node_modules/bootstrap/scss/bootstrap";
- removed
-
The order of the
importstatements have been changed to import theblocks/andutils/after the default bootstrap stylesheets -
In
app/assets/stylesheets/blocks/:- Replaced in relevant files:
-
@use "../../../../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap.scss" as * ;
with
@use "../../../../node_modules/bootstrap/scss/bootstrap" as *;
-
- Enclosed all division calculations using symbol
/withcalc()function,
e.g., replaced
padding-right: $grid-gutter-width / 2;
with
padding-right: calc($grid-gutter-width / 2);
- Replaced breaking media queries since Bootstrap 3:
-
@media (max-width: $grid-float-breakpoint-max) {}
with
@include media-breakpoint-down(md){} -
@media (max-width: $grid-float-breakpoint-max) {}
with
@include media-breakpoint-down(md) {}
-
- Replaced in relevant files:
-
Deleted
app/javascript/src/utils/popoverHelper.js.
-
- Mixins
- Media query mixins parameters have changed for a more logical approach.
-
media-breakpoint-down()uses the breakpoint itself instead of the next breakpoint (e.g.,media-breakpoint-down(lg)instead ofmedia-breakpoint-down(md)targets viewports smaller than lg).
-
- Media query mixins parameters have changed for a more logical approach.
- Color system
- All
lighten()anddarken()functions replaced. These functions will mix the color with either white or black instead of changing its lightness by a fixed amount.- Replaced
lighten()bytint-color(). - Replaced
darken()byshade-color().
- Replaced
- All
Note many of these Bootstrap changes has required us to rewrite or change some of the Javascript files.
When we use a native DOM element in Javascript, we obtain it by applying get() to the Jquery element (cf., https://api.jquery.com/get/). We sometimes use the button native Dom element to programmatically click, as the Jquery button element with trigger('click') won't work because the trigger() function cannot be used to mimic native browser events, such as clicking (cf., https://learn.jquery.com/events/triggering-event-handlers/ )
- Accordion & spinners
- Bespoke versions replaced by Bootstrap 5 accordion and spinner now.
- Accordion
- Changed the default Bootstrap arrow icon for the accordion to use the fontawesome icons plus and minus icons. Created a several accordion specific colour variables:
// Accordion colors
$color-accordion-button: $color-primary-text;
$color-accordion-button-icon: $color-primary-text;
$color-accordion-button-bg: $color-primary-background;
$color-accordion-button-active-bg: shade-color($color-accordion-button-bg, 30%);
(Seeapp/assets/stylesheets/blocks/_accordion.scssandapp/assets/stylesheets/variables/_colours.scssfor details.) - The drag icon in
app/views/org_admin/sections/_section.html.erbnow appears after the plus (or minus) icon.
- Changed the default Bootstrap arrow icon for the accordion to use the fontawesome icons plus and minus icons. Created a several accordion specific colour variables:
- The spinner block now uses class
d-noneinstead ofhiddento hide. - In views with multiple accordion sections with "expand all" or "collapse all" links, we use the native Dom element of the accordion buttons to programmatically click, (cf. to note above).
- Buttons
- Bootstrap dropped
btn-blockclass for utilities. So we removed any styling using it. - Close Buttons: Renamed
closetobtn-close. - Renamed
btn-defaulttobtn-secondaryand variable$btn-default-colorchanged to$btn-secondary-color.
- Bootstrap dropped
- Dropdowns
- Dropdown list items with class
dropdownhave classdropdown-itemadded usually withpx-3for positioning. - Added new
dropdown-menu-darkvariant and associated variables for on-demand dark dropdowns. - Data attributes changes required by Bootstrap 5 (as used by accordion and dropdown buttons):
-
data-display-->data-bs-display -
data-parent-->data-bs-parent -
data-target-->data-bs-target -
data-toggle-->data-bs-toggle
-
- Bootstrap 5 Popover added to some dropdown-menu items by adding attribute
data-bs-toggle="popover"
- Dropdown list items with class
- Form
-
form-groupclass replaced withform-control. - Form labels now require
form-labelorform-check-labelto go withform-controlandform-checkrespectively. So all obsoletecontrol-labelreplaced byform-labeland missing ones added. - Dropped form-specific layout classes for our grid system. Use Bootstrap grid and utilities instead of
form-group,form-row, orform-inline. -
form-textno longer sets display, allowing you to create inline or block help text as you wish just by changing the HTML element. - Input group addons are now specific to their placement relative to an input. So
input-group-addonand in our case we replaced withinput-group-addon. - Renamed
checkboxandradiointoform-check.
-
- Images
- Renamed
img-responsivetoimg-fluid.
- Renamed
- Labels and badges
- Class
labelhas been removed and replaced bybadgeto disambiguate from the<label>element.- Renamed
labelclass tobadge - Replaced
label-defaultbybg-secondary - Replaced
label-infobybg-info - Replaced
label-warningbybg-warning .text-dark - Replaced
label-dangerbybg-danger
- Renamed
- Class
- Links
- Links are underlined by default (not just on hover), unless they're part of specific components. So we had to add css to remove underline in many cases.
- Modals
- To programmatically show or hide a Bootstrap modal, we have followed both these approaches:
- Either, get access to the Jquery modal element and call functions
modal('show')ormodal('hide'). - Or, apply click() to the native Dom element of the button to trigger the modal (cf. to note above).
- Either, get access to the Jquery modal element and call functions
- To programmatically show or hide a Bootstrap modal, we have followed both these approaches:
- Navs & navbars
- Bootstrap rewrote component with flexbox. Dropped nearly all > selectors for simpler styling via un-nested classes.
Instead of HTML-specific selectors like .nav > li > a, we use separate classes for
navs, nav-items, and nav-links. (Note because thenav-linkclass has not always been added as it comes with styles not appropriate for our styling for links.) This makes your HTML more flexible while bringing along increased extensibility. So we have dropped HTML-specific selectors and css in_navs.scsse.g.,.nav-tabs > li > a:hover-->nav-tabs nav-link:hover,.nav-pills > li > a:hover-->nav-pills .nav-link:hover.- Pages with css classes
navandnavbarupdated to work with Bootstrap 5. Soapp/assets/stylesheets/blocks/_navbars.scssandapp/assets/stylesheets/blocks/_navs.scssupdated.- Replaced
nav navbar-navcombination -->navbar-nav - Replaced
navbar-toggle-->navbar-toggler - Replaced multiple spans in
navbar-togglebutton with classicon-bar
--> single span withtoggler-icon - Lists with
nav navbar-navhave classnav-itemadded to list elements.
- Replaced
- Note because the
nav-linkclass include styling that is not appropriate in many places, we have not included it in those cases.
- Pages with css classes
- Bootstrap rewrote component with flexbox. Dropped nearly all > selectors for simpler styling via un-nested classes.
Instead of HTML-specific selectors like .nav > li > a, we use separate classes for
- Notifications
- Notifications now use classes
d-blockandd-noneto show and hide respectively.
- Notifications now use classes
- Panels, thumbnails & wells (replacements)
- Bootstrap 5 dropped panels, thumbnails and wells. So pages with them updated with Bootstrap 5 replacements.
- All views with css classes
panel, panel-body, panel-*Have panel replaced by card to givecard, card_body, card-*, etc. - As
panel-defaultand some otherpanel css classes don't have card equivalents with same suffixes we have added these classes temporarily in_cards.sccs, e.g.,.card-default, etc.
- All views with css classes
- Bootstrap 5 dropped panels, thumbnails and wells. So pages with them updated with Bootstrap 5 replacements.
- Utilities
- Bootstrap renamed several utilities to use logical property names instead of directional names with the addition of RTL support:
- Renamed
left-*andright-*tostart-*andend-*. - Renamed
float-leftandfloat-righttofloat-startandfloat-end. - Renamed
ml-*andmr-*toms-*andme-*. - Renamed
pl-*andpr-*tops-*andpe-*. - Renamed
text-leftandtext-righttotext-startandtext-end.
- Renamed
- The
hiddenandshowclasses have been removed because they conflicted with jQuery's.- Replaced
hiddenwithd-none.
- Replaced
- Text utilities
- As Bootstrap 5.2 dropped class
text-justifywe have created a custom version based on comment https://github.com/twbs/bootstrap/pull/29793#issuecomment-1814683346 -
text-*utilities do not add hover and focus states to links anymore.link-*helper classes can be used instead.
- As Bootstrap 5.2 dropped class
- Bootstrap renamed several utilities to use logical property names instead of directional names with the addition of RTL support:
- Home
- About
- Contributing
- Releases
- Themes
- Google Analytics
- Translations
- Developer guide
- Reporting Issues

