zoukankan      html  css  js  c++  java
  • Bootstrap栅格源码

    Bootstrap的栅格源码

    1.固定和流体容器的公共样式

     1 // 固定和流体容器的公共样式
     2 //@grid-gutter-widt:槽宽
     3 .container-fixed(@gutter: @grid-gutter-width) { //
     4   margin-right: auto;
     5   margin-left: auto;
     6   padding-left:  floor((@gutter / 2));
     7   padding-right: ceil((@gutter / 2));
     8   &:extend(.clearfix all);  //继承
     9 }
    10 // 行
    11 .make-row(@gutter: @grid-gutter-width) {
    12   margin-left:  ceil((@gutter / -2));
    13   margin-right: floor((@gutter / -2));
    14   &:extend(.clearfix all);
    15 }

    2.调用混合入口

     1 //固定容器
     2 .container {
     3   .container-fixed(); //定义左右padding,margin,清除浮动
     4   @media (min- @screen-sm-min) {
     5      @container-sm;
     6   }
     7   @media (min- @screen-md-min) {
     8      @container-md;
     9   }
    10   @media (min- @screen-lg-min) {
    11      @container-lg;
    12   }
    13 }
    14 
    15 //流体容器
    16 .container-fluid {
    17   .container-fixed();
    18 }
    19 
    20 // 行
    21 .row {
    22   .make-row();
    23 }
    24 
    25 // 列
    26 .make-grid-columns();
    27 
    28 // 移动优先,顺序不变
    29 .make-grid(xs);
    30 @media (min- @screen-sm-min) {
    31   .make-grid(sm);
    32 }
    33 @media (min- @screen-md-min) {
    34   .make-grid(md);
    35 }
    36 @media (min- @screen-lg-min) {
    37   .make-grid(lg);
    38 }

    3,定义列的混合

      1 // 列第一步
      2 .make-grid-columns() {
      3    //.col(2,".col-xs-1, .col-sm-1, .col-md-1, .col-lg-1")
      4   .col(@index) { 
      5     @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
      6     .col((@index + 1), @item);
      7   }
      8   
      9   
     10     /*  递归
     11         .col(3,".col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,.col-xs-2, .col-sm-2, .col-md-2, .col-lg-2")
     12             ....
     13         .col(13,str)
     14             str:
     15                 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,
     16                 .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2,
     17                 ...
     18                 .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12
     19     */
     20   .col(@index, @list) when (@index =< @grid-columns) { 
     21     @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
     22     .col((@index + 1), ~"@{list}, @{item}");
     23   }
     24   
     25     /*
     26         .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,
     27         .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2,
     28         ...
     29         .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{
     30           position: relative;
     31           min-height: 1px;
     32           padding-left: 15px;
     33           padding-right: 15px;
     34         }
     35     */
     36   .col(@index, @list) when (@index > @grid-columns) { 
     37     @{list} {
     38       position: relative;
     39       min-height: 1px;
     40       padding-left:  ceil((@grid-gutter-width / 2));
     41       padding-right: floor((@grid-gutter-width / 2));
     42     }
     43   }
     44   
     45   
     46   .col(1); 
     47 }
     48 
     49 
     50 
     51 // 列第二步
     52 .make-grid(@class) {
     53     //2.1
     54   .float-grid-columns(@class);
     55     //2.2
     56   .loop-grid-columns(@grid-columns, @class, width);
     57     //2.3(列排序)
     58   .loop-grid-columns(@grid-columns, @class, pull);
     59   .loop-grid-columns(@grid-columns, @class, push);
     60     //2.4(列偏移)
     61   .loop-grid-columns(@grid-columns, @class, offset);
     62 }
     63 
     64 
     65 
     66 //2.1
     67 /*
     68  * .col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,...col-xs-12{
     69  *     float: left;
     70  * }
     71  * */
     72 .float-grid-columns(@class) {
     73   .col(@index) { 
     74     @item: ~".col-@{class}-@{index}";
     75     .col((@index + 1), @item);
     76   }
     77   .col(@index, @list) when (@index =< @grid-columns) { // general
     78     @item: ~".col-@{class}-@{index}";
     79     .col((@index + 1), ~"@{list}, @{item}");
     80   }
     81   .col(@index, @list) when (@index > @grid-columns) { // terminal
     82     @{list} {
     83       float: left;
     84     }
     85   }
     86   .col(1); 
     87 }
     88 
     89 //2.2(width) 2.3(pull push) 2.4(offset)的入口
     90 .loop-grid-columns(@index, @class, @type) when (@index >= 0) {
     91   .calc-grid-column(@index, @class, @type);
     92   .loop-grid-columns((@index - 1), @class, @type);
     93 }
     94 
     95 
     96 // 2.2
     97 /*
     98  * .col-xs-12{
     99  *     12/12;
    100  * }
    101  * .col-xs-11{
    102  *     11/12;
    103  * }
    104  * ...
    105  * .col-xs-1{
    106  *     1/12;
    107  * } 
    108  * */
    109 .calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
    110   .col-@{class}-@{index} {
    111      percentage((@index / @grid-columns));
    112   }
    113 }
    114 
    115 
    116 
    117 
    118 
    119 
    120 //2.3
    121 /*push                  pull:
    122  * .col-xs-push-12{         .col-xs-pull-12{      
    123  *     left:12/12;              right:12/12;
    124  * }                        }
    125  * .col-xs-push-11{
    126  *     left:11/12;
    127  * }
    128  * ...                      ...
    129  * .col-xs-push-1{
    130  *     left:1/12;
    131  * } 
    132  * .col-xs-push-0{           .col-xs-pull-0{
    133  *     left:auto;               right:auto;
    134  * }                         }
    135  * */
    136 .calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
    137   .col-@{class}-push-@{index} {
    138     left: percentage((@index / @grid-columns));
    139   }
    140 }
    141 .calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
    142   .col-@{class}-push-0 {
    143     left: auto;
    144   }
    145 }
    146 .calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
    147   .col-@{class}-pull-@{index} {
    148     right: percentage((@index / @grid-columns));
    149   }
    150 }
    151 .calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
    152   .col-@{class}-pull-0 {
    153     right: auto;
    154   }
    155 }
    156 
    157 
    158 
    159 //2.4
    160 /*
    161  * .col-xs-offset-12{
    162  *     margin-left:12/12;
    163  * }
    164  * .col-xs-offset-11{
    165  *     margin-left:11/12;
    166  * }
    167  * ...
    168  * .col-xs-offset-1{
    169  *     margin-left:1/12;
    170  * } 
    171  * .col-xs-offset-0{
    172  *     margin-left:0;
    173  * } 
    174  * */
    175 .calc-grid-column(@index, @class, @type) when (@type = offset) {
    176   .col-@{class}-offset-@{index} {
    177     margin-left: percentage((@index / @grid-columns));
    178   }
    179 }

    4.笔记

      1 ###容器
      2     1.流体容器 width为auto
      3     2.固定容器
      4                 阈值min-width                        width
      5             大于等于1200(lg 大屏pc)           1170(1140+槽宽)
      6             
      7             大于等于992(md 中屏pc)             970(940+槽宽)
      8             小于1200
      9             
     10             大于等于768(sm 平板)             750(720+槽宽)
     11             小于992
     12             
     13             小于768(xs 移动手机)            auto
     14     3.栅格系统
     15         
     16 
     17 ###栅格源码分析
     18     1.流体容器&固定容器 公共样式
     19       margin-right: auto;
     20       margin-left: auto;
     21       padding-left:  15px;
     22       padding-right: 15px;    
     23     
     24     2.固定容器 特定样式
     25         顺序不可变
     26           @media (min- @screen-sm-min) {
     27              @container-sm;
     28           }
     29           @media (min- @screen-md-min) {
     30              @container-md;
     31           }
     32           @media (min- @screen-lg-min) {
     33              @container-lg;
     34           }
     35     
     36     3.行
     37         margin-left:  -15px;
     38           margin-right: -15px;
     39       
     40     4.列
     41         .make-grid-columns()--->
     42             .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,
     43             .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2,
     44             ...
     45             .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{
     46               position: relative;
     47               min-height: 1px;
     48               padding-left: 15px;
     49               padding-right: 15px;
     50             }
     51         
     52         .make-grid(xs)--->
     53               float-grid-columns(@class);
     54                      * .col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,...col-xs-12{
     55                      *     float: left;
     56                      * }
     57               .loop-grid-columns(@grid-columns, @class, width);
     58                        * .col-xs-12{
     59                      *     12/12;
     60                      * }
     61                      * .col-xs-11{
     62                      *     11/12;
     63                      * }
     64                      * ...
     65                      * .col-xs-1{
     66                      *     1/12;
     67                      * } 
     68               .loop-grid-columns(@grid-columns, @class, pull);
     69               .loop-grid-columns(@grid-columns, @class, push);
     70                        *push                  pull:
     71                      * .col-xs-push-12{         .col-xs-pull-12{      
     72                      *     left:12/12;              right:12/12;
     73                      * }                        }
     74                      * .col-xs-push-11{
     75                      *     left:11/12;
     76                      * }
     77                      * ...                      ...
     78                      * .col-xs-push-1{
     79                      *     left:1/12;
     80                      * } 
     81                      * .col-xs-push-0{           .col-xs-pull-0{
     82                      *     left:auto;               right:auto;
     83                      * }                         }
     84                      
     85               .loop-grid-columns(@grid-columns, @class, offset);
     86                       
     87 ###响应式工具
     88     
     89         
     90 ###栅格盒模型设计的精妙之处
     91     容器两边具有15px的padding    、
     92     行    两边具有-15px的margin    
     93     列    两边具有15px的padding
     94     
     95     为了维护槽宽的规则,
     96         列两边必须得要15px的padding
     97     为了能使列嵌套行
     98         行两边必须要有-15px的margin
     99     为了让容器可以包裹住行
    100         容器两边必须要有15px的padding
     
  • 相关阅读:
    那些H5用到的技术(4)——弹幕
    Android自动化之AccessibilityService
    那些H5用到的技术(3)——屏幕场景滑动
    更新Mac双系统多分区
    那些H5用到的技术(2)——音频和视频播放
    那些H5用到的技术(1)——素材加载
    openstf安装手记
    我的2016年总结
    与为知笔记融合-博客园装修笔记
    点击劫持(click jacking)
  • 原文地址:https://www.cnblogs.com/fsg6/p/12964729.html
Copyright © 2011-2022 走看看