Bootstrap/docs/4.5/layout/grid

来自菜鸟教程
跳转至:导航、​搜索

借助十二列系统,五个默认响应层,Sass变量和混合以及数十个预定义类,使用我们强大的移动优先Flexbox网格来构建所有形状和大小的布局。

这个怎么运作

Bootstrap的网格系统使用一系列容器,行和列来布局和对齐内容。 它内置 弹性盒 并且反应灵敏。 下面是一个示例,并深入研究了网格如何组合在一起。

新手还是不熟悉flexbox? 阅读此CSS Tricks flexbox指南 有关背景,术语,指南和代码段的信息。

三列之一
三列之一
三列之一
<div class="container">
<div class="row">
<div class="col-sm"> 三列之一 </div>
<div class="col-sm"> 三列之一 </div>
<div class="col-sm"> 三列之一 </div>
</div>
</div>

上面的示例使用预定义的网格类在小型,中型,大型和超大型设备上创建了三个等宽列。 这些列位于父页面的中心 .container.

分解一下,它是这样工作的:

  • 容器提供了一种使您的网站内容居中和水平填充的方法。 Use .container 对于响应像素宽度或 .container-fluid for width: 100% 所有视口和设备尺寸。
  • 行是列的包装。 每列有水平 padding (称为装订线)以控制它们之间的空间。 This padding 然后在具有负边距的行上抵消。 这样,列中的所有内容在视觉上都在左侧向下对齐。
  • 在网格布局中,必须将内容放置在列内,并且只有列可以是行的直接子代。
  • 多亏了flexbox,没有指定网格的列 width 将自动按等宽列布局。 例如,四个实例 .col-sm 会自动从小断点开始向上增加25%的宽度。 见 自动布局列 部分以获取更多示例。
  • 列类别表示您希望在每行最多12列中使用的列数。 因此,如果要跨三个相等宽度的列,则可以使用 .col-4.
  • width 设置为百分比,因此相对于其父元素而言,它们始终是可变的且大小合适。
  • 列有水平 padding 在各个列之间创建装订线,但是,您可以删除 margin 从行和 padding 从列 .no-gutters 在...上 .row.
  • 为了使网格响应,有五个网格断点,每个断点一个 响应断点 :所有断点(超小),小,中,大和特大。
  • 网格断点基于最小宽度的媒体查询,这意味着 它们适用于该一个断点及其上方的所有断点 (例如。, .col-sm-4 适用于小型,中型,大型和超大型设备,但不适用于第一个 xs 断点)。
  • 您可以使用预定义的网格类(例如 .col-4 ) or 无礼的混蛋 以获得更多的语义标记。

注意局限性和 Flexbox周围的错误 , 如 无法将某些HTML元素用作Flex容器 .

网格选项

虽然Bootstrap使用 em s or rem 用于定义大多数尺寸, px s用于网格断点和容器宽度。 这是因为视口宽度以像素为单位,并且不会随 字体大小 .

借助便捷的表格,了解Bootstrap网格系统在多个设备上如何工作。

特小
<576px


≥576像素

介质
≥768像素


≥992像素

超大
≥1200像素

最大容器宽度

无(自动)

540像素

720px

960px

1140px

类前缀

.col-

.col-sm-

.col-md-

.col-lg-

.col-xl-

列数

12

天沟宽度

30像素(每列15像素)

可嵌套

Yes

列顺序

Yes

自动布局列

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

等宽

例如,以下是两个网格布局,它们适用于每个设备和视口,从 xs to xl 。为所需的每个断点添加任意数量的无单元类,每列的宽度相同。

1的2
2之2
1之3
2之3
3之3
<div class="container">
<div class="row">
<div class="col"> 1的2 </div>
<div class="col"> 2之2 </div>
</div>
<div class="row">
<div class="col"> 1之3 </div>
<div class="col"> 2之3 </div>
<div class="col"> 3之3 </div>
</div>
</div>

等宽多行

通过插入一个 .w-100 您希望列中断到新行的位置。 通过混合使休息更灵敏 .w-100 跟一些 响应式显示实用程序 .

有一个 Safari Flexbox错误 阻止了它的工作而没有明确的 flex-basis or border 。对于较旧的浏览器版本,有一些解决方法,但是如果您的目标浏览器不属于多虫的版本,则不必这样做。

col
col
col
col
<div class="container">
<div class="row">
<div class="col"> col </div>
<div class="col"> col </div>
<div class="w-100"></div>
<div class="col"> col </div>
<div class="col"> col </div>
</div>
</div>

