Bootstrap is built on a responsive 12-column grid. We've also included fixed- and fluid-width layouts based on that system.
Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.
<!DOCTYPE html> <html lang="en"> ... </html>
Bootstrap sets basic global display, typography, and link styles. Specifically, we:
margin
on the bodybackground-color: white;
on the body
@baseFontFamily
, @baseFontSize
, and @baseLineHeight
attributes as our typographyic base@linkColor
and apply link underlines only on :hover
These styles can be found within scaffolding.less.
With Bootstrap 2, the old reset block has been dropped in favor of Normalize.css, a project by Nicolas Gallagher that also powers the HTML5 Boilerplate. While we use much of Normalize within our reset.less, we have removed some elements specifically for Bootstrap.
The default Bootstrap grid system utilizes 12 columns, making for a 940px wide container without responsive features enabled. With the responsive CSS file added, the grid adapts to be 724px and 1170px wide depending on your viewport. Below 767px viewports, the columns become fluid and stack vertically.
For a simple two column layout, create a .row
and add the appropriate number of .span*
columns. As this is a 12-column grid, each .span*
spans a number of those 12 columns, and should always add up to 12 for each row.
<div class="row"> <div class="span4">...</div> <div class="span8">...</div> </div>
Given this example, we have .span4
and .span8
, making for 12 total columns and a complete row.
Move columns to the left using .offset*
classes. Each class increases the left margin of a column by a whole column. For example, .offset4
moves .span4
over four columns.
<div class="row"> <div class="span4">...</div> <div class="span4 offset4">...</div> </div>
To nest your content with the default grid, add a new .row
and set of .span*
columns within an existing .span*
column. Nested rows should include a set of columns that add up to the number of columns of its parent.
Here two nested .span4
columns are placed within a .span8
.
<div class="row"> <div class="span10"> Level 1 column <div class="row"> <div class="span5">Level 2</div> <div class="span5">Level 2</div> </div> </div> </div>
The fluid grid system uses percents instead of pixels for column widths. It has the same responsive capabilities as our fixed grid system, ensuring proper proportions for key screen resolutions and devices.
Make any row "fluid" by changing .row
to .row-fluid
. The column classes stay the exact same, making it easy to flip between fixed and fluid grids.
<div class="row-fluid"> <div class="span4">...</div> <div class="span8">...</div> </div>
Nesting with fluid grids is a bit different: the number of nested columns should not match the parent's number of columns. Instead, each level of nested columns are reset because each row takes up 100% of the parent column.
<div class="row-fluid"> <div class="span12"> Level 1 of column <div class="row-fluid"> <div class="span6">Level 2</div> <div class="span6">Level 2</div> </div> </div> </div>
The default grid is built on a few variables for easy customization via LESS. All variables can be found in variables.less.
Variable | Default value | Description |
---|---|---|
@gridColumns |
12 | Number of columns |
@gridColumnWidth |
60px | Width of each column |
@gridGutterWidth |
20px | Negative space between columns |
@fluidGridColumnWidth |
6.382978723% | Width of each fluid column |
@fluidGridGutterWidth |
2.127659574% | Negative space between fluid columns |
Modifying the grid means changing the three @grid*
variables and recompiling Bootstrap. Change the grid variables in variables.less and use one of the four ways documented to recompile. If you're adding more columns, be sure to add the CSS for those in grid.less.
Customization of the grid only works at the default level, the 940px grid. To maintain the responsive aspects of Bootstrap, you'll also have to manually customize the grids in responsive.less until a future update improves this.
Provides a common fixed-width (and optionally responsive) layout with only <div class="container">
required.
<body> <div class="container"> ... </div> </body>
Create a fluid, two-column page with <div class="container-fluid">
—great for applications and docs.
<div class="container-fluid"> <div class="row-fluid"> <div class="span2"> <!--Sidebar content--> </div> <div class="span10"> <!--Body content--> </div> </div> </div>
Turn on responsive CSS in your project by including the proper meta tag and additional stylesheet within the <head>
of your document. If you've compiled Bootstrap from the Customize page, you need only include the meta tag.
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
Heads up! Bootstrap doesn't include responsive features by default at this time as not everything needs to be responsive. Instead of encouraging developers to remove this feature, we figure it best to enable it as needed.
Media queries allow for custom CSS based on a number of conditions—ratios, widths, display type, etc—but usually focuses around min-width
and max-width
.
Use media queries responsibly and only as a start to your mobile audiences. For larger projects, do consider dedicated code bases and not layers of media queries.
Bootstrap supports a handful of media queries in a single file to help make your projects more appropriate on different devices and screen resolutions. Here's what's included:
Label | Layout width | Column width | Gutter width |
---|---|---|---|
Smartphones | 480px and below | Fluid columns, no fixed widths | |
Smartphones to tablets | 767px and below | Fluid columns, no fixed widths | |
Portrait tablets | 768px and above | 42px | 20px |
Default | 980px and up | 60px | 20px |
Large display | 1200px and up | 70px | 30px |
/* Landscape phones and down */ @media (max-width: 480px) { ... } /* Landscape phone to portrait tablet */ @media (max-width: 767px) { ... } /* Portrait tablet to landscape and desktop */ @media (min-width: 768px) and (max-width: 979px) { ... } /* Large desktop */ @media (min-width: 1200px) { ... }
For faster mobile-friendly development, use these utility classes for showing and hiding content by device. Below is a table of the available classes and their effect on a given media query layout (labeled by device). They can be found in responsive.less
.
Class | Phones 480px and below | Tablets 767px and below | Desktops 768px and above |
---|---|---|---|
.visible-phone |
Visible | Hidden | Hidden |
.visible-tablet |
Hidden | Visible | Hidden |
.visible-desktop |
Hidden | Hidden | Visible |
.hidden-phone |
Hidden | Visible | Visible |
.hidden-tablet |
Visible | Hidden | Visible |
.hidden-desktop |
Visible | Visible | Hidden |
Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation.
Resize your browser or load on different devices to test the above classes.
Green checkmarks indicate that class is visible in your current viewport.
Here, green checkmarks indicate that class is hidden in your current viewport.