如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩。事实上,这个布局系统提供了一套响应式的布局解决方案。

既然这么好用,那他是如何用CSS来实现的呢?

我特意去Bootstrap官方下载了源代码进行分析了一番,看完之后果然有了收获,不过我只看了栅格布局的那块代码,其实也很简单,不必担心不懂,你只需要要基础的CSS知识即可。

前提条件(Bootstrap 自带


首先使用这个布局之前要定义一下代码:

这行代码如果不懂,可以搜索一下,总之大致意思就是,被定义的元素的内边距和边框不再会增加它的宽度,不加入的话排版会有问题。

不过,Bootstrap自己当然已经加入了,如果你是使用整个Bootstrap框架,那你可以无视这里,只是让你明白需要一个这个。

我是将Bootstrap框架里面的布局代码分割出来,形成一个小体积的仅有css文件的小框架(下载地址见最后),以后写单页小网站方便用。

  1. * {
  2. -webkit-box-sizing: border-box;
  3. -moz-box-sizing: border-box;
  4. box-sizing: border-box;
  5. }

容器 container


container 的设计大致如下:

代码实现:

这里实现了依据不同的宽度进行改变:

  1. .container {
  2. padding-right: 15px;
  3. padding-left: 15px;
  4. margin-right: auto;
  5. margin-left: auto;
  6. }
  7. @media (min-width: 768px) {/*当宽度大于768px时触发*/
  8. .container {
  9. width: 750px;
  10. }
  11. }
  12. @media (min-width: 992px) {/*当宽度大于992px时触发*/
  13. .container {
  14. width: 970px;
  15. }
  16. }
  17. @media (min-width: 1200px) {/*当宽度大于1200px时触发*/
  18. .container {
  19. width: 1170px;
  20. }
  21. }
  22. .container-fluid { /*这个是宽度默认*/
  23. padding-right: 15px;
  24. padding-left: 15px;
  25. margin-right: auto;
  26. margin-left: auto;
  27. }

仔细研究一下CSS代码,相信你会突然明白。

为什么要Padding 15px呢?

我觉得应该是为了如果你在容器 container 里面写其他东西,不至于挨边。影响美观。

行 row


最简单的莫过于的 row 了。 

是不是感觉不错:

代码实现:

没错就两行

  1. .row {
  2. margin-right: -15px;
  3. margin-left: -15px;
  4. }

列 Column


 这个也很简单,你看总共有那么宽,Bootstrap分别将他们分割成12份,意思是你可以随意使用者12份,加起来要正好12。

不过要注意的一点是,Bootstrap实现了更好的响应式布局,列的种类是有很多种的。

.col-xs-* 针对超小屏幕 手机(<768px)

.col-sm-* 小屏幕 平板 (≥768px)

.col-md-* 中等屏幕 桌面显示器 (≥992px)(栅格参数)

.col-lg-* 针对特大的(≥1200px)

这些是什么意思?如何使用的呢?假设你写如下代码: 

  1. <div class="col-sm-10 col-md-8"></div>
  2. <div class="col-sm-3 col-md-4"></div>

当这两个div在row里面之后。如果是这样 这两个div在小屏幕中会排2排 因为10+3>12 ,在中等屏幕中可以排同一排 8+4=12

说白了。就是在不同的宽度里面Bootstrap将帮助你选择不同的类,你可以用这些类定义你想在不同宽度的界面排版。

代码实现:

col-xs-*的:

  1. .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2,/*后面代码省略,选择了所有的列,所有不同的列类型全部都有这样的有这样*/
    {
  2. position: relative;
  3. min-height: 1px;
  4. padding-right: 15px;
  5. padding-left: 15px;
  6. }
  7. .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 {
  8. float: left;
  9. }
  10. .col-xs-12 {
  11. width: 100%;
  12. }
  13. .col-xs-11 {
  14. width: 91.66666667%;
  15. }
  16. .col-xs-10 {
  17. width: 83.33333333%;
  18. }
  19. .col-xs-9 {
  20. width: 75%;
  21. }
  22. .col-xs-8 {
  23. width: 66.66666667%;
  24. }
  25. .col-xs-7 {
  26. width: 58.33333333%;
  27. }
  28. .col-xs-6 {
  29. width: 50%;
  30. }
  31. .col-xs-5 {
  32. width: 41.66666667%;
  33. }
  34. .col-xs-4 {
  35. width: 33.33333333%;
  36. }
  37. .col-xs-3 {
  38. width: 25%;
  39. }
  40. .col-xs-2 {
  41. width: 16.66666667%;
  42. }
  43. .col-xs-1 {
  44. width: 8.33333333%;
    }

其他元素则使用

  1. @media (min-width: 1200px){
  2. /*各自列的实现*/
  3. }

这些来判断,然后各自实现自己的类即可了。

不过方便你研究,代码也顺便贴上。


.col-sm-* 小屏幕 平板 (≥768px):

  1. 1 @media (min-width: 768px) {
  2. 2 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
  3. 3 float: left;
  4. 4 }
  5. 5 .col-sm-12 {
  6. 6 width: 100%;
  7. 7 }
  8. 8 .col-sm-11 {
  9. 9 width: 91.66666667%;
  10. 10 }
  11. 11 .col-sm-10 {
  12. 12 width: 83.33333333%;
  13. 13 }
  14. 14 .col-sm-9 {
  15. 15 width: 75%;
  16. 16 }
  17. 17 .col-sm-8 {
  18. 18 width: 66.66666667%;
  19. 19 }
  20. 20 .col-sm-7 {
  21. 21 width: 58.33333333%;
  22. 22 }
  23. 23 .col-sm-6 {
  24. 24 width: 50%;
  25. 25 }
  26. 26 .col-sm-5 {
  27. 27 width: 41.66666667%;
  28. 28 }
  29. 29 .col-sm-4 {
  30. 30 width: 33.33333333%;
  31. 31 }
  32. 32 .col-sm-3 {
  33. 33 width: 25%;
  34. 34 }
  35. 35 .col-sm-2 {
  36. 36 width: 16.66666667%;
  37. 37 }
  38. 38 .col-sm-1 {
  39. 39 width: 8.33333333%;
  40. 40 }
  41. 41 .col-sm-pull-12 {
  42. 42 right: 100%;
  43. 43 }
  44. 44 .col-sm-pull-11 {
  45. 45 right: 91.66666667%;
  46. 46 }
  47. 47 .col-sm-pull-10 {
  48. 48 right: 83.33333333%;
  49. 49 }
  50. 50 .col-sm-pull-9 {
  51. 51 right: 75%;
  52. 52 }
  53. 53 .col-sm-pull-8 {
  54. 54 right: 66.66666667%;
  55. 55 }
  56. 56 .col-sm-pull-7 {
  57. 57 right: 58.33333333%;
  58. 58 }
  59. 59 .col-sm-pull-6 {
  60. 60 right: 50%;
  61. 61 }
  62. 62 .col-sm-pull-5 {
  63. 63 right: 41.66666667%;
  64. 64 }
  65. 65 .col-sm-pull-4 {
  66. 66 right: 33.33333333%;
  67. 67 }
  68. 68 .col-sm-pull-3 {
  69. 69 right: 25%;
  70. 70 }
  71. 71 .col-sm-pull-2 {
  72. 72 right: 16.66666667%;
  73. 73 }
  74. 74 .col-sm-pull-1 {
  75. 75 right: 8.33333333%;
  76. 76 }
  77. 77 .col-sm-pull-0 {
  78. 78 right: auto;
  79. 79 }
  80. 80 .col-sm-push-12 {
  81. 81 left: 100%;
  82. 82 }
  83. 83 .col-sm-push-11 {
  84. 84 left: 91.66666667%;
  85. 85 }
  86. 86 .col-sm-push-10 {
  87. 87 left: 83.33333333%;
  88. 88 }
  89. 89 .col-sm-push-9 {
  90. 90 left: 75%;
  91. 91 }
  92. 92 .col-sm-push-8 {
  93. 93 left: 66.66666667%;
  94. 94 }
  95. 95 .col-sm-push-7 {
  96. 96 left: 58.33333333%;
  97. 97 }
  98. 98 .col-sm-push-6 {
  99. 99 left: 50%;
  100. 100 }
  101. 101 .col-sm-push-5 {
  102. 102 left: 41.66666667%;
  103. 103 }
  104. 104 .col-sm-push-4 {
  105. 105 left: 33.33333333%;
  106. 106 }
  107. 107 .col-sm-push-3 {
  108. 108 left: 25%;
  109. 109 }
  110. 110 .col-sm-push-2 {
  111. 111 left: 16.66666667%;
  112. 112 }
  113. 113 .col-sm-push-1 {
  114. 114 left: 8.33333333%;
  115. 115 }
  116. 116 .col-sm-push-0 {
  117. 117 left: auto;
  118. 118 }
  119. 119 .col-sm-offset-12 {
  120. 120 margin-left: 100%;
  121. 121 }
  122. 122 .col-sm-offset-11 {
  123. 123 margin-left: 91.66666667%;
  124. 124 }
  125. 125 .col-sm-offset-10 {
  126. 126 margin-left: 83.33333333%;
  127. 127 }
  128. 128 .col-sm-offset-9 {
  129. 129 margin-left: 75%;
  130. 130 }
  131. 131 .col-sm-offset-8 {
  132. 132 margin-left: 66.66666667%;
  133. 133 }
  134. 134 .col-sm-offset-7 {
  135. 135 margin-left: 58.33333333%;
  136. 136 }
  137. 137 .col-sm-offset-6 {
  138. 138 margin-left: 50%;
  139. 139 }
  140. 140 .col-sm-offset-5 {
  141. 141 margin-left: 41.66666667%;
  142. 142 }
  143. 143 .col-sm-offset-4 {
  144. 144 margin-left: 33.33333333%;
  145. 145 }
  146. 146 .col-sm-offset-3 {
  147. 147 margin-left: 25%;
  148. 148 }
  149. 149 .col-sm-offset-2 {
  150. 150 margin-left: 16.66666667%;
  151. 151 }
  152. 152 .col-sm-offset-1 {
  153. 153 margin-left: 8.33333333%;
  154. 154 }
  155. 155 .col-sm-offset-0 {
  156. 156 margin-left: 0;
  157. 157 }
  158. 158 }

