这个标题取的有点奇怪,怪我翻译的有问题吧。英文学平有限,有道词典和google翻译齐上阵是必须的。还好翻译的不是小说,对于技术文章,还是能勉强翻过来的。

本文主要讲解了Bootstrap3.0的栅格布局系统实现原理,以及使用过程中应该注意的问题。

开始...翻译..

像CSS栅格系统原理这类东西本应该藏在帘子后面,你直接用就可以了,没必要去了解其背后的工作原理,除非你有了比较烂的设计或者一些比较复杂的东西,

当你无法找出spacing, margin, padding等这些补白全都乱的原因,那就真的很苦逼了,尤其是在某些动态改变和变化的UI上。

在关于bootstrap的栅格系统工作原理上我见过很多人都对它比较困扰、懊恼,每次都需要我解释很多遍后别人才能理解,

所以我乐意用快速和可视化的方式来解释为什么bootstrap栅格系统能玩得动,没必要解释很多。让我们一起找出Bootstrap是如何利用巧妙的技巧实现栅格系统的

HTML正确的基本结构:

Container

Container这个容器class为.container类有2个目的

1、在响应式宽度上提供宽度约束。响应式尺寸的改变其实改变的是container,行(rows)和列(columns)都是基于百分比的所以它们不需要做任何改变;

2、提供padding以至于不内容不直为紧贴于浏览器边缘,两边都是15px,下图中粉色的就是了,稍后解释更多;

在一个container中永远不需要再嵌一个container,记住永远不要。

你将会看到为什么

Row

行(Row)Class为.row的容器

row为col提供了空间,理想上一行上分了12 col,当所有col都向左浮时row也就扮演了容器角色,另外当浮动有问题时row也不会重叠

Rows 的两侧都拥有独特的负15px margin值,如下图中蓝色部分. 被当作为row的div被约束在container内边界与粉色区域重叠,但没超过。这负的15px margin值把row的推出了container的15px padding,并与之重叠,本质上讲就是负出去。为什么这么做呢?原因得看列(col)的工作原理,下面我们会看到

永远不要在container外用row, row在container外面使用是无效的

Column

列(col)现在有15px的padding了,如下图中黄颜色部分。Container的正padding值造成了15px的留空,row用负margin值反的延伸回去,

所以现在col的padding值与container的padding重叠了

永远不要在row外使用col,在row外使用col是无效的

Content Within a Column

列(col)的padding给内容提供了空白,使内容不会紧贴在浏览器边界上,列之间有了padding才不会互相紧贴在一起。

container/row/column整这么些事儿最终要达到的结果就体现在这里了,就是为了col的补白啊...

Nesting嵌套

当你设置了container,row,column后,你可以在column内再创建新的栅格系统。你在右侧的列(col)内添加新的行(row)时不需再嵌container了

为什么嵌套时不需要新的container了?

这个技巧在于列(col)扮演了container一样的角色,列也有15px的padding值,它一样允许行(row)的负margin值,它内部的列、内容间的补白等都一样能很好的工作了

Offsets 偏移

偏移的实现相当简单,仅仅是在列(col)的左侧加上了margin值,

唯一比较怪的地方可能是在最左侧的col是从-15px的row的margin值开始偏移的,中间的列的偏移则是直接从前一个列开始偏移,分割分离出补白。

除此之外,偏移就表现的像列(col)一样

Push and Pull 列的排序

(直译过来应该是“推和拉”但实际使用过程中更多的表现为互换位置进行排序)

让我们先从为什么需要对列进行排序说起:基于响应式布局,对布局进行翻转,尤其是对移动设备上对列进行重新排列,

对于pc桌面来说push and pull允许你打破HTML中div从上到下从左到右的固定布局

可能让人比较困惑的是push pull的实现是通过添加position而不是通过添加margin值实现。

Push添加的是left值,pull添加的是right值。当然在添加left或者right值之前它们的容器已经是相对定位了。

上图那么做就有问题,它会导致列重叠,而不像正常的列或者列偏移。

所以如果你push了一个列到右侧,它就会叠在右侧的列上,反之亦然。

所以一般我们总是“互换”,如果你push一个列到右侧,那么你得pull右侧的列到左侧,或则也对右侧的列进行处理。