设置一列宽度

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

1之3
2之3(较宽)
3之3
1之3
2之3(较宽)
3之3
<div class="container">
<div class="row">
<div class="col"> 1之3 </div>
<div class="col-6"> 2之3(较宽) </div>
<div class="col"> 3之3 </div>
</div>
<div class="row">
<div class="col"> 1之3 </div>
<div class="col-5"> 2之3(较宽) </div>
<div class="col"> 3之3 </div>
</div>
</div>

可变宽度内容

Use 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之3 </div>
<div class="col-md-auto"> 可变宽度内容 </div>
<div class="col col-lg-2"> 3之3 </div>
</div>
<div class="row">
<div class="col"> 1之3 </div>
<div class="col-md-auto"> 可变宽度内容 </div>
<div class="col col-lg-2"> 3之3 </div>
</div>
</div>

回应式课程

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

所有断点

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

col
col
col
col
第8列
第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"> 第8列 </div>
<div class="col-4"> 第4列 </div>
</div>
</div>

堆叠到水平

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

col-sm-8
col-sm-4
山姆
山姆
山姆
<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"> 山姆 </div>
<div class="col-sm"> 山姆 </div>
<div class="col-sm"> 山姆 </div>
</div>
</div>

连连看

不想让您的列简单地堆叠在某些网格层中吗? 根据需要为每个层使用不同类的组合。 请参阅下面的示例,以更好地了解所有工作原理。

通过使一个全角和另一个半角堆叠在移动设备上的列
.col-md-8
.col-6 .col-md-4
在移动设备上,列的起始宽度为50%,在台式机上,列的宽度最高为33.3%
.col-6 .col-md-4
.col-6 .col-md-4
.col-6 .col-md-4
在移动设备和台式机上,列的宽度始终为50%
.col-6
.col-6
<div class="container">
 通过使一个全角和另一个半角堆叠在移动设备上的列 
<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>
 在移动设备上,列的起始宽度为50%,在台式机上,列的宽度最高为33.3% 
<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>
 在移动设备和台式机上,列的宽度始终为50% 
<div class="row">
<div class="col-6"> .col-6 </div>
<div class="col-6"> .col-6 </div>
</div>
</div>

天沟

可以通过特定于断点的填充和负余量实用程序类来快速调整装订线。 要更改给定行中的装订线,请在 .row 和匹配的填充实用程序 .col s. The .container or .container-fluid 可能还需要使用再次匹配的padding实用程序来调整parent以避免不必要的溢出。

这是自定义大型Bootstrap网格的示例( lg )断点及以上。 我们增加了 .col 填充 .px-lg-5 ,与 .mx-lg-n5 在父母身上 .row 然后调整 .container 包装用 .px-lg-5.

自定义列填充
自定义列填充
<div class="container px-lg-5">
<div class="row mx-lg-n5">
<div class="col py-3 px-lg-5 border bg-light"> 自定义列填充 </div>
<div class="col py-3 px-lg-5 border bg-light"> 自定义列填充 </div>
</div>
</div>

行列

使用响应式 .row-cols-* 类,以快速设置最能呈现您的内容和布局的列数。 而正常 .col-* 类适用于各个列(例如, .col-md-4 ),则在父级上设置行列类 .row 作为捷径。

使用这些行列类可以快速创建基本的网格布局或控制您的卡片布局。

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

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

对准

使用flexbox对齐工具可垂直和水平对齐列。 当flex容器中有一个flex容器时,Internet Explorer 10-11不支持flex项的垂直对齐。 min-height 如下所示。 有关更多详细信息,请参见Flexbugs#3。

垂直对齐

三列之一
三列之一
三列之一
三列之一
三列之一
三列之一
三列之一
三列之一
三列之一
<div class="container">
<div class="row align-items-start">
<div class="col"> 三列之一 </div>
<div class="col"> 三列之一 </div>
<div class="col"> 三列之一 </div>
</div>
<div class="row align-items-center">
<div class="col"> 三列之一 </div>
<div class="col"> 三列之一 </div>
<div class="col"> 三列之一 </div>
</div>
<div class="row align-items-end">
<div class="col"> 三列之一 </div>
<div class="col"> 三列之一 </div>
<div class="col"> 三列之一 </div>
</div>
</div>
三列之一
三列之一
三列之一
<div class="container">
<div class="row">
<div class="col align-self-start"> 三列之一 </div>
<div class="col align-self-center"> 三列之一 </div>
<div class="col align-self-end"> 三列之一 </div>
</div>
</div>

