2015-08-10 21:47:02 +02:00
---
2015-08-15 07:45:55 +02:00
layout: docs
2015-08-10 21:47:02 +02:00
title: Overview
2019-05-08 20:45:24 +02:00
description: Components and options for laying out your Bootstrap project, including wrapping containers, a powerful grid system, and responsive utility classes.
2015-08-10 21:47:02 +02:00
group: layout
2019-01-08 17:33:28 +01:00
aliases: "/docs/4.3/layout/"
2017-05-28 07:12:00 +02:00
toc: true
2015-08-10 21:47:02 +02:00
---
## Containers
2019-08-05 21:12:16 +02:00
Containers are the most basic layout element in Bootstrap and are **required when using our default grid system** . Containers are used to contain, pad, and (sometimes) center the content within them. While containers *can* be nested, most layouts do not require a nested container.
Bootstrap comes with three different containers:
- `.container` , which sets a `max-width` at each responsive breakpoint
- `.container-fluid` , which is `width: 100%` at all breakpoints
- `.container-{breakpoint}` , which is `width: 100%` until the specified breakpoint
The table below illustrates how each container's `max-width` compares to the original `.container` and `.container-fluid` across each breakpoint.
See them in action and compare them in our [Grid example ]({{< docsref "/examples/grid#containers" >}} ).
< table class = "table text-left" >
< thead >
< tr >
< th > < / th >
< th >
Extra small< br >
< span class = "font-weight-normal" > < 576px< / span >
< / th >
< th >
Small< br >
< span class = "font-weight-normal" > ≥ 576px< / span >
< / th >
< th >
Medium< br >
< span class = "font-weight-normal" > ≥ 768px< / span >
< / th >
< th >
Large< br >
< span class = "font-weight-normal" > ≥ 992px< / span >
< / th >
< th >
Extra large< br >
< span class = "font-weight-normal" > ≥ 1200px< / span >
< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > < code > .container< / code > < / td >
< td class = "text-muted" > 100%< / td >
< td > 540px< / td >
< td > 720px< / td >
< td > 960px< / td >
< td > 1140px< / td >
< / tr >
< tr >
< td > < code > .container-sm< / code > < / td >
< td class = "text-muted" > 100%< / td >
< td > 540px< / td >
< td > 720px< / td >
< td > 960px< / td >
< td > 1140px< / td >
< / tr >
< tr >
< td > < code > .container-md< / code > < / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td > 720px< / td >
< td > 960px< / td >
< td > 1140px< / td >
< / tr >
< tr >
< td > < code > .container-lg< / code > < / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td > 960px< / td >
< td > 1140px< / td >
< / tr >
< tr >
< td > < code > .container-xl< / code > < / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td > 1140px< / td >
< / tr >
< tr >
< td > < code > .container-fluid< / code > < / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< td class = "text-muted" > 100%< / td >
< / tr >
< / tbody >
< / table >
2015-08-10 21:47:02 +02:00
2019-07-22 02:38:36 +02:00
### All-in-one
Our default `.container` class is a responsive, fixed-width container, meaning its `max-width` changes at each breakpoint.
2015-08-10 21:47:02 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight html > }}
2015-08-10 21:47:02 +02:00
< div class = "container" >
<!-- Content here -->
< / div >
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2015-08-10 21:47:02 +02:00
2019-07-22 02:38:36 +02:00
### Fluid
2015-08-10 21:47:02 +02:00
Use `.container-fluid` for a full width container, spanning the entire width of the viewport.
2019-01-08 17:33:28 +01:00
{{< highlight html > }}
2015-08-10 21:47:02 +02:00
< div class = "container-fluid" >
...
< / div >
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2015-08-10 21:47:02 +02:00
2019-07-22 02:38:36 +02:00
### Responsive
2019-08-05 21:12:16 +02:00
Responsive containers are new in Bootstrap v4.4. They allow you to specify a class that is 100% wide until the specified breakpoint is reached, after which we apply `max-width` s for each of the higher breakpoints. For example, `.container-sm` is 100% wide to start until the `sm` breakpoint is reached, where it will scale up with `md` , `lg` , and `xl` .
2019-07-22 02:38:36 +02:00
{{< highlight html > }}
< div class = "container-sm" > 100% wide until small breakpoint< / div >
< div class = "container-md" > 100% wide until medium breakpoint< / div >
< div class = "container-lg" > 100% wide until large breakpoint< / div >
< div class = "container-xl" > 100% wide until extra large breakpoint< / div >
{{< / highlight > }}
2015-08-10 21:47:02 +02:00
## Responsive breakpoints
2016-11-08 13:36:04 +01:00
Since Bootstrap is developed to be mobile first, we use a handful of [media queries ](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries ) to create sensible breakpoints for our layouts and interfaces. These breakpoints are mostly based on minimum viewport widths and allow us to scale up elements as the viewport changes.
2015-08-10 21:47:02 +02:00
Bootstrap primarily uses the following media query ranges—or breakpoints—in our source Sass files for our layout, grid system, and components.
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-11-26 07:47:40 +01:00
// Extra small devices (portrait phones, less than 576px)
2018-04-30 01:02:21 +02:00
// No media query for `xs` since this is the default in Bootstrap
2015-08-10 21:47:02 +02:00
2016-11-26 07:47:40 +01:00
// Small devices (landscape phones, 576px and up)
@media (min-width: 576px) { ... }
2015-08-10 21:47:02 +02:00
2015-12-09 21:26:38 +01:00
// Medium devices (tablets, 768px and up)
@media (min-width: 768px) { ... }
2015-08-10 21:47:02 +02:00
2015-12-09 21:26:38 +01:00
// Large devices (desktops, 992px and up)
@media (min-width: 992px) { ... }
2015-08-10 21:47:02 +02:00
2015-12-09 21:26:38 +01:00
// Extra large devices (large desktops, 1200px and up)
@media (min-width: 1200px) { ... }
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2015-08-10 21:47:02 +02:00
Since we write our source CSS in Sass, all our media queries are available via Sass mixins:
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2018-04-30 01:02:21 +02:00
// No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
2015-08-10 21:47:02 +02:00
@include media-breakpoint-up(sm) { ... }
@include media-breakpoint-up(md) { ... }
@include media-breakpoint-up(lg) { ... }
@include media-breakpoint-up(xl) { ... }
2018-04-30 01:02:21 +02:00
// Example: Hide starting at `min-width: 0` , and then show at the `sm` breakpoint
.custom-class {
display: none;
}
2015-08-10 21:47:02 +02:00
@include media-breakpoint-up(sm) {
2018-04-30 01:02:21 +02:00
.custom-class {
2015-08-10 21:47:02 +02:00
display: block;
}
}
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2015-08-10 21:47:02 +02:00
We occasionally use media queries that go in the other direction (the given screen size *or smaller* ):
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-11-26 07:47:40 +01:00
// Extra small devices (portrait phones, less than 576px)
2018-01-03 08:42:03 +01:00
@media (max-width: 575.98px) { ... }
2015-08-10 21:47:02 +02:00
2015-12-09 21:26:38 +01:00
// Small devices (landscape phones, less than 768px)
2018-01-03 08:42:03 +01:00
@media (max-width: 767.98px) { ... }
2015-08-10 21:47:02 +02:00
2015-12-09 21:26:38 +01:00
// Medium devices (tablets, less than 992px)
2018-01-03 08:42:03 +01:00
@media (max-width: 991.98px) { ... }
2015-08-10 21:47:02 +02:00
2015-12-09 21:26:38 +01:00
// Large devices (desktops, less than 1200px)
2018-01-03 08:42:03 +01:00
@media (max-width: 1199.98px) { ... }
2015-08-10 21:47:02 +02:00
// Extra large devices (large desktops)
// No media query since the extra-large breakpoint has no upper bound on its width
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2015-08-10 21:47:02 +02:00
2019-01-08 17:33:28 +01:00
{{< callout info > }}
{{< partial " callout-info-mediaqueries-breakpoints . md " > }}
{{< / callout > }}
2017-11-20 11:13:37 +01:00
2015-08-10 21:47:02 +02:00
Once again, these media queries are also available via Sass mixins:
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2015-08-10 21:47:02 +02:00
@include media-breakpoint-down(xs) { ... }
@include media-breakpoint-down(sm) { ... }
@include media-breakpoint-down(md) { ... }
@include media-breakpoint-down(lg) { ... }
2018-04-30 01:02:21 +02:00
// No media query necessary for xl breakpoint as it has no upper bound on its width
// Example: Style from medium breakpoint and down
@include media-breakpoint-down(md) {
.custom-class {
display: block;
}
}
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2016-04-24 11:44:01 +02:00
2016-12-31 20:48:55 +01:00
There are also media queries and mixins for targeting a single segment of screen sizes using the minimum and maximum breakpoint widths.
2016-04-24 11:44:01 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-11-26 07:47:40 +01:00
// Extra small devices (portrait phones, less than 576px)
2018-01-03 08:42:03 +01:00
@media (max-width: 575.98px) { ... }
2016-04-24 11:44:01 +02:00
2016-11-26 07:47:40 +01:00
// Small devices (landscape phones, 576px and up)
2018-01-03 08:42:03 +01:00
@media (min-width: 576px) and (max-width: 767.98px) { ... }
2016-04-24 11:44:01 +02:00
// Medium devices (tablets, 768px and up)
2018-01-03 08:42:03 +01:00
@media (min-width: 768px) and (max-width: 991.98px) { ... }
2016-04-24 11:44:01 +02:00
// Large devices (desktops, 992px and up)
2018-01-03 08:42:03 +01:00
@media (min-width: 992px) and (max-width: 1199.98px) { ... }
2016-04-24 11:44:01 +02:00
// Extra large devices (large desktops, 1200px and up)
@media (min-width: 1200px) { ... }
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2016-04-24 11:44:01 +02:00
These media queries are also available via Sass mixins:
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-04-24 11:44:01 +02:00
@include media-breakpoint-only(xs) { ... }
@include media-breakpoint-only(sm) { ... }
@include media-breakpoint-only(md) { ... }
@include media-breakpoint-only(lg) { ... }
@include media-breakpoint-only(xl) { ... }
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2016-04-24 11:44:01 +02:00
2016-12-31 13:25:52 +01:00
Similarly, media queries may span multiple breakpoint widths:
2016-04-24 11:44:01 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-07-12 21:27:06 +02:00
// Example
2016-12-31 20:48:55 +01:00
// Apply styles starting from medium devices and up to extra large devices
2018-01-03 08:42:03 +01:00
@media (min-width: 768px) and (max-width: 1199.98px) { ... }
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2016-04-24 11:44:01 +02:00
2016-12-31 13:25:52 +01:00
The Sass mixin for targeting the same screen size range would be:
2016-04-24 11:44:01 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-12-31 20:48:55 +01:00
@include media-breakpoint-between(md, xl) { ... }
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2016-10-27 18:26:23 +02:00
## Z-index
Several Bootstrap components utilize `z-index` , the CSS property that helps control layout by providing a third axis to arrange content. We utilize a default z-index scale in Bootstrap that's been designed to properly layer navigation, tooltips and popovers, modals, and more.
2017-12-23 22:17:23 +01:00
These higher values start at an arbitrary number, high and specific enough to ideally avoid conflicts. We need a standard set of these across our layered components—tooltips, popovers, navbars, dropdowns, modals—so we can be reasonably consistent in the behaviors. There's no reason we couldn't have used `100` + or `500` +.
We don't encourage customization of these individual values; should you change one, you likely need to change them all.
2016-10-27 18:26:23 +02:00
2019-01-08 17:33:28 +01:00
{{< highlight scss > }}
2016-10-27 18:26:23 +02:00
$zindex-dropdown: 1000 !default;
2017-10-17 07:51:34 +02:00
$zindex-sticky: 1020 !default;
2017-01-02 20:48:51 +01:00
$zindex-fixed: 1030 !default;
2016-10-27 18:31:38 +02:00
$zindex-modal-backdrop: 1040 !default;
2016-10-27 18:26:23 +02:00
$zindex-modal: 1050 !default;
2016-10-27 18:31:38 +02:00
$zindex-popover: 1060 !default;
$zindex-tooltip: 1070 !default;
2019-01-08 17:33:28 +01:00
{{< / highlight > }}
2016-10-27 18:26:23 +02:00
2017-12-23 22:17:23 +01:00
To handle overlapping borders within components (e.g., buttons and inputs in input groups), we use low single digit `z-index` values of `1` , `2` , and `3` for default, hover, and active states. On hover/focus/active, we bring a particular element to the forefront with a higher `z-index` value to show their border over the sibling elements.