The Reasoning Behind It 总结一下背后的原理

Container:

正是由于container这样设计才让content的两侧拥有15px的padding值的补白,

另外,整个body拥有15px的padding值,这使整体上不会紧贴浏览器的边缘,当然如果对于满屏设计并带有背景色的div就不好了..

Rows:

行(row)拥有负的margin值,并且值等于container的padding值,以至于边界与container得以重叠(相等)

,负的margin值叠在了padding上,这让row看起来没被container的padding所影响.为啥?自行脑补..

Columns:

列(col)又拥有15px 的padding,所以能真正让content拥有15px的补白,而又让列之间拥有了15px+15px的中间补白,

正是因为如此,这个栅格系统不需要像960排版(blueprint, 等)系统似的对第一列或最生一列进行特殊的处理。

现在不管怎样在列之间都拥有15px的空白了。

Nested Rows:

嵌套行的原理就像上面一样,只是它的重叠住了列的padding,其实就把外面的列当作container了,

本质上列扮演了container的角色,所以嵌套行时你不再需要container

Nested Columns:

嵌套列没什么好讲的了,和上面一样

Offsets:

偏移的本质就是分割空白间隔,通过增加空白间隔达到你想要的距离,非常的简单

Push/Pull:

Push和pull用于主要用于变换左右列的位置,当你有一个特别的设计并且offset偏移用着不给力的时候,你可以用它们来改变位置

Common Problems

这里有些普遍会发生的bug值得注意,一些bug在HTML中很容易就能看出来.

缺少Container:第一个容易产生bug的地方是忘记添加container。没有container意味着没有padding与行(row)的负margin直相抵消,

意味着行会超出父元素。当元素处于浏览器边缘时,这是最普遍的造成奇怪的横向滚动的原因

缺少row:

第二个普遍问题是少了row,这与缺少container产生的问题相反,content与浏览器/viewport的边缘拥有了30px的距离,

比正常值多了一倍。而且你的列浮动也会产生问题。由于缺少了外面row的包裹,浮动没有得到正常的清除,所以浮动就可能产生问题。

同样,当你试图嵌套栅格系统时,同样新嵌进去的content离左侧的边距达到了45px

Container内的元素再嵌container:在container内任意元素内再嵌container会导致很多问题,如双倍的padding值,空白间隔,怪异的横向滚动

偏移/push/pull:

当使用偏移或者排序(push/pull),偏移很简单不会出什么问题,push/pull却不同,如果你push太多,列会超出它的container,记住只是使用正常的值主不会有问题

这些就是在使用bootstrap3.0的基础栅格系统时时产生的问题,如果你在设计里有很多的嵌套碰到问题,

或你的响应式布局没按照你所希望的方式工作,先看看上面这几点,是不是这些问题产生的。

如果你修复了上面说的问题,基本上除了你自定义的布局外bootstrap3.0的布局问题基本上都能搞定了

That’s It

这就是bootstrap3.0的工作原理。它真的很聪明并提供了极好的解决方案。在这么多年使用栅格系统的经验中,

我个人觉得它是实现的最优雅的。虽然看到到这片文章写了这么多会可能觉得bootstrap3.0的栅格系统很复杂,

但如果不从整体详细的了解其内部的实现原理的话,在实际使用中,它确实是使用了简单的CSS,提供了我们一个好用的栅格系统

看源码才能用好

