mirror of
https://github.com/twbs/bootstrap.git
synced 2024-11-30 12:24:19 +01:00
d94148bf50
* Follow-up to #29095 This PR fixes the responsive containers that were added in #29095, originally stubbed out in #25631. Apologies to @browner12 for getting that wrong. Fixes #25631. * update navbar as well because we cannot reset all containers uniformly * Update navbars example to include container-xl example to ensure containers match * rewrite responsive containers docs, add table of max-widths * Update container docs - Move table up to the intro - Remove the container example because it's actually hella confusing - Update and link to grid example as a demo instead
278 lines
9.5 KiB
Markdown
278 lines
9.5 KiB
Markdown
---
|
|
layout: docs
|
|
title: Overview
|
|
description: Components and options for laying out your Bootstrap project, including wrapping containers, a powerful grid system, and responsive utility classes.
|
|
group: layout
|
|
aliases: "/docs/4.3/layout/"
|
|
toc: true
|
|
---
|
|
|
|
## Containers
|
|
|
|
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>
|
|
|
|
### All-in-one
|
|
|
|
Our default `.container` class is a responsive, fixed-width container, meaning its `max-width` changes at each breakpoint.
|
|
|
|
{{< highlight html >}}
|
|
<div class="container">
|
|
<!-- Content here -->
|
|
</div>
|
|
{{< /highlight >}}
|
|
|
|
### Fluid
|
|
|
|
Use `.container-fluid` for a full width container, spanning the entire width of the viewport.
|
|
|
|
{{< highlight html >}}
|
|
<div class="container-fluid">
|
|
...
|
|
</div>
|
|
{{< /highlight >}}
|
|
|
|
### Responsive
|
|
|
|
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`.
|
|
|
|
{{< 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 >}}
|
|
|
|
## Responsive breakpoints
|
|
|
|
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.
|
|
|
|
Bootstrap primarily uses the following media query ranges—or breakpoints—in our source Sass files for our layout, grid system, and components.
|
|
|
|
{{< highlight scss >}}
|
|
// Extra small devices (portrait phones, less than 576px)
|
|
// No media query for `xs` since this is the default in Bootstrap
|
|
|
|
// Small devices (landscape phones, 576px and up)
|
|
@media (min-width: 576px) { ... }
|
|
|
|
// Medium devices (tablets, 768px and up)
|
|
@media (min-width: 768px) { ... }
|
|
|
|
// Large devices (desktops, 992px and up)
|
|
@media (min-width: 992px) { ... }
|
|
|
|
// Extra large devices (large desktops, 1200px and up)
|
|
@media (min-width: 1200px) { ... }
|
|
{{< /highlight >}}
|
|
|
|
Since we write our source CSS in Sass, all our media queries are available via Sass mixins:
|
|
|
|
{{< highlight scss >}}
|
|
// No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
|
|
@include media-breakpoint-up(sm) { ... }
|
|
@include media-breakpoint-up(md) { ... }
|
|
@include media-breakpoint-up(lg) { ... }
|
|
@include media-breakpoint-up(xl) { ... }
|
|
|
|
// Example: Hide starting at `min-width: 0`, and then show at the `sm` breakpoint
|
|
.custom-class {
|
|
display: none;
|
|
}
|
|
@include media-breakpoint-up(sm) {
|
|
.custom-class {
|
|
display: block;
|
|
}
|
|
}
|
|
{{< /highlight >}}
|
|
|
|
We occasionally use media queries that go in the other direction (the given screen size *or smaller*):
|
|
|
|
{{< highlight scss >}}
|
|
// Extra small devices (portrait phones, less than 576px)
|
|
@media (max-width: 575.98px) { ... }
|
|
|
|
// Small devices (landscape phones, less than 768px)
|
|
@media (max-width: 767.98px) { ... }
|
|
|
|
// Medium devices (tablets, less than 992px)
|
|
@media (max-width: 991.98px) { ... }
|
|
|
|
// Large devices (desktops, less than 1200px)
|
|
@media (max-width: 1199.98px) { ... }
|
|
|
|
// Extra large devices (large desktops)
|
|
// No media query since the extra-large breakpoint has no upper bound on its width
|
|
{{< /highlight >}}
|
|
|
|
{{< callout info >}}
|
|
{{< partial "callout-info-mediaqueries-breakpoints.md" >}}
|
|
{{< /callout >}}
|
|
|
|
Once again, these media queries are also available via Sass mixins:
|
|
|
|
{{< highlight scss >}}
|
|
@include media-breakpoint-down(xs) { ... }
|
|
@include media-breakpoint-down(sm) { ... }
|
|
@include media-breakpoint-down(md) { ... }
|
|
@include media-breakpoint-down(lg) { ... }
|
|
// 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;
|
|
}
|
|
}
|
|
{{< /highlight >}}
|
|
|
|
There are also media queries and mixins for targeting a single segment of screen sizes using the minimum and maximum breakpoint widths.
|
|
|
|
{{< highlight scss >}}
|
|
// Extra small devices (portrait phones, less than 576px)
|
|
@media (max-width: 575.98px) { ... }
|
|
|
|
// Small devices (landscape phones, 576px and up)
|
|
@media (min-width: 576px) and (max-width: 767.98px) { ... }
|
|
|
|
// Medium devices (tablets, 768px and up)
|
|
@media (min-width: 768px) and (max-width: 991.98px) { ... }
|
|
|
|
// Large devices (desktops, 992px and up)
|
|
@media (min-width: 992px) and (max-width: 1199.98px) { ... }
|
|
|
|
// Extra large devices (large desktops, 1200px and up)
|
|
@media (min-width: 1200px) { ... }
|
|
{{< /highlight >}}
|
|
|
|
These media queries are also available via Sass mixins:
|
|
|
|
{{< highlight scss >}}
|
|
@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) { ... }
|
|
{{< /highlight >}}
|
|
|
|
Similarly, media queries may span multiple breakpoint widths:
|
|
|
|
{{< highlight scss >}}
|
|
// Example
|
|
// Apply styles starting from medium devices and up to extra large devices
|
|
@media (min-width: 768px) and (max-width: 1199.98px) { ... }
|
|
{{< /highlight >}}
|
|
|
|
The Sass mixin for targeting the same screen size range would be:
|
|
|
|
{{< highlight scss >}}
|
|
@include media-breakpoint-between(md, xl) { ... }
|
|
{{< /highlight >}}
|
|
|
|
## 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.
|
|
|
|
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.
|
|
|
|
{{< highlight scss >}}
|
|
$zindex-dropdown: 1000 !default;
|
|
$zindex-sticky: 1020 !default;
|
|
$zindex-fixed: 1030 !default;
|
|
$zindex-modal-backdrop: 1040 !default;
|
|
$zindex-modal: 1050 !default;
|
|
$zindex-popover: 1060 !default;
|
|
$zindex-tooltip: 1070 !default;
|
|
{{< /highlight >}}
|
|
|
|
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.
|