03 Bootstrap的栅格布局

认识Bootstrap栅格布局

  Bootstrap3.0抛弃了原有的以PC为核心的设计思维,完全内置了一套响应式、移动设备优先的流式栅格系统,随着屏幕设备或视口尺寸的增加,系统会自动分为最多12列。它包含了易于使用的预定义Class,还有强大的mixin用于生成更具语义的布局。
  整个系统通过一系列的行(row)和列(column)的组合创建页面布局,它的工作原理:

  1. 行(row)必须包含在.container中,以便为其赋予合适的排列(alignment)和内补(padding)
  2. 使用行(row)在水平方向创建一组列
  3. 网页内容应当放置于列(col)内,且只有列(col)可以作为行(row)的直接子元素
  4. 类似.row、.col-xs-4这些预定义的栅格class可以用来快速创建栅格布局。Bootstrap源码中定义的mixin也可以用来创建语义化的布局
  5. 通过设置padding从而创建列(col)之间的间隔(gutter)。然后通过为第一列和最后一列设置同样负值的margin从而抵消掉padding的影响
  6. 栅格系统中的列是通过指定1到12的值来表示其跨越的范围

  下面看一个布局的案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bootstrap栅格布局的简单案例</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
    <div class="row">
        <div class="col-xs-3" style="background-color: antiquewhite;">列宽4列</div>
        <div class="col-xs-3" style="background-color: aqua;">列宽4列</div>
        <div class="col-xs-3" style="background-color: blue;">列宽4列</div>
        <div class="col-xs-3" style="background-color: chartreuse;">列宽4列</div>
    </div>
    <div class="row">
        <div class="col-xs-6" style="background-color: coral;">列宽6列</div>
        <div class="col-xs-6" style="background-color: crimson;">列宽6列</div>
    </div>
</body>
</html>

注意:

  1. 所有的列所跨越的栅格数之和最多是12
  2. .row定义栅格行容器,没有定义宽度,所以其宽度就由内部栅格的总列宽决定
  3. 对于需要占据整个浏览器视口的页面,需要将内容区域包裹在一个容器元素内,并且赋予padding: 0 15px;,目的是抵消掉为.row所设置的margin: 0 -15px;,否则,页面将会左右超出视口15px,页面底部呈现横向滚动条。
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>占据整个视口</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
    <div style="padding: 15px;">
        <div class="row">
            <div class="col-xs-3" style="background-color: red;">列表宽3列</div>
            <div class="col-xs-3" style="background-color: rosybrown;">列表宽3列</div>
            <div class="col-xs-3" style="background-color: salmon;">列表宽3列</div>
            <div class="col-xs-3" style="background-color: skyblue;">列表宽3列</div>
        </div>
        <div class="row">
            <div class="col-xs-6" style="background-color: springgreen;">列表宽6列</div>
            <div class="col-xs-6" style="background-color: tomato;">列表宽6列</div>
        </div>
    </div>
</body>
</html>

Bootstrap响应设备类型

  Bootstrap3.0通过媒体查询技术实现对不同设备的灵活支持,从而废除了Bootstrap2.0的固定布局系统。Bootstrap栅格系统设备与布局关系:

超小屏幕设备 手机 (< 768px)小屏幕设备 平板 (>= 768px)中等屏幕设备 桌面 (>= 992px)大屏幕设备 桌面 (>= 1200px)
栅格系统行为总是水平排列开始是堆叠在一起的,超过这些临界值的时候就会变成水平排列
最大.container宽度None(自动)750px970px1170px
class前缀.col-xs-.col-sm-.col-md-.col-lg-
列数12
最大列宽自动60px78px95px
槽宽允许
偏移(Offsets)允许
列排序允许

Bootstrap设备优化栅格

  在Bootstrap3.0栅格系统中,class在宽度大于或等于临界值的设备上起作用,并且将覆盖掉对小屏幕设备的class。因此,对任何一个元素应用任何.col-md-类样式,如果没有设置.col-lg类样式,将不仅作用于中等尺寸的屏幕,还将作用于大屏幕设备。Bootstrap3.0遵循设备优先的原则来确定当前结构的布局效果,因此我们可以在相同的结构中设置不同的设备类型,以实现在不同的设备呈现不同的布局效果。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>设备优先</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            height: 100px;
            border: 1px solid red;
        }
    </style>