水平对齐

两列之一
两列之一
两列之一
两列之一
两列之一
两列之一
两列之一
两列之一
两列之一
两列之一
<div class="container">
<div class="row justify-content-start">
<div class="col-4"> 两列之一 </div>
<div class="col-4"> 两列之一 </div>
</div>
<div class="row justify-content-center">
<div class="col-4"> 两列之一 </div>
<div class="col-4"> 两列之一 </div>
</div>
<div class="row justify-content-end">
<div class="col-4"> 两列之一 </div>
<div class="col-4"> 两列之一 </div>
</div>
<div class="row justify-content-around">
<div class="col-4"> 两列之一 </div>
<div class="col-4"> 两列之一 </div>
</div>
<div class="row justify-content-between">
<div class="col-4"> 两列之一 </div>
<div class="col-4"> 两列之一 </div>
</div>
</div>

没有排水沟

可以使用以下方法删除预定义网格类别中列之间的装订线 .no-gutters 。这消除了负面影响 margin 来自的 .row 和水平 padding 从所有直接子级列中。

这是用于创建这些样式的源代码。 请注意,列替代的作用域仅限于第一个子列,并且通过 属性选择器 。尽管这会生成更具体的选择器,但仍可以使用以下方法进一步自定义列填充 间隔实用程序 .

需要边缘到边缘的设计吗? 放下父母 .container or .container-fluid.

实际上,这是它的外观。 请注意,您可以继续将其与所有其他预定义的网格类(包括列宽,响应层,重新排序等)一起使用。

.col-sm-6 .col-md-8
.col-6 .col-md-4
<div class="row no-gutters">
<div class="col-sm-6 col-md-8"> .col-sm-6 .col-md-8 </div>
<div class="col-6 col-md-4"> .col-6 .col-md-4 </div>
</div>

列包装

如果在一行中放置超过12列,则每组额外的列将作为一个单元包装到新行上。

.col-9
.col-4
由于9 + 4 = 13> 12,因此该4列宽的div以一个连续单位的形式换行。
.col-6
随后的列沿新行继续。
<div class="container">
<div class="row">
<div class="col-9"> .col-9 </div>
<div class="col-4"> .col-4 <br/> 由于9 + 4 = 13&gt; 12,因此该4列宽的div以一个连续单位的形式换行。 </div>
<div class="col-6"> .col-6 <br/> 随后的列沿新行继续。 </div>
</div>
</div>

分栏符

在flexbox中将列拆分为新行需要一个小技巧:使用 width: 100% 无论您希望将列换行到新行。 通常这是通过多个 .row s,但并非每种实现方法都可以解决这个问题。

.col-6 .col-sm-3
.col-6 .col-sm-3
强制下一列换行
.col-6 .col-sm-3
.col-6 .col-sm-3
<div class="container">
<div class="row">
<div class="col-6 col-sm-3"> .col-6 .col-sm-3 </div>
<div class="col-6 col-sm-3"> .col-6 .col-sm-3 </div>
 强制下一列换行 
<div class="w-100"></div>
<div class="col-6 col-sm-3"> .col-6 .col-sm-3 </div>
<div class="col-6 col-sm-3"> .col-6 .col-sm-3 </div>
</div>
</div>

您还可以通过我们的特定断点应用此中断 响应式显示实用程序 .

.col-6 .col-sm-4
.col-6 .col-sm-4
强制下一列在md断点处向上移动到新行
.col-6 .col-sm-4
.col-6 .col-sm-4
<div class="container">
<div class="row">
<div class="col-6 col-sm-4"> .col-6 .col-sm-4 </div>
<div class="col-6 col-sm-4"> .col-6 .col-sm-4 </div>
 强制下一列在md断点处向上移动到新行 
<div class="w-100 d-none d-md-block"></div>
<div class="col-6 col-sm-4"> .col-6 .col-sm-4 </div>
<div class="col-6 col-sm-4"> .col-6 .col-sm-4 </div>
</div>
</div>

重新排序

订单类别

Use .order- 用于控制 视觉秩序 您的内容。 这些类是响应式的,因此您可以设置 order 按断点(例如, .order-1.order-md-2 ). 包括对 1 通过 12 跨越所有五个网格层。

