Grid是什么?

Grid 翻译成中文是格栅系统,不过还是不好理解,理解为一行12个格子可能更容易些。Grid可以把一行内容最多分成12个格子,而且可以根据需要来合并这12个格子中的其中某些格子。下面是一个示意图。这样做有什么好处呢?最大的好处就是方便排版。

举个例子,我现在要在每一行设置三个元素,我想让这三个元素在页面中占据相同的宽度,也就是把页面三等分,那么,我们就可以用 Grid 系统来处理,三个元素都设置为 span 4即可以。

Grid 的基础用法:

四个层级:

Grid系统有四个层级,分别如下,设计的初衷是针对不同的屏幕大小,可以分类显示。

  • xs (for phones)
  • sm (for tablets)
  • md (for desktops)
  • lg (for larger desktops)

Tip: Each class scales up, so if you wish to set the same widths for xs and sm, you only need to specify xs.

使用规则:

  • .row 必须在.container(固定宽度fixed-width) 或者 .container-fluid(全屏full-width) 包裹的内容中使用。(结合下方代码示例理解)
  • 而且 元素应该放在columns中,而 columns(ie:col-sm-4) 应该直接是.row直接的子集。(结合下方代码示例理解)
  • columns 的总数不能超过12个,否则会显示错乱。
  • 除了 xs 之外,其他的三个层级,到某个固定的屏幕宽度节点,多会自动换行,这个需要注意,当然这样也能提升移动设备上的可阅读性。
  • 请注意,如果只设置了比较小的层级的的参数的话,自动套用到上一级别的属性,比如设置了 xs 的 column的,在 sm、md 和 lg 都没有设置的情况下,会自动套用 xs 的分栏 。如果sm、md 和 lg 另行单独设置了,会按照设置的参数来显示。

示例代码:

<div class="container"> # 需要在 container 或 container-fluid 下使用

  <div class="row">     #用 row 来定义一行

    <div class="col-*-*"></div>  #col-*-*需要直接紧跟在 row 下方。
</div>
<div class="row"> #用 row 来定义另外一行 <div class="col-*-*"></div>
<div class="col-*-*"></div>
<div class="col-*-*"></div>
</div>
<div class="row">
...
</div>
</div>

So, to create the layout you want, create a container (). Next, create a row (). Then, add the desired number of columns (tags with appropriate .col-*-* classes). Note that numbers in .col-*-* should always add up to 12 for each row.

Grid 的微进阶用法:

1.同一个元素可以设定多个层级

比如下面这行代码,如果是在小屏幕下,就是 3/9 比例分栏显示;如果是在中等屏幕下,就是 6/6 比例分栏显示;如果是在大屏幕下,就是 4/8 比例分栏显示。

这时候你要问了,col-xs-*没设置,如果缩小到一定程度,会怎么显示,答案是缩小到 xs 的宽度后,每个元素都是占 1 整行。这样做的好处就是可以针对不同的屏幕显示最优的效果。

同理,如果只设定了col-lg-*,那么当屏幕缩小到中屏幕宽度及以下的时候,都是每个元素占1整行。

<div class="col-sm-3 col-md-6 col-lg-4">....</div>
<div class="col-sm-9 col-md-6 col-lg-8">....</div>

请看下面三张图:

  • 大屏幕 4/8 比例分栏

  • 中屏幕 6/6 比例分栏

  • 小屏幕 3/9 比例分栏

  • 最小屏幕,1个元素1行:

2.row 内部还可以嵌套row(Nestable)

下面的例子是整个屏幕分2栏,而且第1栏下面还分了2个子栏。注意在栏目下的子栏里面也是12等分的。所以,第二个row里面的两等分用是2个col-sm-6

<div class="row">
<div class="col-sm-8">
.col-sm-8
<div class="row">
<div class="col-sm-6">.col-sm-6</div>
<div class="col-sm-6">.col-sm-6</div>
</div>
</div>
<div class="col-sm-4">.col-sm-4</div>
</div>

在对应屏幕的显示效果如下:

如果屏幕宽度小于 sm 对应的宽度,则会显示成这样:先显示第1栏,再显示第1栏下面的子栏,最后再显示第2栏。

我们再来尝试改下代码,把子栏都改为col-xs-6,这时候屏幕宽度小于 sm 对应宽度会显示如下图。

总结下,嵌套 row这个方法要慎重使用,因为需要思考几层才能知道最终的显示结果。

3、当元素高度不一致的时候,防止发生不期望的换行(Clear Floats)

方法:添加.clearfix这个属性。请参考下面的代码导致的不同变化:

<div class="row">
<div class="col-xs-6 col-sm-3">
Column 1
<br>
Resize the browser window to see the effect.
</div>
<div class="col-xs-6 col-sm-3">Column 2</div>
<!-- Add clearfix for only the required viewport -->
<div class="clearfix visible-xs"></div> #这里增加了 clearfix 来确保Column 3和Column 4的正确换行。 <div class="col-xs-6 col-sm-3">Column 3</div>
<div class="col-xs-6 col-sm-3">Column 4</div>
</div>

显示效果如下:

sm 尺寸下,分成4栏:

xs 尺寸下,分成2栏,加了 clearfix 这个属性后,Column 3和Column 4都在Column 1的下方重新起一行,这是我们一般预期达到的效果。

