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

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

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

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

前提条件(Bootstrap 自带



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

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

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

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

* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

容器 container


container 的设计大致如下:

代码实现:

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

.container {
  padding-right: 15px;
  padding-left: 15px;
  margin-right: auto;
  margin-left: auto;
}
@media (min-width: 768px) {/*当宽度大于768px时触发*/
  .container {
    width: 750px;
  }
}
@media (min-width: 992px) {/*当宽度大于992px时触发*/
  .container {
    width: 970px;
  }
}
@media (min-width: 1200px) {/*当宽度大于1200px时触发*/
  .container {
    width: 1170px;
  }
}
.container-fluid { /*这个是宽度默认*/
  padding-right: 15px;
  padding-left: 15px;
  margin-right: auto;
  margin-left: auto;
}

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

为什么要Padding 15px呢?

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

行 row


最简单的莫过于的 row 了。

是不是感觉不错:

代码实现:

没错就两行

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

列 Column


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

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

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

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

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

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

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

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

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

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

代码实现:

col-xs-*的:

.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2,/*后面代码省略,选择了所有的列,所有不同的列类型全部都有这样的有这样*/{
  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-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%;}

其他元素则使用

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

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

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



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

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

col-sm

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

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

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

不论对您是否有帮助,谢谢你的耐心阅读。

时间: 2024-09-28 16:54:40

Bootstrap 框架 栅格布局系统设计原理的相关文章

【转】Bootstrap 框架 栅格布局系统底层设计原理

如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩.事实上,这个布局系统提供了一套响应式的布局解决方案. 既然这么好用,那他是如何用CSS来实现的呢? 我特意去Bootstrap官方下载了源代码进行分析了一番,看完之后果然有了收获,不过我只看了栅格布局的那块代码,其实也很简单,不必担心不懂,你只需要要基础的CSS知识即可. 前提条件(Bootstrap 自带) 首先使用这个布局之前要定义一下代码: 这行代码如果不懂,可以搜索一下,总之大致意思就是,被定义的元素的内边距和边框不再会

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

在工作中我们常常需要实现响应式布局,这个可以使用bootstrap的栅格系统来实现,我们在列里也需要实现一部分的响应式.比如下面的效果图,需要实现左边图标固定,右边的自适应 : 左边固定宽度,右边自适应,这个时候我就想到了两列布局,将左右设置float,左边设置固定宽度,右边的宽度为calc(100% - 左边的宽度),把这两种布局结合使用就可以实现效果.

初识bootstrap框架栅格系统

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,user-scalable=no, initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"/>

响应式设计(2)--引入bootstrap栅格布局

bootstrap为我们内置了栅格系统布局,通过它,我们可以非常快速的在不同宽度的屏幕下进行自适应布局. [grid栅格系统]http://v3.bootcss.com/css/#grid  [响应式工具]http://v3.bootcss.com/css/#responsive-utilities 不了解bootstrap栅格布局的同学,可以先看看上面的链接,了解个大概. 你真的了解吗?只要你了解个大概的话,就能回答的出下面几个问题,回答不出来的话,点开上面的链接好好看一遍 1)bootstr

css模拟Bootstrap响应式布局——栅格

做作业的时候遇见用css模拟Bootstrap的栅格布局,学习了一下.发现这个很有用,用来在不同的平台上得到很好地用户体验,比如Phone.Pad.大屏幕显示器.小屏幕显示器.自己模拟用css写了一下,用的是max-width.min-width子元素的宽度设置为不同的百分比,模拟栅格的12列.把100划分12份,用浮动宽度超出会自动换行,下面是段代码,以后会认真学习bootstrap.加油!飞燕草 1 <style type="text/css"> 2 #containe

bootstrap栅格布局-v客学院知识分享

今天主要跟大家讲解下bootstrap的栅格布局,以及使用过程中应该注意的问题 首先我们要使用bootstrp的栅格布局就必须使用HTML正确的基本结构 如下图: 必须给要使用栅格布局的盒子定义class为container.目的一是为了在响应式的布局上给宽度约束,二是提供padding以至于不让内容贴住浏览器的边缘. Class为row的盒子是指行的容器,bootstrap把一行分成了12等分,下面讲解下col-xx-是怎么使用的吧. Bootstrap栅格布局中css中有四个类,分别是col

浅谈css的栅格布局

栅格布局想必大家都很了解,我们做页面开发的时候,往往对页面板式的要求很高,如何对各个区域的内容排版,并使之对齐是我们的一大难题.而栅格系统就是我们排版的利器,他支持自动对齐.自动计算边距.流式布局等优点,简单好用的特性使得栅格布局成为所有主流框架的必备的功能. 我们简单分析一下栅格布局的原理: 容器/行/列/栅间距 一个栅格布局需要3部分组成--容器(container),行(row),列(column,也可称为栅).容器是用于确定宽度的,行需要放到容器中:行是将列分组,并把一组列合并为一个行:

Bootstrap响应式布局以及栅格框架

一.Bootstrap简单配置简单使用Bootstrap,只需引入: <script type="text/javascript" src="js/jquery.js" ></script> <script type="text/javascript" src="js/bootstrap.js" ></script> <link rel="stylesheet&q

简述Bootstrap栅格布局方式

栅格系统用于通过行(row)和列(column)组合创建页面布局,内容可以放入创建好的布局中. Bootstrap栅格系统的工作原理: “行(row)”必须包含在 .container中,以便为其赋予合适的排列(aligment)和内补(padding)通过    点container可以将界面放入浏览器的中间位置. 使用“行(row)”在水平方向创建一组“列(column)”. 你的内容应当放置于“列(column)”内,而且,只有“列(column)”可以作为行(row)”的直接子元素. 类