跳到主要内容 跳到文档导航
in English

网格系统

使用我们强大的移动优先 flexbox 网格来构建各种形状和大小的布局,这要归功于 12 列系统、6 个默认响应层、Sass 变量和 mixin 以及数十个预定义类。

例子

Bootstrap 的网格系统使用一系列容器、行和列来布局和对齐内容。它是用flexbox构建的,并且是完全响应的。以下是网格系统如何组合在一起的示例和深入解释。

刚接触或不熟悉 flexbox? 阅读这个 CSS Tricks flexbox 指南,了解背景、术语、指南和代码片段。
柱子
柱子
柱子
<div class="container">
  <div class="row">
    <div class="col">
      Column
    </div>
    <div class="col">
      Column
    </div>
    <div class="col">
      Column
    </div>
  </div>
</div>

上面的示例使用我们预定义的网格类在所有设备和视口中创建了三个等宽的列。这些列在父页面的中心.container

这个怎么运作

分解它,这是网格系统如何组合在一起的:

  • 我们的网格支持六个响应断点断点基于min-width媒体查询,这意味着它们会影响该断点及其上方的所有断点(例如,.col-sm-4适用于smmdlgxlxxl)。这意味着您可以通过每个断点控制容器和列的大小和行为。

  • 容器居中并水平填充您的内容。用于跨所有视口和设备.container的响应式像素宽度,或.container-fluid用于流体和像素宽度组合的width: 100%响应式容器(例如.container-md)。

  • 行是列的包装器。每列都有水平padding的(称为排水沟),用于控制它们之间的空间。然后在具有负边距的行上抵消这padding一点,以确保列中的内容在视觉上与左侧对齐。行还支持修饰符类以统一应用列大小装订线类来更改内容的间距。

  • 列非常灵活。每行有 12 个模板列,允许您创建跨越任意数量列的不同元素组合。列类指示要跨越的模板列的数量(例如,col-4跨越四个)。widths 以百分比设置,因此您始终具有相同的相对大小。

  • 排水沟也具有响应性和可定制性。 Gutter 类可用于所有断点,大小与我们的margin 和 padding 间距相同。使用类更改水平装订线,使用 更改.gx-*垂直装订线.gy-*,或使用类更改所有装订线.g-*.g-0也可用于去除排水沟。

  • Sass 变量、映射和混合为网格提供动力。如果您不想在 Bootstrap 中使用预定义的网格类,您可以使用我们的网格源 Sass来创建您自己的具有更多语义标记的网格。我们还包括一些 CSS 自定义属性来使用这些 Sass 变量,从而为您提供更大的灵活性。

请注意flexbox的限制和错误,例如无法将某些 HTML 元素用作 flex 容器

网格选项

Bootstrap 的网格系统可以适应所有六个默认断点以及您自定义的任何断点。六个默认网格层如下:

  • 超小号 (xs)
  • 小(平方米)
  • 中 (md)
  • 大 (lg)
  • 特大号 (xl)
  • 特大号 (xxl)

如上所述,每个断点都有自己的容器、唯一的类前缀和修饰符。以下是网格在这些断点之间的变化方式:

xs
<576 像素
sm≥576px
_
md≥768px
_
lg≥992px
_
xl
≥1200 像素
xxl
≥1400px
容器max-width 无(自动) 540像素 720像素 960像素 1140像素 1320像素
类前缀 .col- .col-sm- .col-md- .col-lg- .col-xl- .col-xxl-
# 列数 12
天沟宽度 1.5rem(左右0.75rem)
自定义排水沟 是的
可嵌套 是的
列排序 是的

自动布局列

利用特定于断点的列类来轻松调整列大小,而无需像.col-sm-6.

等宽

例如,这里有两个网格布局适用于每个设备和视口,从xsxxl. 为您需要的每个断点添加任意数量的无单位类,并且每列的宽度都相同。

1 的 2
2 个,共 2 个
1 个,共 3 个
2 个,共 3 个
3 之 3
<div class="container">
  <div class="row">
    <div class="col">
      1 of 2
    </div>
    <div class="col">
      2 of 2
    </div>
  </div>
  <div class="row">
    <div class="col">
      1 of 3
    </div>
    <div class="col">
      2 of 3
    </div>
    <div class="col">
      3 of 3
    </div>
  </div>
</div>

设置一列宽

flexbox 网格列的自动布局还意味着您可以设置一列的宽度并让同级列自动调整其大小。您可以使用预定义的网格类(如下所示)、网格混合或内联宽度。请注意,无论中心列的宽度如何,其他列都会调整大小。

