美文网首页我爱编程
将Bootstrap栅格系统中某一列定宽会发生什么

将Bootstrap栅格系统中某一列定宽会发生什么

作者: 追风的云月 | 来源:发表于2017-10-06 18:56 被阅读0次

大家都知道Bootstrap中的列会均分一行的宽度。

 <div class="container">
      <div class="row">
            <div class="col-lg-4"></div>
            <div class="col-lg-4"></div>
            <div class="col-lg-4"></div>
      </div>
 </div>

效果如下图:


Paste_Image.png

如果container容器给定的宽度是600px,再给第一个col-lg-4的宽度大于200px,会发生什么呢?

Paste_Image.png

后面两个列会因宽度不够而被挤下去,这是因为Bootstrap的所有列采用浮动布局,如果某一列定宽而导致改行排列不下,后面的列便会被挤下去。
在此举一反三,研究一下Bootstrap的栅格布局原理


Paste_Image.png

在Bootstrap源码中,针对大屏设备1200px,container宽度设计为1170px是为了保证1200px宽的设备两边留白,使其不至于占满屏幕。
Bootstrap的栅格系统是一个三层结构,除了外围的container和内部的column,中间还有一个夹层row,并且Bootstrap要求所有的column必须包含在row里面,这是为什么呢?
Bootstrap将所有元素的盒模型设置为了border-box

.row {
  margin-right: -15px;
  margin-left: -15px;
}
* {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
因此container宽度为1170px,减去左右共30px的padding,于是container的内容宽度就只剩1140px,这下所有col栅格的百分比乘的都是1140而不是1170,为解决此问题,Bootstrap在container中新增了一个夹层row,通过使用负的margin增加row的宽度至1170px。这里用到了盒模型尺寸的计算原理:块元素左右外边距、左右border、左右内边距和width这七个值之和必须等于包含块的content width。row的包含块container的content width为1140px,因此对于row而言,就存在如下等量关系:

-15px+0+0+width+0+0+(-15px)= 1140

于是row的width就自动扩展到1170px了。

这样是不是显得有点多此一举呢?既然container左右两边都有15px的外边距了,为什么还要设计15px的内边距?如果没有这个内边距,不就不需要额外添一个夹层row了吗?
这里就是Bootstrap设计的精巧之处:因为栅格之间需要间隔,因此每个column栅格都设置了15px的padding
这意味着每个column实际上也可以看成一个container!我们可以在任意一个column内再嵌套一个栅格系统,而无需再添加container,只需添加一个row即可,不要将row理解成“行”,它就是一个包含块而已。这样的三层结构使得Bootstrap成为了一个可以无限嵌套的响应式系统,每一个栅格都可以看做一个独立的系统,container只不过是那个最大的栅格而已。

另外,Bootstrap栅格系统预设的数值,如列数、槽宽以及媒体查询阈值都是可以修改的。可定制化是所有优秀框架的另一个共同品质。

列排序与列偏移

Bootstrap将所有列的position都设成了relative,就在于可对列进行定位或排序,比如要将某一个列定位到12分之3处(即从第三、四列交界处开始),可以设置left:25%或者right:75%。Bootstrap已经预设好了相应的类名:

 .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }

列偏移的不同之处在于使用margin,而被margin挤占的区域没办法安放其它的列。

 .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0;
  }

相关文章

  • 将Bootstrap栅格系统中某一列定宽会发生什么

    大家都知道Bootstrap中的列会均分一行的宽度。 效果如下图: 如果container容器给定的宽度是600p...

  • bootstrap栅格化系统

    Bootstrap栅格化系统 Bootstrap 的栅格化系统采用将页面布局分为12列,再根据页面宽度采用预定义类...

  • Bootstrap响应式栅格布局实现方法

    栅格系统的原理 Bootstrap的栅格系统下面我们将一起来看一下常见的栅格布局的设计和bootstrap中的设计...

  • 九、bootstrap

    bootstrap 容器 栅格系统 列偏移 列排序 响应式工具 容器与栅格盒模型设计的精妙之处

  • 栅格化系统在设计中的运用

    刚开始对栅格系统有很多疑惑,什么是栅格化系统?Bootstrap中为什么要使用栅格系统?设计师为什么要学习栅格系统...

  • bootstrap栅格系统分析

    bootstrap栅格系统 bootstrap栅格系统是bootstrap的核心以及精髓所在 一、容器 1.流体容...

  • 第二谈:布局系统

    本节课我们来开始学习 Bootstrap 布局知识,了解栅格系统以及如何分配列、栅格等级并且简单了解不同等级的作用...

  • Bootstrap和flex的比较,清除浮动的实现原理

    bootstrap:栅格系统(结构) 在bootstrap中采用12栅格的布局,12份随意分配,但是不能解决5等分...

  • bootstrap与less

    一、bootstrap项目架构 实现布局系统和内容1)栅格系统的设计 补充内容:列排序 col-md-push-4...

  • H5-2.21bootstrap与less

    一、bootstrap项目架构 实现布局系统和内容1)栅格系统的设计 补充内容:列排序 col-md-push-4...

网友评论

    本文标题:将Bootstrap栅格系统中某一列定宽会发生什么

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