HTML栅格布局container,(Bootstrap3.0的栅格布局系统实现原理)相关推荐

  1. Bootstrap3.0 栅格系统背后的精妙魔法(Bootstrap3.0的栅格布局系统实现原理) - willian12345...

    Bootstrap3.0 栅格系统背后的精妙魔法(Bootstrap3.0的栅格布局系统实现原理) - willian12345 时间 2014-02-20 17:58:00  博客园-原创精华区 原 ...

  2. HTML栅格布局container,布局栅格

    布局方式 先聊聊布局方面的知识,先列据一个实现三栏水平布局(左右定宽,中间自适应)案列,目前有圣杯布局.双飞翼布局.Flex布局和绝对定位布局的几种经典布局. 圣杯布局 & 双飞翼布局(都是三 ...

  3. 栅格布局一般怎么用_栅格布局的使用方法

    栅格布局的使用方法: 1)布局块必须放在.container或.container-fluid中 2)在容器中声明行 3)在行中声明列 , 4)所有的内容只能放在列中,不能放在行中 5)列分为四种:c ...

  4. A*算法项目实践之一:栅格法的使用与障碍物栅格的生成

    A*算法项目实践之一:栅格法的使用与障碍物栅格的生成 栅格形状.大小的确定 栅格地图的生成--障碍物的生成 测试代码 MATLAB绘制栅格 使用路径搜索算法(本文使用A*算法)的第一步就是将地图用程序 ...

  5. 利用Python实现矢量逐个图斑裁剪栅格,形成图斑对应的栅格文件

    平时工作中存在,利用矢量裁剪栅格的要求,但多数情况下基于完整的单个矢量裁剪栅格,非利用矢量中某个图斑裁剪栅格,因此做以下工作. 1.将矢量按照单个图斑要素拆分成shp 这里用了县区的矢量.代码如下: ...

  6. 栅格矢量化_绘科普 | 栅格网格的几何校正

    栅格图像的几何校正 一.栅格图像 栅格图像又叫做位图.点阵图.像素图,简单的说,就是由一系列离散的像素方格构成的图像,缩放会导致失真.日常生活中常见的JPG.PNG,测绘中常用的BMP.TIFF图像都 ...

  7. 遥感栅格标签制作:矢量转栅格

    文章目录 前言 一.ArcGIS矢量转栅格 二.栅格裁剪 前言 在进行监督分类时,往往需要与数据相同大小的栅格标签,这里介绍一下如何将矢量标签转化为栅格标签,这里以二值标签为例. 一.ArcGIS矢量 ...

  8. bootstrapV4.6.0之flex布局与float布局:对比

    bootstrapV4.6.0之flex布局与float布局:对比 flex布局:https://v4.bootcss.com/docs/utilities/flex/ float浮动布局:https ...

  9. ad怎么修改栅格_AD软件的3种栅格设置详解

    AD16的栅格设置 AD16系统共有3种栅格:可视栅格.电气栅格.捕捉栅格,作用是画图时,让零件.导线排列整齐好看. Snap:捕获栅格,如果设定值是10mil,鼠标的光标拖动零件引脚,距离可视栅格在 ...

最新文章

  1. 一点通路由器模拟软件最新版_2019年高压电工作业考试最新版题库及答案(全部判断题)...
  2. 由旋转画廊,看自定义RecyclerView.LayoutManager
  3. 在c语言中load,一道题理清Objective-C中的load和initialize
  4. Mybatis学习笔记(一) —— mybatis介绍
  5. mysql数据库分析结果与结论_mysql数据库show processlist结果分析
  6. 浏览其中的【navigator】对象的【userAgent】判断浏览器。
  7. 在C / C ++中使用INT_MAX和INT_MIN
  8. Updatepanel jquery 失效解决方案
  9. 第七章 软件配置管理
  10. linux中文成方块,给linux添加字体
  11. mysql sphinx windows安装_window下安装sphinx实例
  12. 基于遗传算法的simulink/PID参数整定(s函数)
  13. dell r510服务器怎么装系统,DELLR510服务器上安系统
  14. 【沧海拾昧】C# .Net 基本控件介绍
  15. 嵌入式软硬件开发区别
  16. 前端三件套系例之CSS——CSS3基础样式
  17. GPS的NMEA数据解析
  18. Git自己分支合并dev分支
  19. 26个英语单词起源(百度百科+巴士英语)
  20. GPU-Z v2.44.0 发布

热门文章

  1. python-for循环的多种使用
  2. 小程序 小程序中打开其他小程序、小程序跳转其他小程序、微信群聊中打开小程序
  3. php在线客服框架,智能在线客服-框架
  4. 基于java+SSM酒店预订系统【前后台】
  5. 中国三维声图像传感器行业市场供需与战略研究报告
  6. 打印英语四六级准考证pdf
  7. Android 正 N 边形圆角头像的实现
  8. matlab西塔怎么打出来,龙珠超70话:格兰成宇宙最强,代价并不严重
  9. 机智过人人声机器人_机智过人20171215视频,矣晓沅,九歌作诗机器人,清华大学
  10. grails链接mysql_grails 连接Mysql