1 个,共 3 个
3 个中的 2 个(更宽)
3 之 3
1 个,共 3 个
3 个中的 2 个(更宽)
3 之 3
<div class="container">
  <div class="row">
    <div class="col">
      1 of 3
    </div>
    <div class="col-6">
      2 of 3 (wider)
    </div>
    <div class="col">
      3 of 3
    </div>
  </div>
  <div class="row">
    <div class="col">
      1 of 3
    </div>
    <div class="col-5">
      2 of 3 (wider)
    </div>
    <div class="col">
      3 of 3
    </div>
  </div>
</div>

可变宽度内容

使用col-{breakpoint}-auto类根据其内容的自然宽度来调整列的大小。

1 个,共 3 个
可变宽度内容
3 之 3
1 个,共 3 个
可变宽度内容
3 之 3
<div class="container">
  <div class="row justify-content-md-center">
    <div class="col col-lg-2">
      1 of 3
    </div>
    <div class="col-md-auto">
      Variable width content
    </div>
    <div class="col col-lg-2">
      3 of 3
    </div>
  </div>
  <div class="row">
    <div class="col">
      1 of 3
    </div>
    <div class="col-md-auto">
      Variable width content
    </div>
    <div class="col col-lg-2">
      3 of 3
    </div>
  </div>
</div>

响应类

Bootstrap 的网格包括六层预定义类,用于构建复杂的响应式布局。在您认为合适的超小型、小型、中型、大型或超大型设备上自定义列的大小。

所有断点

对于从最小设备到最大设备都相同的网格,请使用.col.col-*类。当你需要一个特别大小的列时,指定一个编号的类;否则,请随意坚持.col

山口
山口
山口
山口
col-8
col-4
<div class="container">
  <div class="row">
    <div class="col">col</div>
    <div class="col">col</div>
    <div class="col">col</div>
    <div class="col">col</div>
  </div>
  <div class="row">
    <div class="col-8">col-8</div>
    <div class="col-4">col-4</div>
  </div>
</div>

堆叠成水平

使用一组.col-sm-*类,您可以创建一个基本的网格系统,该系统从堆叠开始并在小断点 ( sm) 处变为水平。

col-sm-8
col-sm-4
col-sm
col-sm
col-sm
<div class="container">
  <div class="row">
    <div class="col-sm-8">col-sm-8</div>
    <div class="col-sm-4">col-sm-4</div>
  </div>
  <div class="row">
    <div class="col-sm">col-sm</div>
    <div class="col-sm">col-sm</div>
    <div class="col-sm">col-sm</div>
  </div>
</div>

连连看

不希望您的列简单地堆叠在某些网格层中?根据需要为每一层使用不同类的组合。请参阅下面的示例,以更好地了解它是如何工作的。

.col-md-8
.col-6 .col-md-4
.col-6 .col-md-4
.col-6 .col-md-4
.col-6 .col-md-4
.col-6
.col-6
<div class="container">
  <!-- Stack the columns on mobile by making one full-width and the other half-width -->
  <div class="row">
    <div class="col-md-8">.col-md-8</div>
    <div class="col-6 col-md-4">.col-6 .col-md-4</div>
  </div>

  <!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
  <div class="row">
    <div class="col-6 col-md-4">.col-6 .col-md-4</div>
    <div class="col-6 col-md-4">.col-6 .col-md-4</div>
    <div class="col-6 col-md-4">.col-6 .col-md-4</div>
  </div>

  <!-- Columns are always 50% wide, on mobile and desktop -->
  <div class="row">
    <div class="col-6">.col-6</div>
    <div class="col-6">.col-6</div>
  </div>
</div>

行列

使用响应.row-cols-*式类快速设置最能呈现您的内容和布局的列数。虽然普通.col-*类适用于单个列(例如,.col-md-4),但行列类在父级上设置.row为包含列的默认值。有了.row-cols-auto你,你可以给列它们的自然宽度。

使用这些行列类快速创建基本的网格布局或控制您的卡片布局并在需要时在列级别覆盖。

柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-2">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
  </div>
</div>
柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-3">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
  </div>
</div>
柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-auto">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
  </div>
</div>
柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-4">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
  </div>
</div>
柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-4">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col-6">Column</div>
    <div class="col">Column</div>
  </div>
</div>
柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-1 row-cols-sm-2 row-cols-md-4">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
  </div>
