Bootstrap 栅格系统的精妙之处

节选翻译自The Subtle Magic Behind Why the Bootstrap 3 Grid Worksbootstrap

从接触 Bootstrap 已经有很长时间了,给人的感受是快速,简单,易上手,其中栅格系统是一个亮点:浏览器

一直感受像 CSS 栅格系统之类的东西拿过来用就行了,不用深究背后的原理。直到有一天你发现简单的套用在稍复杂的页面上出现问题,间隔啊,内外边距啊,哪都不对劲儿。app

固然会有这样的过程,而后随着知识的积累,能够去读一些 Bootstrap 的源码,结合文档会发现一些不是很理解的地方:ui

Rows must be placed within a .container (fixed-width) or .container-fluid (full-width) for proper alignment and padding.spa

“行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding)。翻译

CONTAINER

Container 有两个做用:blog

  1. 在随时可能的宽度变化(响应式)中提供宽度限制。当页面宽度变化,container 的宽度也随之变化。而且其中的 column 的宽度是基于百分比,因此他们的值不须要变化。图片

  2. 提供一个水平方向的 padding,使其内部的内容不会接触到浏览器的边界,大小为15px,就是图片中粉红色的部分,做用会在下面说。文档

注意,不须要也不该该在 container 中嵌套另外一个 container。
15px-paddingget

ROW

Row 是 column 直接存在的容器,按照文档描述 row 中最多可有12个 column,不过能够经过 nesting 的方式灵活扩展。同时做为都是左浮动的 column 的 wrapper,自带 clearfix 的性质。

同时 row 还有一个很特殊的地方,就是左右各有 -15px 的 margin,就是图片中的蓝色部分。这样也就抵消了上面提到的 container 中15px的 padding,那么为何要这么折腾呢?接着看往下读。

注意:千万记住要把 row 放到 container 的内部,这样才能保证正常。
-15px-margin

COLUMN

注意啦,每一个column 也会有15px的水平方向的 padding,也就是图片中黄色的部分,唉,先别急,会明白的。还记得上面提到的 row 的做用吗,colunmn 只能在 row 中生存,因为 row 的 margin 为-15px,那么位于两边的 column 就碰到了 container 的边界。可是 colunmn 自己又有 15px 的 padding 使得它其中的内容并不会碰到 container,同时 不一样column的内容之间就有了30px的槽。结合图片看一下就一目了然了。

注意:必定要把 column 放到 row 里使用。
column

NESTING

当把上面一系列的 container, row, column 都设置好,就能够经过 nesting 扩展它的栅格系统了,也就是在 column 中直接嵌套 row,而不须要再套一层 container:
nesting

还记得 container 和 column 都有15px的 padding 吗,当 nesting 的时候 column 的做用也至关于 container 了,这样就能够实现任意的嵌套了。
nesting

这正是 Bootstrap 的栅格系统的最巧妙的地方!

相关文章
相关标签/搜索