If you’re doing anything web related, chances are you’ve heard about Bootstrap. If by now you still don’t know what Bootstrap is, or you just want to find a bootstrap tutorial for beginners to get a better overview of what it is and what it does best, you’ve come to the right place.
With Bootstrap, web developers can concentrate on the development work, without worrying about design, and get a good looking website up and running quickly. Conversely, it gives web designers a solid foundation for creating interesting Bootstrap themes.
Getting Started with this Bootstrap Tutorial
Bootstrap is available in two forms; as a precompiled version, and as a source code version. The source code version uses the Less CSS preprocessor, but if you are more into Sass, there is an official Sass port of Bootstrap also available. To make it easier to make use of CSS vendor prefixes, Bootstrap uses Autoprefixer.
We’ll focus on the precompiled version, which can be downloaded here. When you download the zip archive and uncompress it, the basic file structure looks like this:
bootstrap/ ├── css/ │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ └── bootstrap-theme.min.css ├── js/ │ ├── bootstrap.js │ └── bootstrap.min.js └── fonts/ ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2
The Bootstrap structure is pretty simple and self-explanatory. It includes precompiled files that enable quick usage in any web project. Besides compiled and minified CSS and JS files, it also includes fonts from Glyphicons, and the optional starting Bootstrap theme.
This structure can be easily incorporated in your own project’s file structure by just including the Bootstrap files exactly as they come out of the zip archive, or if it suits your project better, you can rearrange these files and place them anywhere you like. Just be sure that the Glyphicons fonts folder is on the same level as the CSS folder.
Basic HTML Template
A basic Bootstrap HTML template should look something like this:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap Template</title> <link href="css/bootstrap.min.css" rel="stylesheet"> </head> <body> <h1>Hello, world!</h1> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> </body> </html>
It is important to start any HTML with a HTML 5 Doctype declaration, so that browsers know what kind of a document they can expect. The head contains three important
<meta> tags that must be declared first, and any additional head tags must be added after these. If you want to support older browsers like IE8, you can also include HTML 5 shim in the head, which will enable use of HTML5 elements in older browsers, and Respond.js, that will polyfill CSS3 Media Queries, in the old versions of Internet Explorer.
<head> ... <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head>
Although this is not very important if you are targeting only modern browsers.
bootstrap.js. If you aren’t using any of Bootstrap’s interactive features, you can also omit these files from the source.
This is the bare minimum that is needed to get a basic Bootstrap layout up and running. If you’re a developer, you’ll probably want to take a look at some more advanced examples at Bootstrap’s examples page. If you’re a designer, or just looking for inspiration, Bootstrap Expo showcases sites that are built using Bootstrap. As we’ll see later, every part of Bootstrap can be easily customized in CSS. But if that’s not your thing, and you are looking for a slightly different look and feel from the prepackaged Bootstrap themes, there are a lot of free, open source and premium themes available from sources like Bootswatch and WrapBootstrap.
These templates are made available as well-factored CSS classes that you can apply to your HTML to achieve different effects. This makes using Bootstrap very convenient. By using semantic class names like
.info, these components are easily reusable and extensible. But while Bootstrap uses descriptive class names that have meaning, it isn’t specific about implementation details. All classes can be overridden with custom CSS style and color, and still the meaning of the class will stay the same.
Before we dive more into Bootstrap components and design templates, it is important to mention one of the major features that Bootstrap introduced in version 3: a mobile-first design philosophy, which resulted in a Bootstrap that is responsive by design. The end result is that Bootstrap easily and efficiently scales with a single code base, from phones, through tablets, to desktops.
This responsiveness is achieved using a fluid grid system that can be applied to appropriately scale up to 12 columns according to the size of the device or viewport. Grids provide structure to the layout, defining the horizontal and vertical guidelines for arranging content and enforcing margins. Grids also offer an intuitive structure for viewers, because it’s easy to follow a left to right, or a right to left flow of content moving down the page. Before grids, and before CSS was so powerful, grid based layouts were achieved by using tables, where the content would be arranged inside table cells. As CSS became more mature, a number of CSS frameworks for grid-based layouts started to appear. These include YUI grids, 960 GS and blueprint, to name a few.
To use the Bootstrap grid system, a few rules need to be followed. Grid column elements are placed inside row elements, which create horizontal groups of columns. You can have as many rows as you want on the page, but columns must be immediate children of rows. In a full row, the column widths will be any combination that adds up to 12, but it is not mandatory to use all 12 available columns.
Rows need to be placed either in a fixed-width layout wrapper, which has a
.container class and a width of 1170px, or in full-width layout wrapper, which has a
.container-fluid class, and which enables the responsive behavior in that row.
The Bootstrap grid system has four tiers of classes: xs for phones (<768px), sm for tablets (≥768px), md for desktops (≥992px), and lg for larger desktops (≥1200px). These basically define the sizes at which the columns will collapse or spread horizontally. The class tiers can be used in any combination to get dynamic and flexible layouts.
For example, if we want to get two rows, one with two columns, and one with four, we could write:
<div class="row"> <div class="col-md-6">First column</div> <div class="col-md-6">Second column</div> </div> <div class="row"> <div class="col-md-3">First column</div> <div class="col-md-3">Second column</div> <div class="col-md-3">Third column</div> <div class="col-md-3">Fourth column</div> </div>
We can use mixed column widths, too:
<div class="row"> <div class="col-md-9">Wider column</div> <div class="col-md-3">Smaller column</div> </div>
We can even shift columns by using offset, for example to create more narrow and centered content:
<div class="row"> <div class="col-md-6 col-md-offset-3">Centered column</div> </div>
Columns can be nested. There can be fewer than 12 columns, and as mentioned above, we can choose fixed-width or full-width columns by using
.container-fluid wrappers, respectively.
<div class="container"> <div class="row"> <div class="col-md-8"> Parent fixed-width column <div class="row"> <div class="col-md-6">Nested column</div> <div class="col-md-6">Nested column</div> </div> </div> </div> </div> <div class="container-fluid"> <div class="row"> <div class="col-md-4">Fluid ..</div> <div class="col-md-4">.. and full-width ..</div> <div class="col-md-4">.. example</div> </div> </div>
If we combine different class tiers, we will get different looks on mobile and on desktop views. In the example below, on the desktop there will be 4 columns in a line, and on mobile they will have full width and stack on each other.
<div class="row"> <div class="col-xs-12 col-md-3">.col-xs-12 .col-md-3</div> <div class="col-xs-12 col-md-3">.col-xs-12 .col-md-3</div> <div class="col-xs-12 col-md-3">.col-xs-12 .col-md-3</div> <div class="col-xs-12 col-md-3">.col-xs-12 .col-md-3</div> </div>
It is possible to disable page responsiveness completely. This will basically disable the “mobile site” aspects of Bootstrap. Just keep in mind that if you disable responsiveness, any fixed-width component, such as a fixed navbar, will not be visible when the viewport becomes narrower than the page content. For a non-responsive container, that means a width of 970px. Also in this case, navbars won’t collapse in mobile views as described later.
These are just basic examples. To see the full potential of the grids, check out Bootstrap’s Grids documentation.
Beginning developers often assume their pure and un-styled HTML will look the same across all browsers. Unfortunately, every browser has its own default “user agent” style sheet that is applied to the HTML, and no two browsers have the same defaults. For example, heading font sizes are not consistent across browsers, some unordered and ordered lists have left margins and others have left padding, browsers apply custom borders and padding to the HTML body, and even buttons are rendered differently across browsers. To solve all these inconsistencies, different CSS “reset” rules were born that define consistent style defaults.
Bootstrap brings some more goodies to table besides pure CSS reset. It comes with normalize.css, an HTML5-ready alternative to CSS resets, and it also has some well-designed defaults of its own. For example, Bootstrap sets the global default
font-size to 14px, with a line-height of 1.428. The default font is changed to Helvetica/Arial, with sans serif fallback. All these styles are applied to the
<body> and all paragraphs, with the addition that
<p> (paragraphs) receive a bottom margin of half their computed line-height (10px by default). Besides these defaults, there are also customizable styles for standard HTML tags that bring more consistency to the text, such as highlighted text (
<mark>), deleted text (
<s>), underlined text (
<u>), small text (
<small>), and bold text (
<strong>). Alignment classes help to arrange content on the page more easily by using
.text-nowrap classes. There are also predefined styles for block quotes, and unordered and ordered list, with inline options, just to name a few. To get a full list, head to the Bootstrap Typography page.
One interesting thing that Bootstrap also makes possible is that you can use, for example, heading styles by using either the
<h1> tag, or the
.h1 class. The latter will match the styling of the
<h1> heading, but will allow the text to be displayed inline.
Forms have come a long way over the years, and today using a web form is one of the most common activities performed while browsing the web. While HTML5 introduced a number of new form attributes, input types, and other helper elements, browsers haven’t visually improved forms much. This is one area where Bootstrap really shines, because aligning and styling labels and inputs, validating forms, and showing error messages, can be tricky without some help.
First, Bootstrap sets all textual input elements, like
<select>, to 100% width of the parent form element. It also gives you the ability to choose between inline forms, which will render multiple labels and input fields in the same line, by using the
.form-inline class, or horizontal forms, which use grids to align each input in its own row, by using the
.form-horizontal class. And if you need to place plain text next to a form label, instead of the input field, you can give it the
.form-control-static class to make it match the visual look of the form.
Maybe the greatest feature that Bootstrap brings to forms is validation styles for error, warning, and success states. These can be applied using the
.has-success classes, respectively. Combining this with icons that can be placed inside the input forms, we can get quick and effective form validation effects, even without using any error text message.
The follow code snippet will generate an input field with an @ sign, to indicate that we are looking for an email, and with a warning icon and a yellow outline that indicates that there is something wrong in the input field.
<div class="form-group has-warning has-feedback"> <label class="control-label" for="inputWarning">Email address input field with warning</label> <div class="input-group"> <span class="input-group-addon">@</span> <input type="text" class="form-control" id="inputWarning" aria-describedby="inputGroupWarningStatus"> </div> <span class="glyphicon glyphicon-warning-sign form-control-feedback" aria-hidden="true"></span> <span id="inputGroupWarningStatus" class="sr-only">(warning)</span> </div>
Again, we have only scratched the surface here. For more examples, take a look at Bootstrap’s Forms documentation.
Images and Icons
Images in Bootstrap can be made responsive by simply giving them the
.img-responsive class. This will apply
display:block; to the image in question, so that it scales to the parent element.
Besides making images responsive, we can easily add different effects. For example, rounded corners are applied with the
.img-rounded class, and the image can be shaped to be a circle by using
.img-circle, or to a thumbnail by using
Bootstrap comes bundled with over 260 glyphs in font format, from the Glyphicons Halflings set. Jan Kovařík, author and designer of Glyphicons, has made them available for Bootstrap for free and under the same license as Bootstrap, which is awesome. Font icons have many advantages over plain raster images, a big one being that they are scalable. They can also easily be customized using just CSS, so manipulating size or color, or even adding a drop a shadow, is a breeze.
Buttons, Button Groups, and Button Dropdowns
Buttons are one of the things every browser renders totally differently. If you want to have consistent design across all browsers, this is potentially a big problem. Luckily, Bootstrap has an elegant solution for buttons also. And besides making them consistent, it brings a lot of variations to play with. You can apply the
.btn class to
<input> elements. You can group a series of buttons together into a single line using the
.btn-group class on the parent
.btn-group, and providing the proper menu markup of unordered list of items.
The navigational bar, or navbar, is a Bootstrap component designed specifically to build the primary navigation menu of the website. On big screens, it is displayed horizontally, and on small and mobile screens (those below 768px), it transformed into a “hamburger” dropdown menu. Under the hood, navbar is an unordered inline list of menu items, with additional HTML elements that are added as desired. Among the possible additions are branding (either text or logo), form items such as a search bar, and menu dropdowns. Two styles are available to choose from out-of-the-box: light and dark, inverted. Items in the navbar can be aligned left or right by applying
.navbar-right classes, respectively.
Navbars can have 4 different position behaviors. The default float position has buffer space around it; the full-width static navbar scrolls away when the user scrolls down the page, and the fixed navbar, which can be either on the top or the bottom of the window, is always visible on the page, no matter where the user has scrolled to.
This covers only a few of the great Bootstrap components that puts Bootstrap ahead of similar frameworks, libraries, and toolkits. With Bootstrap, just a few simple CSS classes are all it takes to build a fully responsive and beautiful front end, fast and easily. It’s a great starting point for your next big project or startup.