How to change the font size with Sass in Bootstrap 4?
With all the confusion and so many different answers. I approached the authors of bootstrap with the question to clear it up once and for all.
It is now crystal that we will need to change $font-size-base which will directly change the root font-size.
I was also advised by their contributor to not control the font-size with html element rather change the bootstrap's variable instead.
REF: https://github.com/twbs/bootstrap/pull/24060
Caution about using just CSS override
using the supplied css example will not work for all aspects of bootstrap sizing.
The compiled result of scss uses the $font-size-base
variable to size many things and may be used in more areas in the future.
List of sized elements
- dropdown font
- button font
- popover font
- input-group font
- forms font
- reboot font
-------------- Example SCSS --------------
This is an example for your scss files, note that you need to define the $font-size-base
BEFORE including bootstrap in your main scss file. In this case, the app.scss
file is the one being compiled.
app.scss
// Fonts
@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");
// Variables -- this is where you defined the variables
// BEFORE importing bootstrap which will use it's
// defaults if the variable is not predefined.
@import "variables";
// Bootstrap
@import '~bootstrap/scss/bootstrap';
// DataTables https://datatables.net/download/npm#DataTables-core
// @import "datatables";
@import "datatables.min";
_variables.scss
// Body
$body-bg: #ffffff;
// Typography
$font-size-base: 12px; // this changes the font-size throughout bootstrap
$font-family-sans-serif: "Raleway", sans-serif;
$font-size-base: 0.9rem;
$line-height-base: 1.6;
I'd suggest you to update directly the html {font-size: 16px}
property instead of changing Bootstrap's $font-size-base
, for several reasons:
html
's font size will be directly used in calculating final font size. There's no benefit to use an "intermediary", that is,body
that is being adjusted by Bootstrap's$font-size-base
.Bootstrap's SCSS system calculate heading size etc using
$font-size-base
, so all Bootstrap affected CSS rule will be affected, which includesbody
(set into$font-size-base$
).
However, browser calculate any CSS font size rule inrem
relative tohtml {font-size}
, not from$font-size-base
affected elements (likebody
).Setting
html {font-size}
usingpx
will affect anyrem
value, both inside and outside Bootstrap affected elements, if this is what you want to achieve.
Conversely, if you only want to set sizes for Bootstrap-affected-elements, do set the $font-size-base
relative to html {font-size}
, so CSS elements outside of Bootstrap will not be affected. But I'd say this is more of an edge case, instead of the norm.
Note:
If you're setting $font-size-base
or any other Bootstrap variables, you don't have to modify variables.scss
file. You should define variables before importing node_modules/bootstrap/scss/variables
and other Bootstrap files, so your values got used instead of !default
values set in Bootstrap. The advantages: no need to edit the whole variables.scss
file.
Bootstrap defines base font-size
in it's _reboot.scss
as
body {
font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #292b2c;
background-color: #fff;
}
NOTE:- Never change default values into frameworks files always modify values using custom css/js files.
so in order to change your font-size to 14px
use this in your own style.css
(custom css file)
body {
font-size: 0.875rem;
}
Here is the working fiddle
use !important
you are not able to see your changes to override your change on default.
In your custom.scss
file do like this:
$custom-variable:0.875rem;
Then use it like this:
@import "./src/scss/_modules/custom";
@import "./bower_components/bootstrap/scss/bootstrap";
body {
font-size:$custom-variable;
}