Bootstrap栅格系统

移动设备优先

  • Bootstrap 3将对移动设备的友好支持直接融合进了框架的内核中,Bootstrap是移动设备优先的。
  • 为了确保适当的绘制和触屏缩放,需要在head中添加viewport元数据标签。设置 meta 属性为 user-scalable=no 可以禁用视口缩放。
  •  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">  

布局容器

  • Bootstrap 需要为页面内容和栅格系统包裹一个 .container 容器。.container 类用于固定宽度;.container-fluid 类(流式布局容器)用于 100% 宽度。两个类不能互相嵌套。
  • 随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列,用于通过一系列的行(row)与列(column)的组合来创建页面布局,网页中的内容就可以放在创建好的栅格系统中。
  • “行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中。
  • lg--large,表示大的;md--middle,表示中等的;sm--small,表示小的;xs--extra small,表示特小的。
<div class="container">
            <div class="row">
                <div class="col-lg-1 col-md-3 con ">col-lg-1    </div>
                <div class="col-lg-1 col-md-3 con">col-lg-1    </div>
            </div>
</div>        
  • 内容应当放置于“列(column)”内,并且,只有“列(column)”可以作为行(row)”的直接子元素。通过为“列(column)”设置 padding 属性,从而创建列与列之间的间隔(gutter)。
  • 如果一“行(row)”中包含了的“列(column)”大于 12,多余的“列(column)”所在的元素将被作为一个整体另起一行排列。

媒体查询

/* 超小屏幕(手机,小于 768px) */
/* 没有任何媒体查询相关的代码,因为这在 Bootstrap 中是默认的(还记得 Bootstrap 是移动设备优先的吗?) */

/* 小屏幕(平板,大于等于 768px) */
@media (min- @screen-sm-min) { ... }

/* 中等屏幕(桌面显示器,大于等于 992px) */
@media (min- @screen-md-min) { ... }

/* 大屏幕(大桌面显示器,大于等于 1200px) */
@media (min- @screen-lg-min) { ... }

偶尔也会在媒体查询代码中包含 max-width 从而将 CSS 的影响限制在更小范围的屏幕大小之内。

@media (max-width: @screen-xs-max) { ... }
@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { ... }
@media (min-width: @screen-md-min) and (max-width: @screen-md-max) { ... }
@media (min-width: @screen-lg-min) { ... }
 

水平排列

<div class="row">
  <div class="col-md-1 con">.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从而设置css属性,如.con
  • col-md-1中的屏幕的列,1/12列。将屏幕分为12列
  • 如果不希望所有列在小屏幕上都堆叠在一起,可以使用针对超小屏幕和中等屏幕定义的类.col-xs-* 和 .col-md-*
  • 为了使用内置的栅格系统将内容再次嵌套,可以通过添加一个新的 .row 元素和一系列 .col-sm-* 元素到已经存在的 .col-sm-* 元素内。

响应式列重置

  • 在某些阈值时,某些列可能会出现比别的列高的情况。为了克服这一问题,建议联合使用 .clearfix 和 响应式工具类。(用于在分界点清除响应)
  • 除了列在分界点清除响应, 您可能需要 重置偏移, 后推或前拉某个列。在特定的断点处重置偏移,推动和拉动。

列偏移

  • 使用 .col-md-offset-* 类可以将列向右侧偏移。这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin)。例如,.col-md-offset-4 类将 .col-md-4 元素向右侧偏移了4个列(column)的宽度。

嵌套列

  • 为了使用内置的栅格系统将内容再次嵌套,可以通过添加一个新的 .row 元素和一系列 .col-sm-* 元素到已经存在的 .col-sm-* 元素内。被嵌套的行(row)所包含的列(column)的个数不能超过12(不一定占满12列)。

列排序

  • 通过使用 .col-md-push-* 和 .col-md-pull-* 类就可以改变列(column)的顺序。

