bootstrap-网格系统

作者: hcxowe | 来源:发表于2016-05-13 23:46 被阅读224次

    栅格系统的实现原理非常简单,仅仅是通过定义容器大小,平分12份,再调整内外边距,最后再结合媒体查询,就制作出了强大的响应式的栅格系统。Bootstrap默认的栅格系统平分为12份。

    栅格系统的主要工作原理

    • 一行数据(row)必须包含在.container中,以便为其赋予合适的对齐方式和内边距(padding)。

    • 使用行(row)在水平方向创建一组列(column)。

    • 具体内容应当放置于列(column)内,而且只有列(column)可以作为行(row)的直接子元素。

    • 内置一大堆样式,可以使用像.row和.col-xs-4(占4列宽度)这样的样式来快速创建栅格布局。Bootstrap源码中定义的mixin也可以用来创建语义化的布局。

    • 通过设置padding从而创建列(column)之间的间隔。然后通过为第一列和最后一列设置负值的margin从而抵消掉padding的影响。

    • 栅格系统中的列是通过指定1到12的值来表示其跨越的范围的。例如,要让屏幕分为3个等宽的部分,可以使用3个.col-xs-4来创建。

    举个栗子:

        <body>
                <div class="container">
                        <div class="row" style="background-color: green;height: 50px;">
                                <div class="col-xs-3" style="background-color: grey;height: 50px;">
                                </div>
                        </div>
                </div>
                <div class="container-fluid">
                </div>
        </body>
    

    一般的网格布局,查看css源码1585行

    .container {
      padding-right: 15px;
      padding-left: 15px;
      margin-right: auto;
      margin-left: auto;
    }
    @media (min-width: 768px) {
      .container {
        width: 750px;
      }
    }
    @media (min-width: 992px) {
      .container {
        width: 970px;
      }
    }
    @media (min-width: 1200px) {
      .container {
        width: 1170px;
      }
    }
    

    bs .container定好了在不同屏幕下面的宽度,750px->970px->1170px,每个容器左右内边距15px;
    再看.row的样式

    .row {
      margin-right: -15px;
      margin-left: -15px;
    }
    

    .row放在.container中消除了.container15px内边距带来的影响

    然后再来看每一列的定义col-xx-xx

    .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
      position: relative;
      min-height: 1px;
      padding-right: 15px;
      padding-left: 15px;
    }
    .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
      float: left;
    }
    

    每一col-列都带有15px的左右内边距,左浮动排列~
    .col-xx-xx使用width设置百分比宽度
    col-xx-offset-xx使用margin-left进行向右偏移
    col-xx-pull-xx使用right进行向左偏移
    col-xx-push-xx使用left进行向右偏移

    .col-xs-12 {
      width: 100%;
    }
    .col-xs-11 {
      width: 91.66666667%;
    }
    .col-xs-10 {
      width: 83.33333333%;
    }
    .col-xs-9 {
      width: 75%;
    }
    .col-xs-8 {
      width: 66.66666667%;
    }
    .col-xs-7 {
      width: 58.33333333%;
    }
    .col-xs-6 {
      width: 50%;
    }
    .col-xs-5 {
      width: 41.66666667%;
    }
    .col-xs-4 {
      width: 33.33333333%;
    }
    .col-xs-3 {
      width: 25%;
    }
    .col-xs-2 {
      width: 16.66666667%;
    }
    .col-xs-1 {
      width: 8.33333333%;
    }
    .col-xs-pull-12 {
      right: 100%;
    }
    .col-xs-pull-11 {
      right: 91.66666667%;
    }
    .col-xs-pull-10 {
      right: 83.33333333%;
    }
    .col-xs-pull-9 {
      right: 75%;
    }
    .col-xs-pull-8 {
      right: 66.66666667%;
    }
    .col-xs-pull-7 {
      right: 58.33333333%;
    }
    .col-xs-pull-6 {
      right: 50%;
    }
    .col-xs-pull-5 {
      right: 41.66666667%;
    }
    .col-xs-pull-4 {
      right: 33.33333333%;
    }
    .col-xs-pull-3 {
      right: 25%;
    }
    .col-xs-pull-2 {
      right: 16.66666667%;
    }
    .col-xs-pull-1 {
      right: 8.33333333%;
    }
    .col-xs-pull-0 {
      right: auto;
    }
    .col-xs-push-12 {
      left: 100%;
    }
    .col-xs-push-11 {
      left: 91.66666667%;
    }
    .col-xs-push-10 {
      left: 83.33333333%;
    }
    .col-xs-push-9 {
      left: 75%;
    }
    .col-xs-push-8 {
      left: 66.66666667%;
    }
    .col-xs-push-7 {
      left: 58.33333333%;
    }
    .col-xs-push-6 {
      left: 50%;
    }
    .col-xs-push-5 {
      left: 41.66666667%;
    }
    .col-xs-push-4 {
      left: 33.33333333%;
    }
    .col-xs-push-3 {
      left: 25%;
    }
    .col-xs-push-2 {
      left: 16.66666667%;
    }
    .col-xs-push-1 {
      left: 8.33333333%;
    }
    .col-xs-push-0 {
      left: auto;
    }
    .col-xs-offset-12 {
      margin-left: 100%;
    }
    .col-xs-offset-11 {
      margin-left: 91.66666667%;
    }
    .col-xs-offset-10 {
      margin-left: 83.33333333%;
    }
    .col-xs-offset-9 {
      margin-left: 75%;
    }
    .col-xs-offset-8 {
      margin-left: 66.66666667%;
    }
    .col-xs-offset-7 {
      margin-left: 58.33333333%;
    }
    .col-xs-offset-6 {
      margin-left: 50%;
    }
    .col-xs-offset-5 {
      margin-left: 41.66666667%;
    }
    .col-xs-offset-4 {
      margin-left: 33.33333333%;
    }
    .col-xs-offset-3 {
      margin-left: 25%;
    }
    .col-xs-offset-2 {
      margin-left: 16.66666667%;
    }
    .col-xs-offset-1 {
      margin-left: 8.33333333%;
    }
    .col-xs-offset-0 {
      margin-left: 0;
    }
    

    对重复代码的处理
    纵观整个栅格系统的源码,从854行到1635行绝大部分代码都是重复性的。比如给4种不同的类型设置width的时候,给pull和push设置left和right的时候,以及给offset设置的margin-left时候,设置的值都一样。只是样式名称不一样。除此之外不一样的地方就只有container样式的宽度设置了。那为什么不能这样设置呢?
    所有重复性的内容都放一起(在媒体查询之外),那么和媒体查询有关的就只有这一项内容了,也就是如下代码中所列的width宽度。
    .col-xs-12
    .col-sm-12
    .col-md-12
    .col-lg-12 {
    width: 100%;
    }
    总结:这得节约多少行代码~!

    相关文章

      网友评论

        本文标题:bootstrap-网格系统

        本文链接:https://www.haomeiwen.com/subject/piemrttx.html