How to make a Bootstrap 5 theme: basic setup
Bootstrap 5 has been recently released with new interesting features like RFS and RTL.
Here is a quick tutorial to start making your own theme. The scope of this tutorial is to create style.css from style.scss importing Bootstrap 5 without any customisation yet.
The general idea
Bootstrap 5 is mainly written in sass which gets compiled to css. And then a touch of postcss is used for autoprefix to ensure browser compatibility.
In the end, purgecss can be used to prune the unused css selectors.
Tool From To
-----------------------------------
sass styles.scss -> styles.css
postcss styles.css -> styles.css
purgecss styles.css -> styles.css
Scaffolding
Let’s start creating our base folder which will contain all our files.
mkdir bootstrap5-theme
cd bootstrap5-theme
npm init -y
At the end of these commands you should have:
bootstrap5-theme
└── package.json
Then let’s add .nvmrc to fix the node version we’re using.
In this case, we’ll go for node v16.13.2 as currently the LTS.
This is assuming you’re familiar with nvm. In case you’re not, read here about nvm.
echo '16.13.2' >> .nvmrc
nvm install
and .gitignore if you want to use git.
# ignore .DS_Store and node_modules
echo '.DS_Store' >> .gitignore
echo 'node_modules/' >> .gitignore
At the end of these commands you should have:
bootstrap5-theme
├── .nvmrc
├── .gitignore
└── package.json
We’re ready to install Bootstrap 5 now (currently the latest version is v5.1.3).
# install v5.1.3
npm i bootstrap@5.1.3
By default npm i will save the packege installed under dependencies in package.json.
# in package.json you should have
"dependencies": {
"bootstrap": "^5.1.3"
}
We’re ready for sass now.
# install sass
npm i --save-dev node-sass
# in package.json you should have
"devDependencies": {
"node-sass": "^7.0.1"
}
And now we can create our basic folder which will contains our styles.scss.
Now we’re copying the main file from Bootstrap 5 which is bootstrap.scss and _variables.scss which contains the variables we’ll customize later on.
mkdir scss
cp node_modules/bootstrap/scss/bootstrap.scss scss/styles.scss
cp node_modules/bootstrap/scss/_variables.scss scss/_variables.scss
At the end of this commands you should have:
bootstrap5-theme
├── node_modules
├── .nvmrc
├── .gitignore
├── package-lock.json
├── package.json
└── scss
├── _variables.scss
└── styles.scss
Now, with our preferred editor we have to edit styles.scss and for every @import we should add the following path ./node_modules/bootstrap/scss/.
This will allow you to import the files from the Bootstrap package we installed with npm that now stays in node_modules/bootstrap.
Here an example of the first rows in your styles.scss:
// Configuration
@import "./node_modules/bootstrap/scss/functions";
@import "variables";
@import "./node_modules/bootstrap/scss/mixins";
@import "./node_modules/bootstrap/scss/utilities";
// Layout & components
@import "./node_modules/bootstrap/scss/root";
@import "./node_modules/bootstrap/scss/reboot";
@import "./node_modules/bootstrap/scss/type";
@import "./node_modules/bootstrap/scss/images";
@import "./node_modules/bootstrap/scss/containers";
@import "./node_modules/bootstrap/scss/grid";
@import "./node_modules/bootstrap/scss/tables";
@import "./node_modules/bootstrap/scss/forms";
@import "variables"; that is not a mistake.The reason why is because we do want to use
scss/_variables.scss we copied before as it’s the variable file we’ll modify and we’ll want to commit to our repo.If now you try to run node-sass against styles.scss you should see the Bootstrap css as output without errors. In that case, congratulations! You just build Bootstrap 5 from sources with sass! Well done!
# cmd to quickly build Bootstrap 5
./node_modules/.bin/node-sass scss/styles.scss
Ok, we’re getting there! Now let’s add a build script to our package.json in a way we can build our Bootstrap theme with npm run build.
# In package.json
"scripts": {
"build": "node-sass scss/styles.scss css/styles.css"
},
When you npm run build you should have:
➜ npm run build
> bootstrap5-theme@1.0.0 build
> node-sass scss/styles.scss css/styles.css
Rendering Complete, saving .css file...
Wrote CSS to /bootstrap5-theme/css/styles.css
If that is the case, congratulation again! That’s it! You did successfully installed Bootstrap 5, imported its scss files and with node-sass build styles.css.
Quick recap:
- we did config nvm and git using
.nvmrcand.gitignore - then we installed with npm
bootstrapandnode-sass - we make a scss dir and we copied the main
boostrap.scssand_variables.scss - we changed the path of the import to point to
node_modulesinstyles.scss - we added the
buildscript in package.json
There is not yet customisation, but with this scaffold, you can already see we’re in a great position to start the customisation.
So, for now, congrats for achieving the basic setup and please feel free to start playing with _variables.scss, no better way to learn.
Notes:
This post was partially inspired by bootstrap-npm-starter.