Bootstrap响应式栅格布局实现方法

栅格系统的原理
  

栅格系统原理

假设:Flowline的宽度为W,column的宽度为c,Gutter的宽度为g,Margin的宽度为m,栅格列数为N
  W = c*N + g*(N-1) + 2m;g的宽度通常为m的两倍,所以:
  W = (c+g) * N;把c+g记为C,得:
  W = C * N;
大部分的栅格系统都是此公式的变体。

Bootstrap的栅格系统
下面我们将一起来看一下常见的栅格布局的设计和bootstrap中的设计实现。BootStrap中合理的使用栅格布局,必须将列放入row中,而row必须放入container中。container类在布局中主要有两个作用:

  1. 在不同的宽度区间内(响应式断点)提供宽度限制。当宽度变化时,采用不同的宽度。
  2. 提供一个padding,阻止内部内容触碰到浏览器边界。

Bootstrap中使用padding代替上文中的margin。大小为15px,如下图所示,粉红色为padding大小。


Bootstrap container

Row是column的容器,每个row中的column之和必须为12,不过我们可以通过嵌套的方式扩展。Row的左右margin都为-15px,用来抵消container中的padding,如下图蓝色部分所示:


Boostrap row

row的这种设计主要为了方便嵌套,后文中会提到。
Colomn是栅格系统的主角,每个column左右padding都为15px,上文中row的负margin抵消了container的padding,所以为每个column设置padding就是为了防止内容直接触碰边界,同时不同的column之间拥有30px的卡槽(Gutter)。如下图黄色部分所示:

现在想想上文中提到的公式:W = C * N;
上文提到row的负margin设计主要为了嵌套,如果要在column中嵌套column首先要把被嵌套的column放到row中,把row放到作为容器的column中,而不需要在放置一个container。如下图中蓝色所示,是放入column中的row的负margin区域。



现在将被嵌套的column放入row中,如下图所示,上层column便是起到了container的作用。

如此我们便看到了Bootstrap栅格系统的精妙所在。

以上为博客引用内容,原博客地址为:CSS:谈谈栅格布局

自己实现响应式的栅格系统布局:

<!DOCTYPE html>
<html lang="en">
  <head>    
    <meta charset="UTF-8">    
    <title>Bootstrap栅格系统</title>
  </head>
  <style type="text/css">    
    @media screen and (max-width: 768px){        
      .container{            
        width: auto;        
      }        
      .col-md-1{            
        width: auto;            
        padding: 0px 15px;        
      }        
      .col-md-3{            
        width: auto;            
        padding: 0px 15px;        
      }    
  }    
  @media screen and (max-width: 992px) and (min-width: 768px){                 
    .container{            
      width: 750px;        
    }        
    .col-md-1{            
      width: auto;            
      padding: 0px 15px;        
    }        
    .col-md-3{            
      width: auto;            
      padding: 0px 15px;        
    }    
  }    
  @media screen and (min-width: 992px) and (max-width: 1200px){        
    .container{            
      width: 970px;        
    }        
    .col-md-3{            
      width: 25%;            
      float: left;            
      padding: 0px 15px;        
    }        
    .col-md-1{            
      width: 8.33333333%;            
      float: left;            
      padding: 0px 15px;        
    }    
  }    
  @media screen and (min-width: 1200px){        
    .container{            
      width: 1170px;        
    }        
    .col-md-3{            
      width: 25%;            
      float: left;            
      padding: 0px 15px;        
    }        
    .col-md-1{            
      width: 8.33333333%;            
      float: left;            
      padding: 0px 15px;        
    }    
   }    
  *{        
    box-sizing: border-box;    
  }    
  .container{        
    padding: 0px 15px;        
    margin: 0 auto;    
  }    
  .container:after{        
    clear: both;        
    display: block;        
    content: "";    
  }    
  .row{        
    margin-left: -15px;        
    margin-right: -15px;    
  }    
  .row:after{        
    display: block;        
    clear: both;        
    content: "";    
  }
</style>
<body>
  <div class="container">    
    <div class="row">        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>        
      <div class="col-md-1">col-md-1</div>    
    </div>    
    <div class="row">        
      <div class="col-md-3">col-md-3</div>        
      <div class="col-md-3">col-md-3</div>        
      <div class="col-md-3">col-md-3</div>        
      <div class="col-md-3">col-md-3</div>    
    </div>
   </div>
</body>
</html>

实现效果

横向布局
纵向布局
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,828评论 6 526
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,669评论 3 412
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,467评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,238评论 1 306
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,039评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,561评论 1 319
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,658评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,806评论 0 285
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,316评论 1 329
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,293评论 3 353
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,443评论 1 364
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,998评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,698评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,097评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,333评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,012评论 3 385
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,434评论 2 370

推荐阅读更多精彩内容

  • 大家好,我是IT修真院成都分院第7期的学员韩建名,一枚正直纯洁善良的WEB前端程序员。 1.背景介绍 Bootst...
    inh_阅读 774评论 0 2
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,774评论 1 92
  • Bootstrap是什么? 一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。GitHub上介绍 的...
    凛0_0阅读 10,893评论 3 184
  • CSS3 媒体查询与响应式布局 第一章 序论 现今每天都有更多的手机和平板电脑问市。消费者能够拥有可想象到的各种规...
    whitsats阅读 4,895评论 0 10
  • 文|热点资讯 近期,朝美关系持续紧张,很有战争一触即发之势。在此,让我们设想下,美国一旦对朝鲜开战,将产生怎么样的...
    热点资讯阅读 1,538评论 0 1