</head>
<body class="contaniner">
    <div class="row">
        <div class="col-lg-2 col-md-4 col-sm-6 col-xs-12">
            <div class="visible-lg">col-lg-2</div>
            <div class="visible-md">col-md-4</div>
            <div class="visible-sm">col-sm-6</div>
            <div class="visible-xs">col-xs-12</div>
        </div>
        <div class="col-lg-2 col-md-4 col-sm-6 col-xs-12">
            <div class="visible-lg">col-lg-2</div>
            <div class="visible-md">col-md-4</div>
            <div class="visible-sm">col-sm-6</div>
            <div class="visible-xs">col-xs-12</div>
        </div>
        <div class="col-lg-2 col-md-4 col-sm-6 col-xs-12">
            <div class="visible-lg">col-lg-2</div>
            <div class="visible-md">col-md-4</div>
            <div class="visible-sm">col-sm-6</div>
            <div class="visible-xs">col-xs-12</div>
        </div>
    </div>
</body>
</html>

Bootstrap固定栅格和流式栅格

  默认情况下,Bootstrap2.0没有启用响应式布局,如果加入响应式布局CSS文件(bootstrap-responsive.css),栅格系统会自动根据可视窗口的宽度从724px到1170px进行动态调整。可视窗口低于767px宽的情况下,列将不再固定并且会在垂直方法堆叠。
  Bootstra3.0将bootstrap-responsive.css合并到bootstrap.css中,实现在默认状态下支持响应式布局,.container将根据设备类型宽度调整自身宽度。在流式栅格布局中,与固定栅格布局不同,每列的宽度依然按照百分比来计算宽度,但流式外框.container-fluid不再声明宽度,确保整个布局满屏显示,下面是使用.container和.container-fluid设计固定栅格布局和流式栅格布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>固定栅格和流式栅格</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>
<body>
    <h3>固定栅格</h3>
    <div class="container">
        <div class="row">
            <div class="col-xs-6">列宽6</div>
            <div class="col-xs-6">列宽6</div>
        </div>
    </div>
    <h3>流式栅格</h3>
    <div class="container-fluid">
        <div class="row">
            <div class="col-xs-6">列宽6</div>
            <div class="col-xs-6">列宽6</div>
        </div>
    </div>
</body>
</html>

Bootstrap栅格堆叠和水平排列

  堆叠和水平排列是Bootstrap3.0栅格系统中列的两种基本布局形式,比如使用一组.col-md栅格class创建一个基本的栅格系统,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>堆叠和水平</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-md-2"></div>
            <div class="col-md-2"></div>
            <div class="col-md-2"></div>
            <div class="col-md-2"></div>
            <div class="col-md-2"></div>
            <div class="col-md-2"></div>
        </div>
    </div>
</body>
</html>

  在手机和平板设备上显示为堆叠布局,即在超小屏幕和小屏幕上呈现栅格堆叠显示,在桌面以及以上屏幕上栅格变为水平排列。针对平板电脑,也希望像在小屏幕上一样水平显示,则可以使用.col-sm设计各列:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>堆叠和水平</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-sm-2"></div>
            <div class="col-sm-2"></div>
            <div class="col-sm-2"></div>
            <div class="col-sm-2"></div>
            <div class="col-sm-2"></div>
            <div class="col-sm-2"></div>
        </div>
    </div>
</body>
</html>

  如果希望在任何设备上都是水平排列在一起,则可以使用.col-xs:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>堆叠和水平</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            height: 100px;
            border: solid 1px red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-xs-2"></div>
            <div class="col-xs-2"></div>
            <div class="col-xs-2"></div>
            <div class="col-xs-2"></div>
            <div class="col-xs-2"></div>
            <div class="col-xs-2"></div>
        </div>
    </div>
</body>
</html>

  在上面的案例的基础上,如果通过使用.col-sm-* class可以创建更加富有动态和强大的布局。但是在很多情况下,多列布局各列的高度并非都是一致的,如果为其中的一列增加更多的内容,同时删除演示代码中的固定高度的声明,结果如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高度不一致</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            border : 1px solid red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-xs-2">列宽2格
                <p>这里是一长段代码</p>
            </div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
        </div>
    </div>