</div>
柱子
柱子
柱子
柱子
柱子
柱子
柱子
柱子
柱子
柱子
柱子
柱子
<div class="container">
  <div class="row row-cols-2 row-cols-lg-3">
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col">Column</div>
    <div class="col-4 col-lg-2">Column</div>
    <div class="col-4 col-lg-2">Column</div>
    <div class="col-4 col-lg-2">Column</div>
    <div class="col-4 col-lg-2">Column</div>
    <div class="col-4 col-lg-2">Column</div>
    <div class="col-4 col-lg-2">Column</div>
  </div>
</div>

你也可以使用附带的 Sass mixin row-cols(),:

.element {
  // Three columns to start
  @include row-cols(3);

  // Five columns from medium breakpoint up
  @include media-breakpoint-up(md) {
    @include row-cols(5);
  }
}

嵌套

要使用默认网格嵌套您的内容,请在现有列中添加一.row组新列。嵌套行应包括一组不超过 12 列的列(不需要使用所有 12 个可用列)。.col-sm-*.col-sm-*

级别 1:.col-sm-3
级别 2:.col-8 .col-sm-6
2 级:.col-4 .col-sm-6
<div class="container">
  <div class="row">
    <div class="col-sm-3">
      Level 1: .col-sm-3
    </div>
    <div class="col-sm-9">
      <div class="row">
        <div class="col-8 col-sm-6">
          Level 2: .col-8 .col-sm-6
        </div>
        <div class="col-4 col-sm-6">
          Level 2: .col-4 .col-sm-6
        </div>
      </div>
    </div>
  </div>
</div>

萨斯

使用 Bootstrap 的 Sass 源文件时,您可以选择使用 Sass 变量和 mixin 来创建自定义、语义和响应式页面布局。我们预定义的网格类使用这些相同的变量和 mixin 来提供一整套现成的类,以实现快速响应的布局。

变量

变量和映射确定列数、装订线宽度和开始浮动列的媒体查询点。我们使用这些来生成上面记录的预定义网格类,以及下面列出的自定义 mixins。

$grid-columns:      12;
$grid-gutter-width: 1.5rem;
$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px
);
$container-max-widths: (
  sm: 540px,
  md: 720px,
  lg: 960px,
  xl: 1140px,
  xxl: 1320px
);

混合

Mixin 与网格变量结合使用,为各个网格列生成语义 CSS。

// Creates a wrapper for a series of columns
@include make-row();

// Make the element grid-ready (applying everything but the width)
@include make-col-ready();

// Without optional size values, the mixin will create equal columns (similar to using .col)
@include make-col();
@include make-col($size, $columns: $grid-columns);

// Get fancy by offsetting, or changing the sort order
@include make-col-offset($size, $columns: $grid-columns);

示例用法

您可以将变量修改为您自己的自定义值,或者仅使用带有默认值的 mixin。这是一个使用默认设置创建两列布局的示例,其间有间隙。

.example-container {
  @include make-container();
  // Make sure to define this width after the mixin to override
  // `width: 100%` generated by `make-container()`
  width: 800px;
}

.example-row {
  @include make-row();
}

.example-content-main {
  @include make-col-ready();

  @include media-breakpoint-up(sm) {
    @include make-col(6);
  }
  @include media-breakpoint-up(lg) {
    @include make-col(8);
  }
}

.example-content-secondary {
  @include make-col-ready();

  @include media-breakpoint-up(sm) {
    @include make-col(6);
  }
  @include media-breakpoint-up(lg) {
    @include make-col(4);
  }
}
主要内容
次要内容
<div class="example-container">
  <div class="example-row">
    <div class="example-content-main">Main content</div>
    <div class="example-content-secondary">Secondary content</div>
  </div>
</div>

自定义网格

使用我们内置的网格 Sass 变量和映射,可以完全自定义预定义的网格类。更改层数、媒体查询维度和容器宽度,然后重新编译。

列和排水沟

网格列的数量可以通过 Sass 变量进行修改。$grid-columns用于生成每个单独列的宽度(百分比),同时$grid-gutter-width设置列间距的宽度。

$grid-columns: 12 !default;
$grid-gutter-width: 1.5rem !default;

网格层

除了列本身之外,您还可以自定义网格层的数量。如果您只想要四个网格层,您可以将$grid-breakpointsand更新为$container-max-widths如下内容:

$grid-breakpoints: (
  xs: 0,
  sm: 480px,
  md: 768px,
  lg: 1024px
);

$container-max-widths: (
  sm: 420px,
  md: 720px,
  lg: 960px
);

在对 Sass 变量或映射进行任何更改时,您需要保存更改并重新编译。这样做将输出一组全新的预定义网格类,用于列宽、偏移和排序。响应式可见性实用程序也将更新为使用自定义断点。确保在px(not rem, em, or %) 中设置网格值。