超小屏幕 <576px |
小屏幕 ≥576px |
中等屏幕 ≥768px |
大屏幕 ≥992px |
超大屏幕 ≥1200px |
|
---|---|---|---|---|---|
最大容器宽度 .container |
None (自动) | 540px | 720px | 960px | 1140px |
类前缀 | .col- |
.col-sm- |
.col-md- |
.col-lg- |
.col-xl- |
列(column)数 | 12 | ||||
列间隙 | 30px (每列两侧各15px) | ||||
可嵌套性 | Yes | ||||
可排序性 | Yes |
利用栅格断点特性进行排版,可以简化列的大小,而不需要批定显式的列宽,如强制写为:.col-sm-6
。
<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>
等宽列可以分成多行,但是有一个Safari旧版浏览器的flexbox错误,阻止它在没有显示 flex-basis
或 border
(影响到边框效果)。Bootstrap非官方的一个实例,已经介绍了两种解决方法,但如果是最新safri浏览器下,则不需要这样做。
下面是等宽列两行的处理方法,引用 w-100
进行切割分行:
<div class="container"> <div class="row"> <div class="col">Column</div> <div class="col">Column</div> <div class="w-100"></div> <div class="col">Column</div> <div class="col">Column</div> </div> </div>
在Flexbox的布局上,拥有很多现代特征,比如自动布局和列宽处理。你可以在一行多列的情况下,特别指定一列并进行宽度定义,同时其它列自动调整大小,可以使用预定义的栅格类(如下所示),从而实行栅格宽或行宽的优化处理。注意在这种民琣上,无论中心定义列的宽度如何,其他列都将调整大小。
<div class="container"> <div class="row"> <div class="col">1 of 3</div> <div class="col-6">2 of 3 (更宽-12格中占6格,其它6格另外两列平分)</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 (更宽-12格中占5格,其它7格另外两列平分-不论奇偶都能达成)</div> <div class="col">3 of 3</div> </div> </div>
使用 col-{breakpoint}-auto
断点方法,可以实现根据其内容的自然宽度来对列进行大小调整。
<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>
<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>
Bootstrap的栅格系统包括五种宽带预定义,用于构建复杂的响应布局,你可以根据需要定义在特小 .col
、小 .col-sm-*
、中 .col-md-*
、大 .col-lg-*
、特大 .col-xl-*
五种屏幕(设备)下的样式。
如果要一次性定义从最小设备到最大设备相同的网格系统布局表现,请使用 .col
和 .col-*
类。后者是用于指定特定大小的(如 .col-6
),否则使用 .col
就可以了。
<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>
使用单一的.col-sm-*类方法,可以创建一个基本的网格系统,此时如果没有指定其它媒体查询断点宽度,这个栅格系统是成立的,而且会随着屏幕变窄成为超小屏幕.col-后,自动成为每列一行、水平堆砌。改变网页屏幕宽度你可以在下面列子看到效果:
<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>
<!-- 定义在超小屏幕下1列全宽、1列半宽,而其它场景以8:4比例并行排列 --> <div class="row"> <div class="col-12 col-md-8">.col-12 .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>
flexbox布局可以轻松的实现DIV空间布局的垂直、水平对齐。
<div class="container"> <div class="row align-items-start"> <div class="col">One of three columns</div> <div class="col">One of three columns</div> <div class="col">One of three columns</div> </div> <div class="row align-items-center"> <div class="col">One of three columns</div> <div class="col">One of three columns</div> <div class="col">One of three columns</div> </div> <div class="row align-items-end"> <div class="col">One of three columns</div> <div class="col">One of three columns</div> <div class="col">One of three columns</div> </div> </div>
<div class="container"> <div class="row"> <div class="col align-self-start"> One of three columns </div> <div class="col align-self-center"> One of three columns </div> <div class="col align-self-end"> One of three columns </div> </div> </div>
<div class="container"> <div class="row justify-content-start"> <div class="col-4">One of two columns</div> <div class="col-4">One of two columns</div> </div> <div class="row justify-content-center"> <div class="col-4">One of two columns</div> <div class="col-4">One of two columns</div> </div> <div class="row justify-content-end"> <div class="col-4">One of two columns</div> <div class="col-4">One of two columns</div> </div> <div class="row justify-content-around"> <div class="col-4">One of two columns</div> <div class="col-4">One of two columns</div> </div> <div class="row justify-content-between"> <div class="col-4">One of two columns</div> <div class="col-4">One of two columns</div> </div> </div>
BootStrap默认的栅格和列间有间隙沟槽,一般是左右-15px的 margin
或 padding
处理,您可以使用 .no-gutters
类来消除它,这将影响到 .row
行、列平行间隙及所有子列。
如果你需要无边缝设计(edge-to-edge design),则请在父DIV中放弃 .container
与 .container-fluid
容器。
.no-gutters { margin-right: 0; margin-left: 0; > .col, > [class*="col-"] { padding-right: 0; padding-left: 0; } }
<div class="row no-gutters"> <div class="col-12 col-sm-6 col-md-8">.col-12 .col-sm-6 .col-md-8</div> <div class="col-6 col-md-4">.col-6 .col-md-4</div> </div>
如果在一行内子DIV定义的栅格总数超过12列,BootStrap会在保留列完整的前提下,将无法平行布局的多余列,重置到下一行,并占用一个完整的新行。
<div class="row"> <div class="col-9">.col-9</div> <div class="col-4">.col-4<br>Since 9 + 4 = 13 > 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div> <div class="col-6">.col-6<br>Subsequent columns continue along the new line.</div> </div>
一般换行推荐使用添加多个 .row
来达成,否则你可以使用系统提供的 .w-100
方法处理,其思路是强行插入一个 width:100%
的DIV进行隔离切断(前文有两处提到,这是Flexbox流式布局的一个Hack,目前没有更好的方案)。
<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 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> <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>
使用 .order-* class
选择符,可以对DIV空间进行 可视化排序,系统提供了 .order-1
到 .order-12
12个级别的顺序,在五种浏览器和设备宽度上都能生效。
<div class="container"> <div class="row"> <div class="col">1号空间-未定义序号,位置不变。</div> <div class="col order-12">2号空间-排最后。</div> <div class="col order-1">3号空间-放第1但受1号空间不变影响居第2位。</div> </div> </div>还有响应的.order first,它们分别通过应用order:-1。
还可以使用 .order-first
和 .order-last
类,快速更改一个顺序到最前面,同时其它元素也相应的获得了 order: -1
和 order: 13(order: $columns + 1)
来更改元素的顺序,这个属性也可以与 .order-*
混合使用。
<div class="container"> <div class="row"> <div class="col">1号空间-未定义顺序。</div> <div class="col">2号空间-未定义顺序。</div> <div class="col order-first">3号空间-优先排序,占第1位。</div> </div> </div>
您可以通过两种方式偏移网格列:响应式的 .offset-
网格类和边距实用程序。网格类的大小与列匹配,而边距对于偏移宽度可变的快速布局更有用。
使用 .offset-md-*
类将列向右移动。这些类将列的左边距增加 *
列。例如:.offset-md-4
将 .col-md-4
向右偏移四列。
<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 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.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>
在BootStrap V4中,你可以使用 .ml-auto
与 .mr-auto
来强制隔离两边的距离,实现类水平隔离的效果。
<div class="row"> <div class="col-md-4">.col-md-4</div> <div class="col-md-4 ml-auto">.col-md-4 .ml-auto</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-auto</div> </div>
若要使用默认网格嵌套内容,请在现有的 .col-sm-*
列中添加新的 .row
和 .col-sm-*
列集。嵌套行应包含一组总计不超过12个的列(不要求使用所有12个可用列)。
<div class="row"> <div class="col-sm-9"> Level 1: .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>