There are many ways to misuse Bootstrap, but it’s entirely possible to use it on a better way with a few tweaks on your process.
Use it as an external package
The greatest thing about Bower it’s not the ability to download whatever library or script but to use it as the package manager it’s intended to be, which primarily means to never modify packages installed with Bower.
There’s a simple reason for this: one of the key advantages of using a package manager is being able to keep your packages up-to-date, and since a package manager it’s not a version control system, whatever changes you make to an installed package will be lost with an update.
In the case of Bootstrap, here’s what I do:
- Install with Bower.
- Create a copy of the main Bootstrap file (the one with all the imports) to the directory where I’ll define my own styles for the project (for instance, copy to
styles/
). - Create a copy of the Bootstrap variables file to the same directory.
- Modify the import paths to use Bootstrap source files and my own copy of the variables files.
- Add my own styles as imports to the main stylesheet.
And there you go!
Enable components as needed
One of the most repeated complains about Bootstrap it’s that you’ll be loading a lot of styles that you’ll probably not going to use, such as jumbotron, wells or media object components. The thing it’s… if you’re not going to need it, don’t use it!
Actually, I think it’s good practice, immediately after that fourth step, to comment all of Bootstrap’s @import
rules and only un-comment them as needed.
There are only a few imports that are really needed to compile from Bootstrap, such as variables, mixins, normalize
and scaffolding
(maybe type
as well), which will provide the most basic functionalities and styles, and that’s just for 2.94 Kb (using autoprefixer and cssmin). After that, you should enable other components only when you need what they provide, and you’ll be saving on lots of bytes; for instance:
Basic Bootstrap foundation (no pun intended) | 2.94Kb |
Plus the type component | 7.08Kb |
Including all the components used on this site | 20.07Kb |
… plus all my custom styles | 49.7Kb |
… and all Bootstrap components | 147.34Kb |
So, as you can see, by enabling just what I needed, my CSS it’s about a third of the size it would be if I included all Bootstrap modules.
Use grid mixins for a semantic grid
It’s true that the default grid classes are not very semantic (even though they’re very clear for generating quick protoypes) and using the entire grid component will add more than a few kilobytes to the generated CSS, but here again, there’s a better way.
Even though it’s even mentioned on the official documentation, this seems to be one of the most easily forgotten features about Bootstrap: you can use the included mixins for generating semantic grid selectors.
For instance, using the SASS port you might define something like:
#main{
@include container-fixed;
}
.row{
@include make-row;
}
#content{
@include make-md-column( 14 );
@include make-md-column-offset( 4 );
}
#aside{
@include make-md-column( 5 );
@include make-lg-column( 4 );
@include make-lg-column-offset( 1 );
}
You need to import the mixins file but you can leave the “grids” component commented; this way you can use semantic selectors, an extensively tested grid, and by using only what’s needed, you’ll also benefit from a reduced file size.
And by the way, you’re not forced into the 12-columns grid. It only takes one variable to redefine it.
… this doesn’t mean Bootstrap it’s perfect
Of course, and there are plenty reasons, such as:
- Bootstrap defines several deeply nested selectors — which surely you’ve found using the navigation components.
- Some components require deeply nested HTML as well.
- It can be hard define your own visual style — some components are quite finished in terms of design, so they’re harder to fit on your own.
- It doesn’t follow a more strict naming convention, such as BEM, OOCSS or SMACSS.
And I’m sure you can name many more, or actually not even care and just use a lightweight grid framework and that might be enough for you — there are many and very attractive alternatives with several strengths that you should be comparing before a new project.
In the end, I’d say you need to remember that you can use Bootstrap as a full-fledged framework for rapid prototyping, but that you can also spend a little time and a little effort to just take what you’re actually using and meld it into your project for an optimized and vastly documented build.