其实在栅格系统之前,我们已经采用过流式布局,也可以实现响应式的布局设计。我们在编写普通的页面时,经常会使用百分比的方式进行布局,实现简单的响应式布局,然后为各个标签写我们想要的样式。在Bootstrap中,是采用栅格系统来进行响应式的布局。接下来我们具体看一下这个栅格系统的一些知识点以及简单应用。
一、栅格系统的简单介绍
栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中。下面就介绍一下 Bootstrap 栅格系统的工作原理:
1)“行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding)。
2)通过“行(row)”在水平方向创建一组“列(column)”。
3)你的内容应当放置于“列(column)”内,并且,只有“列(column)”可以作为行(row)”的直接子元素。
4)通过为“列(column)”设置 padding 属性,从而创建列与列之间的间隔(gutter)。通过为 .row 元素设置负值 margin 从而抵消掉为 .container 元素设置的 padding,也就间接为“行(row)”所包含的“列(column)”抵消掉了padding。
5)栅格系统中的列是通过指定1到12的值来表示其跨越的范围。例如,三个等宽的列可以使用三个 .col-xs-4 来创建。
6)如果一“行(row)”中包含了的“列(column)”大于 12,多余的“列(column)”所在的元素将被作为一个整体另起一行排列。
7)栅格类适用于与屏幕宽度大于或等于分界点大小的设备 , 并且针对小屏幕设备覆盖栅格类。 因此,在元素上应用任何 .col-md-*栅格类适用于与屏幕宽度大于或等于分界点大小的设备 , 并且针对小屏幕设备覆盖栅格类。 因此,在元素上应用任何 .col-lg-*不存在, 也影响大屏幕设备。
二、栅格系统的一些具体样式介绍
1、.container (固定宽度)或 .container-fluid (100% 宽度)
如果是container,那么自动带有padding属性,而且会自动检测当前的宽度进行调整,即媒体查询:
.container {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
@media (min-width: 1200px)
.container {
width: 1170px;
}
@media (min-width: 992px)
.container {
width: 970px;
}
@media (min-width: 768px)
.container {
width: 750px;
}
效果为:
如果是container-fluid,也是带有padding属性,那么宽度就是100%,也就是没有根据当前的宽度进行设置显示的宽度,而是100%宽度显示。
.container-fluid {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
效果为:
我们可以通过下表详细查看 Bootstrap 的栅格系统是如何在多种屏幕设备上工作的。
简单来说,其实就是:
lg: 超大屏幕,分辨率大于1200px;
md: 普通屏幕,即中等屏幕,分辨率大于992px,小于1200px;
sm: 小屏幕,即ipad大小,分辨率大于768px,小于992px;
xs: 手机屏幕,分辨率小于768px.
栅格系统其实就是把一行平均分为12格,我们可以根据自己的需要进行设置宽度。举一个例子说明:
<div class="container">
<div class="row">
<div class="col-lg-4">col-lg-4</div>
<div class="col-lg-4">col-lg-4</div>
<div class="col-lg-4">col-lg-4</div>
</div>
</div>
效果:
<div class="container">
<div class="row">
<div class="col-lg-4">col-lg-4</div>
<div class="col-lg-4">col-lg-4</div>
<div class="col-lg-6">col-lg-6</div>
</div>
</div>
如果我们想要一个效果,让某一列向右偏移,那么我们可以使用offset,比如:
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 col-md-offset-4">.col-md-4 .col-md-offset-4</div>
</div>
<div class="row">
<div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div>
<div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3">.col-md-6 .col-md-offset-3</div>
</div>
使用 .col-md-offset-* 类可以将列向右侧偏移。这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin)。例如,.col-md-offset-4 类将 .col-md-4 元素向右侧偏移了4个列(column)的宽度。
4、push和pull的用法
<div class="row">
<div class="col-lg-2 col-lg-push-10">col-lg-2</div>
<div class="col-lg-10 col-lg-pull-2">col-lg-10</div>
</div>
用 .col-lg-push-*和.col-lg-pull-*可以将列右侧偏移和左侧偏移。例如.col-lg-push-10类将列clo-lg-2向右侧偏移10个列,.col-lg-pull-2将col-lg-10向左侧偏移2个列。
注意:offset和push的区别:
两者都可以实现向右侧偏移,但是还是有区别。当一行里面含有多列时,使用.col-lg-offset*时,如果列数大于12,那么会自动跳到下一行,如果使用.col-lg-push-*就会向右偏移。
<div class="row">
<div class="col-lg-12">col-lg-12</div>
</div>
<div class="row">
<div class="col-lg-4">col-lg-4</div>
<div class="col-lg-4 col-lg-offset-5">col-lg-4</div>
</div>
<div class="row">
<div class="col-lg-4">col-lg-4</div>
<div class="col-lg-4 col-lg-push-5">col-lg-4</div>
</div>
第一行就是占用12个列,第二行使用了col-lg-offset-5,第三行使用了col-lg-push-5。