DOM中的第一个,不应用任何顺序
DOM中的第二大顺序
在DOM中排名第三,顺序为1
<div class="container">
<div class="row">
<div class="col"> DOM中的第一个,不应用任何顺序 </div>
<div class="col order-12"> DOM中的第二大顺序 </div>
<div class="col order-1"> 在DOM中排名第三,顺序为1 </div>
</div>
</div>

也有回应 .order-first and .order-last 改变 order 通过应用元素 order: -1 and order: 13(order: $columns + 1 ), 分别。 这些类别也可以与编号混合 .order-* 根据需要的类。

DOM中的第一名,最后一位
在DOM中排名第二,无序
DOM中的第三名,第一名
<div class="container">
<div class="row">
<div class="col order-last"> DOM中的第一名,最后一位 </div>
<div class="col"> 在DOM中排名第二,无序 </div>
<div class="col order-first"> DOM中的第三名,第一名 </div>
</div>
</div>

抵消列

您可以通过两种方式抵消网格列:我们的响应式 .offset- 网格类和我们的 保证金工具 。网格类的大小可匹配列,而边距对于偏移宽度可变的快速布局更有用。

偏移类

使用将列向右移动 .offset-md-* 类。 这些类将列的左边距增加 * 列。 例如, .offset-md-4 动作 .col-md-4 超过四列。

.col-md-4
.col-md-4 .offset-md-4
.col-md-3 .offset-md-3
.col-md-3 .offset-md-3
.col-md-6 .offset-md-3
<div class="container">
<div class="row">
<div class="col-md-4"> .col-md-4 </div>
<div class="col-md-4 offset-md-4"> .col-md-4 .offset-md-4 </div>
</div>
<div class="row">
<div class="col-md-3 offset-md-3"> .col-md-3 .offset-md-3 </div>
<div class="col-md-3 offset-md-3"> .col-md-3 .offset-md-3 </div>
</div>
<div class="row">
<div class="col-md-6 offset-md-3"> .col-md-6 .offset-md-3 </div>
</div>
</div>

除了在响应断点处清除列外,您可能还需要重置偏移量。 看到这个在行动 网格示例 .

.col-sm-5 .col-md-6
.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0
.col-sm-6 .col-md-5 .col-lg-6
.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0
<div class="container">
<div class="row">
<div class="col-sm-5 col-md-6"> .col-sm-5 .col-md-6 </div>
<div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0"> .col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0 </div>
</div>
<div class="row">
<div class="col-sm-6 col-md-5 col-lg-6"> .col-sm-6 .col-md-5 .col-lg-6 </div>
<div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0"> .col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0 </div>
</div>
</div>

保证金工具

随着在v4中移至flexbox,您可以使用诸如 .mr-auto 迫使同级列彼此远离。

.col-md-4
.col-md-4 .ml-自动
.col-md-3 .ml-md-auto
.col-md-3 .ml-md-auto
.col-auto .mr-auto
.col-自动
<div class="container">
<div class="row">
<div class="col-md-4"> .col-md-4 </div>
<div class="col-md-4 ml-auto"> .col-md-4 .ml-自动 </div>
</div>
<div class="row">
<div class="col-md-3 ml-md-auto"> .col-md-3 .ml-md-auto </div>
<div class="col-md-3 ml-md-auto"> .col-md-3 .ml-md-auto </div>
</div>
<div class="row">
<div class="col-auto mr-auto"> .col-auto .mr-auto </div>
<div class="col-auto"> .col-自动 </div>
</div>
</div>

套料

要将内容与默认网格嵌套,请添加一个新 .row 和一套 .col-sm-* 现有的列 .col-sm-* 柱。 嵌套行应包括一组总计不超过12个或更少的列(不需要全部使用12个可用列)。

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

无礼的混蛋

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

变量

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

混合蛋白

Mixins与网格变量结合使用以为单个网格列生成语义CSS。

用法示例

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

主要内容
次要内容
<div class="example-container">
<div class="example-row">
<div class="example-content-main"> 主要内容 </div>
<div class="example-content-secondary"> 次要内容 </div>
</div>
</div>

自定义网格

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

列和装订线

网格列数可以通过Sass变量进行修改。 $grid-columns 用于生成每列的宽度(以百分比为单位),而 $grid-gutter-width 设置列装订线的宽度。

网格层

除了列本身之外,您还可以自定义网格层数。 如果您只需要四个网格层,则可以更新 $grid-breakpoints and $container-max-widths 这样的事情:

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