</body>
</html>

  即便给出更少的col栅格,也不免会碰到一些问题,例如在某些临界值的时候,某些列可能会出现比别的列高地情况,为了解决这个问题,可以使用.clearfix和响应式工具class:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高度不一致</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            border : 1px solid red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-xs-2">列宽2格
                <p>这里是一长段代码</p>
            </div>
            <div class="clearfix visible-xs"></div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
            <div class="col-xs-2">列宽2格</div>
        </div>
    </div>
</body>
</html>

列偏移

  使用offset系列类可以将列偏移到右侧,这些class通过使用* 选择器将所有列增加了列的左侧margin。例如:.col-md-offset-4将.col-md设备下的列向右移动了4个列的宽度。offset通过margin-left实现,因此会对右侧列产生影响。offset也会占据布局空间,一次使用设计列偏移时,必须把offset偏移宽度与col宽度进行合并计算,确保每个row中的列宽和偏移宽度之和等于或小于12格。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列偏移</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <style>
        .row > div{
            height: 100px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-xs-4"></div>
            <div class="col-xs-6 col-xs-offset-2"></div>
        </div>
        <div class="row">
            <div class="col-xs-3 col-xs-offset-3"></div>
            <div class="col-xs-3 col-xs-offset-3"></div>
        </div>
    </div>
</body>
</html>

列嵌套

  Bootstrap支持列嵌套,对于栅格系统中多层布局提供了简单的实现方式。用户只需要在嵌套的col内部新加入一行row,在row内继续使用栅格系统即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-xs-9">
                <div class="col-xs-3">左侧</div>
                <div class="col-xs-9">中间</div>
            </div>
            <div class="col-xs-3">右侧</div>
        </div>
    </div>
</body>
</html>

  因为是嵌套,所以是在col内加入row,row内继续进行多列布局,以此类推。嵌套的栅格必须归结起来,Bootstrap的布局其实就是:容器+栅格,容器只是显示包含框的宽度,主要变化在于栅格,通过栅格的合并、偏移、嵌套来最终达到布局效果的(不管是固定栅格还是流式栅格,都可以实现嵌套设计)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>栅格嵌套</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
    <div class="container-fluid text-center">
        <div class="row">
            <div class="col-xs-12" style="background-color: thistle;"> Fluid 12
                <div class="row">
                    <div class="col-xs-6" style="background-color: teal;"> Fluid 6
                        <div class="row">
                            <div class="col-xs-6" style="background-color:violet;">Fluid 6</div>
                            <div class="col-xs-6" style="background-color: yellow;">Fluid 6</div>
                        </div>
                    </div>
                    <div class="col-xs-6" style="background-color: turquoise;">
                        Fluid 6
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

  在固定式栅格中,栅格中套栅格逻辑很简单,照着它们的固定宽度进行设计即可。在流动式布局中,栅格中套栅格逻辑就稍微复杂一点,不是按照固定宽度来计算,而按照宽度百分比来计算。因此,在实际项目中,同样的栅格套栅格,流动式布局会比固定式布局中的栅格宽度宽一些。
  Bootstrap允许通过variables.less的参数值来自定义栅格系统,流式栅格系统也同样可以进行类似的修改,修改后并重新编译Bootstrap来实现自定义栅格系统。

列排序

  列排序通过push和pull相关类实现,利用这两个系列class可以调整列的显示位置,其中push向右偏移,通过left属性定义列左侧的偏移位置,通过right属性定义列右侧的偏移位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列排序</title>
    <link rel="stylesheet" href="../bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-xs-3 col-xs-push-9">左列</div>
            <div class="col-xs-6 col-xs-pull-3">中间</div>
            <div class="col-xs-3 col-xs-pull-3">右列</div>
        </div>
    </div>
</body>
</html>

  Bootstrap3栅格系统遵循每行各列之和为12格的设计原则,但是pull和push不受此限制,但是如果要确保列在页面内显示,则列宽加push或pull宽度之和不能大于12格,否则将显示在页面外,或者出现滚动条。

代码地址:示例代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值