假如我们不添加clearfix这个属性,xs 尺寸下会出现这样的情况,也就是说Column 3和Column 4看到Column 1后面还有空间,就直接缩到那里了。这一般不是我们期望的方式,所以要注意。注意,这些都是因为元素的高度不一致,如果元素高度一致,那么就不需要这样的设定了。

4.缩进

.col-*-offset-* 的作用相当于缩进。就是往后退几格的意思。我们来看个例子:

  <div class="row" style="">
<div class="col-sm-5 " style="">.col-sm-5</div>
<div class="col-sm-5 col-sm-offset-2 " style="">.col-sm-5 .col-sm-offset-2 </div>
</div>

在 sm 宽度及以上的时候,由于设置了第2栏往后缩进2格,所以会显示如下:2栏分别占5格,栏目之间的空白为2格。

sm 宽度以下的时候,会显示成这样,也就是说退格不起作用了。

5.push and pull 可以重新调整元素的位置(Change Column Ordering)

这个详见后面的参考资料,目前还有点晕,暂时留个尾巴在这。

bootstrap -- 学习之流动布局的更多相关文章

  1. BootStrap学习之栅格布局

    Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的改变,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin用于生成更具语 ...

  2. bootstrap学习总结-02 网格布局

    1  网格布局 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. <!DOCTYPE html> ...

  3. Bootstrap页面布局3 - BS布局以及流动布局

    1. <h1 class='page-header'>布局<small> 使用bootstrap网格系统布局网页</small></h1> 得到如图所示 ...

  4. Bootstrap学习笔记-布局

    Bootstrap学习笔记-布局 默认是响应式布局,就是你在改变页面的时候也不会出现乱的现象. <html><head> <meta charset="utf- ...

  5. Bootstrap学习记录-1.Navigation

    Bootstrap中的导航栏功能需要添加bootstrap.css.jquery.js.bootstrap.js,其中,jquery.js文件是bootstrap.js文件中必须的,否则就会抛出异常信 ...

  6. Bootstrap~学习笔记索引

    回到占占推荐博客索引 bootstrap已经用了有段时间了,感觉在使用上还是比较容易接受的,在开发人员用起来上,也还好,不用考虑它的兼容性,手机,平台,PC都可以有效的兼容. bootstrap官方a ...

  7. Bootstrap 学习(1)

    简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootst ...

  8. 前端框架——BootStrap学习

    BootStrap简单总结下:1.栅格系统,能够很好的同时适应手机端和PC端(及传说中的响应式布局) 2.兼容性好 接下来是对BootStrap学习的一些基础案例总结和回顾: 首先引入:bootstr ...

  9. 2015.8.1 bootstrap学习(个人每日学习的随笔,比较凌乱

    写在前面: 记录自己的学习中遇到的问题和解决办法.因为是每日晚上总结,可能只是随便一笔带过方便自己记忆.如有写的错误或者凌乱之处,请勿介意 1.<html lang="zh-hans& ...

随机推荐

  1. 欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍

    1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. int gcd(int x,int y){ ?x:gcd(y,x%y); } int lcm(int x,int y){ return x* ...

  2. MySQL的索引知识

    一.什么是索引. 索引是用来加速查询的技术的选择之一,在通常情况下,造成查询速度差异 的因素就是索引是否使用得当.当我们没有对数据表的某一字段段或者多个 字段添加索引时,实际上执行的全表扫描操作,效率 ...

  3. Git学习——从远程库克隆

    克隆一个本地库 首先准备好一个远程库.再用命令克隆一个本地库. git clone git@github.com:<github账户>/<远程库名>.git 克隆一个仓库,首先 ...

  4. Python中单元测试出错了,会怎么样?

    在上一篇中,我们看到了单元测试正常通过时的情况,如果我们边修改一下要测试的函数,然后再运行单元测试,会出现什么情况. 原say_hello_name.py def hello_name(name): ...

  5. Python包,json&pickle,time&datetime,random模块

    补充内容: 解决模块循环导入的两种方法:(不得已而为之,表示程序结构不够严谨) 将导入模块语句放在文件最下方 保证语句导入之前函数内代码能够被执行 将导入语句放进函数体内 使其不影响整个函数的运行 包 ...

  6. $(addprefix PREFIX,NAMES…)

    addprefix 是makefile中的函数,是添加前缀的函数例如:$(addprefix src/,foo bar) 返回值为“src/foo src/bar”.所以上面的意思是为dirver_d ...

  7. grep理解

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html部分摘录于此 grep与正规表达式  字符类 字符类的搜索:如果我想要搜 ...

  8. Ubuntu 16.04上thunderbird配置163邮箱出现“配置无法被验证-请查看用户名或密码是否正确?”

    在Ubuntu 16.04 上用thunderbird配置163免费邮箱时出现的提示信息如图1: 图1 提示信息 网上有不少方法都说是将接收和发出的主机名分别改为 imap.ym.163.com 和 ...

  9. PAT Basic 1021

    1021 个位数统计 给定一个k位整数N = d~k-1~*10^k-1^ + ... + d~1~*10^1^ + d~0~ (0<=d~i~<=9, i=0,...,k-1, d~k- ...

  10. git commit 含有中文的代码,提示Warnning:Your console font probably doesn't support Unicode.......

    git 提交代码是会遇到以下问题, git commit 代码时提示: Warning: Your console font probably doesn't support Unicode. If ...