Less mixin 和变量

  • 通过变量来定义列数、槽(gutter)宽、媒体查询阈值(用于确定合适让列浮动)。我们使用这些变量生成预定义的栅格类,如上所示,还有如下所示的定制 mixin。
@grid-columns:              12;
@grid-gutter-         30px;
@grid-float-breakpoint:     768px;
  • mixin

    mixin 用来和栅格变量一同使用,为每个列(column)生成语义化的 CSS 代码。

  • 官方源码
// Creates a wrapper for a series of columns
.make-row(@gutter: @grid-gutter-width) {
  // Then clear the floated columns
  .clearfix();

  @media (min- @screen-sm-min) {
    margin-left:  (@gutter / -2);
    margin-right: (@gutter / -2);
  }

  // Negative margin nested rows out to align the content of columns
  .row {
    margin-left:  (@gutter / -2);
    margin-right: (@gutter / -2);
  }
}

// Generate the extra small columns
.make-xs-column(@columns; @gutter: @grid-gutter-width) {
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);

  // Calculate width based on number of columns available
  @media (min- @grid-float-breakpoint) {
    float: left;
     percentage((@columns / @grid-columns));
  }
}

// Generate the small columns
.make-sm-column(@columns; @gutter: @grid-gutter-width) {
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);

  // Calculate width based on number of columns available
  @media (min- @screen-sm-min) {
    float: left;
     percentage((@columns / @grid-columns));
  }
}

// Generate the small column offsets
.make-sm-column-offset(@columns) {
  @media (min- @screen-sm-min) {
    margin-left: percentage((@columns / @grid-columns));
  }
}
.make-sm-column-push(@columns) {
  @media (min- @screen-sm-min) {
    left: percentage((@columns / @grid-columns));
  }
}
.make-sm-column-pull(@columns) {
  @media (min- @screen-sm-min) {
    right: percentage((@columns / @grid-columns));
  }
}

// Generate the medium columns
.make-md-column(@columns; @gutter: @grid-gutter-width) {
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);

  // Calculate width based on number of columns available
  @media (min- @screen-md-min) {
    float: left;
     percentage((@columns / @grid-columns));
  }
}

// Generate the medium column offsets
.make-md-column-offset(@columns) {
  @media (min- @screen-md-min) {
    margin-left: percentage((@columns / @grid-columns));
  }
}
.make-md-column-push(@columns) {
  @media (min- @screen-md-min) {
    left: percentage((@columns / @grid-columns));
  }
}
.make-md-column-pull(@columns) {
  @media (min- @screen-md-min) {
    right: percentage((@columns / @grid-columns));
  }
}

// Generate the large columns
.make-lg-column(@columns; @gutter: @grid-gutter-width) {
  position: relative;
  // Prevent columns from collapsing when empty
  min-height: 1px;
  // Inner gutter via padding
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);

  // Calculate width based on number of columns available
  @media (min- @screen-lg-min) {
    float: left;
     percentage((@columns / @grid-columns));
  }
}

// Generate the large column offsets
.make-lg-column-offset(@columns) {
  @media (min- @screen-lg-min) {
    margin-left: percentage((@columns / @grid-columns));
  }
}
.make-lg-column-push(@columns) {
  @media (min- @screen-lg-min) {
    left: percentage((@columns / @grid-columns));
  }
}
.make-lg-column-pull(@columns) {
  @media (min- @screen-lg-min) {
    right: percentage((@columns / @grid-columns));
  }
}
  •  可以通过修改这些值,定制自己想要的布局
  • 实例:利用默认设置生成两列布局(列之间有间隔)的案例。
.wrapper {
  .make-row();
}
.content-main {
  .make-lg-column(8);
}
.content-secondary {
  .make-lg-column(3);
  .make-lg-column-offset(1);
}

<div class="wrapper">
  <div class="content-main">...</div>
  <div class="content-secondary">...</div>
</div>

原文地址:https://www.cnblogs.com/zhangzimuzjq/p/11846091.html