.col-md-* 中等屏幕 桌面显示器 (≥992px)(栅格参数):

 col-md

.col-lg就不贴了,差不多都是。

实践图


效果图:

最后


虽然说介绍了布局的基本原理,讲得应该算是很详细了。至少能写出这么多东西来。

不过 Bootstrap 的布局可不止这些,你有没有发现  .col-md-offset-* .col-md-push-* 这些类。用这些可以进行很好的细节的排版,不过在这里就不讲了,毕竟这篇文章不是写如何使用 Bootstrap 的,而是让你理解 Bootstrap 布局的实现原理。

相关下载地址:

提取出的 Bootstrap 布局代码下载,可独立使用,就一个css,体积小而且实现了布局系统,当用不着Bootstrap这么100多K的文件的时候,可以考虑这个:

链接: http://pan.baidu.com/s/1dEM0pXJ 密码: ywd9

【原文】http://www.cnblogs.com/suwings/p/6079178.html

可参考:

http://get.ftqq.com/6195.get

http://www.cnblogs.com/dojo-lzz/p/4621627.html

【转及总结】Bootstrap 框架 栅格布局系统底层设计原理的更多相关文章

  1. Bootstrap 框架 栅格布局系统设计原理

    如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩.事实上,这个布局系统提供了一套响应式的布局解决方案. 既然这么好用,那他是如何用CSS来实现的呢? 我特意去Bootstrap官方下 ...

  2. Bootstrap栅格布局系统的特点

    栅格布局系统的特点: (1)所有的行必须放在容器中: .container或.container-fluid (2)分为多行(row),一行中平均分为12列(col) (3)网页内容只能放在列(col ...

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

    这个标题取的有点奇怪,怪我翻译的有问题吧.英文学平有限,有道词典和google翻译齐上阵是必须的.还好翻译的不是小说,对于技术文章,还是能勉强翻过来的. 本文主要讲解了Bootstrap3.0的栅格布 ...

  4. Bootstrap3.0的栅格布局系统实现原理

    这个标题取的有点奇怪,怪我翻译的有问题吧.英文学平有限,有道词典和google翻译齐上阵是必须的.还好翻译的不是小说,对于技术文章,还是能勉强翻过来的. 本文主要讲解了Bootstrap3.0的栅格布 ...

  5. bootstrap的栅格布局不支持IE8该如何解决

    用bootstrap的栅格布局在IE8上出现失效的情况,通常有两种解决方式 方法/步骤   方法一:引用第三方js,一个叫respond.js的东西,github上可以搜到   方法二:由于IE8不支 ...

  6. 【Bootstrap】 框架 栅格布局系统设计原理

    前提条件(Bootstrap 自带) 首先使用这个布局之前要定义一下代码: 这行代码如果不懂,可以搜索一下,总之大致意思就是,被定义的元素的内边距和边框不再会增加它的宽度,不加入的话排版会有问题. 不 ...

  7. bootstrap框架栅格系统使用

    使用的前端框架  bootstrap框架 Bootstrap是一个响应式的框架 我们在使用的时候主要使用的是它的网格系统, 1.bootstrap布局 布局容器:.container(用于固定宽度并支 ...

  8. Bootstrap响应式栅格系统的设计原理

    1.历史背景 Bootstrap是Twitter的工程师Mark Otto和Jacob Thornton开发的一套供内部使用的UI框架,于2011年开源.2012年发布的第二版中新增了12列栅格系统和 ...

  9. bootstrap的栅格布局与两列布局结合使用

    在工作中我们常常需要实现响应式布局,这个可以使用bootstrap的栅格系统来实现,我们在列里也需要实现一部分的响应式.比如下面的效果图,需要实现左边图标固定,右边的自适应 : 左边固定宽度,右边自适 ...

随机推荐

  1. android动画介绍之 自定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...

  2. Win8 HTML5与JS编程学习笔记(一)

    微软的Visual Studio提供了多种构成win8应用的方式,其中最让我感到激动的是基于网页设计语言的开发模式,它提供了结合HTML5与Javascript来开发应用的方法,通过这种方法进行开发, ...

  3. SpriteBuilder中如何给精灵添加帧动画

    首先你必须准备若干幅图片,当然最好做成Smart Sprite Sheet. 打开一个CCB文件,并鼠标选择根节点的CCSprite对象. 保持前者选中且Timeline的当前时间点把手在最左边,然后 ...

  4. Mongodb系列之--mongodb的启动与关闭

    Mongodb的开启   默认启动:   $ ./mongodb   默认数据保存路径:/data/db/ 默认端口:27017   修改默认路径:   --dbpath $ ./mongdb --d ...

  5. java 编程性能调优

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  6. How to download the installation package by ZOL Downer

    How to download the installation package by ZOL Downer Ma Genfeng (Guangdong Unitoll Services incorp ...

  7. objective-c中类似ruby枚举类的实例方法

    虽然obj-c的语法格式略显繁琐,但它和ruby都从某些方面继承了smalltalk的某些动态的东西.这些东西是 C和C++之类的静态语言所不曾有的. 比如ruby中可以将一个类或对象的所有方法枚举出 ...

  8. 恶补web之三:http学习

    http是超文本传输协议的简称,该协议设计目的是保证客户机与服务器之间的通信.http的工作方式为客户机与服务器之间的请求-应答协议. 一般来说web浏览器是客户端,计算机上的网络应用程序可能作为服务 ...

  9. 关于gcc的一点小人性化提示

    现在对于大多数平台的C编译器来说都会有很多种选择,而gcc和clang无疑是2个非常优秀的C编译器.当然他们也不只是C编译器.我最近用clang的比较多,原因有很多.不过一些小的细节很让我喜欢,比如O ...

  10. html5中的网页结构

    一.html5中的大纲 在html5中,使用各种结构元素所描述出来的整个网页的层次结构,就是该网页的大纲.因此在组织这份大纲的时候,不能使用div元素,因为div元素只能当做容器,用在需要对网页中某个 ...