阅读 136

bootstrap源码简单分析

bootstrap源码简单分析

栅格源码分析:

ps:源码文件是less的,由于插入代码块没有没有less选择,选了html,有报错见谅
1.流体容器和固定容器 公共样式

复制代码

//@grid-gutter-wide: 槽宽(默认30px).container-fixed(@gutter: @grid-gutter-width){
  margin-right: auto;
  margin-left: auto;
  padding-left: floor((@gutter/2));    //padding-left: 15px;
  padding-right: ceil((@gutter/2));    //padding-right: 15px;
  &:extend(.clearfix all);
}

复制代码

2.固定容器 特定样式
顺序不可变(),变化就出错,因为是从小到大排序的,相反会导致小的读不到.

复制代码

  @media (min-width: @screen-sm-min){
    width: @container-sm;
  }
  @media (min-width: @screen-md-min){
    width: @container-md;
  }
  @media (min-width: @screen-lg-min){
    width: @container-lg;
  }

复制代码

3.行:

.make-row(@gutter: @grid-gutter-width){
margin-left: ceil((@gutter/-2));         //margin-left: -15px;
margin-right: floor((@gutter/-2));    //margin-right: -15px;
&:extend(.clearfix all);  //继承了.clearfix
}

4.列 (整个 grid-framework.less文件都是用来定义列的)

复制代码

.make-grid-colums();  //第一个混合实现在下
.make-grid(xs);
@media (min-width: @screen-sm-min){
   .make-grid(sm);
}
@media (min-width: @screen-md-min){
    .make-grid(md);
}
@media (min-width: @screen-lg-min){
    .make-grid(lg);
}

复制代码

grid-framework.less 文件:

复制代码

//列第一步
.make-grid-columns(){  //使用递归实现循环
  .col(@index){
    @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
    .col((@index + 1), @item);
    //.col(2,".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}")
    //因为@index为块级作用域 所以: .col(2, ".col-xs-1, .col-sm-1, .col-md-1, .col-lg-1")
}

//@grid-columns 的值为12
  .col(@index, @list) when (@index=< @grid-columns){               //递归 .col()自己调用自己
  @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
  .col((@index + 1), ~"@{list}, @{item}");
                //.col(3, ".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}, .col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}")       //@index为块级作用域 所以: .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")     //....  /*.col(13,str)     str:          .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,          .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2,          ...          .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12,  */ } //下面的@list就是上面的str //然后把@list作为选择器  .col(@index,@list) when (@index
> @grid-columns) {    @{list} {      position: relative;      min-height: 1px;      padding-left: ceil((@grid-gutter-width /2));      padding-right: floor((@grid-gutter-width /2));  } } /*最终结果:    .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,    .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2,    ...    .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12,       position: relative;       min-height:1px;       padding-left: ceil((@grid-gutter-width /2));   //15px 槽宽的一半       padding-right: floor((@grid-gutter-width /2));  //15px 槽宽的一半 */  .col(1); } //还是列 (接上) //列第一步 .make-grid-colums();<!-- 上面的混合结果    .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1,    .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2,    ...    .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12,       position: relative;       min-height:1px;       padding-left: ceil((@grid-gutter-width /2));   //15px 槽宽的一半       padding-right: floor((@grid-gutter-width /2));  //15px 槽宽的一半-->//移动优先 //列第二步 .make-grid(xs);----> //2.1 .make-grip(@class){ float-grid-columns(@class); /*结果: .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4,...col-xs-12{    float: left; */ 2.2 .loop-grip-columns(@grid-columns,@class, width); /* 2.2 结果 .col-xs-12{   width:12/12; } .col-xs-11{   width:11/12; } ... .col-xs-1{   width:1/12; } */ //2.3(列排序) .loop-grip-columns(@grid-columns,@class, pull); .loop-grip-columns(@grid-columns,@class, push);
//2.3结果 /*   left(push)                      right(pull) .col-xs-push-12{                .col-xs-pull-12{   left:12/12;                       right:12/12 }                                           } .col-xs-push-11{                .col-xs-pull-11{   left:11/12;                       right:11/12; }                                          } ...                                         ... .col-xs-push-1{                   .col-xs-pull-1{   left:1/12;                          right:1/12; }                                           } .col-xs-push-0{                   .col-xs-pull-0{   left:auto;                          right:auto; }                                           } */ //2.4(列偏移) 为margin-left .loop-grip-columns(@grid-columns,@class, offset); /*2.4结果 .col-xs-offset-12{   margin-left:12/12; } .col-xs-offset-11{   margin-left:11/12; } ... .col-xs-offset-1{   margin-left:1/12; } .col-xs-offset-0{   margin-left:0; } */ }

//相关分析 //2.1 /* .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4,...col-xs-12{    float: left; } */ //@class就是传进来的xs .float-grid-columns(@class){ .col(@index){    @item: ~".col-@{class}-@{index}";    .col((@index + 1), @item); } .col(@index,@list) when (@index=
< @grid-columns{  @item: ~".col-@{class}-@{index}";  .col((@index+1), ~"@{list}, @{item}"); } .col(@index,@list) when (@index > @grid-columns){  @{list}{  float: left;  } } //2.2(width),2.3(pull&push,列排序),2.4(offset,列偏移)的入口 .loop-grid-columns(@index,@class,@type) when (@index>=0){  .calc-grid-column(@index,@class,@type);  .loop-grid-columns((@index - 1), @class, @type); } //2.2 /* .col-xs-12{   width:12/12; } .col-xs-11{   width:11/12; } ... .col-xs-1{   width:1/12; } */ //@index = 12, @class = xs, @type= width .loop-grid-columns(@index,@class,@type) when (@index>=0){  .calc-grid-column(@index,@class,@type);  .loop-grid-columns((@index - 1), @class, @type); } .calc-grid-columns(@index,@class,@type) when (@type = width) and (@index>0){   .col-@{class}-@{index}{    width: percentage((@index /@grid-columns));    } } //2.3 /*   left(push)                      right(pull) .col-xs-push-12{                .col-xs-pull-12{   left:12/12;                       right:12/12 }                                           } .col-xs-push-11{                .col-xs-pull-11{   left:11/12;                       right:11/12; }                                          } ...                                         ... .col-xs-push-1{                   .col-xs-pull-1{   left:1/12;                          right:1/12; }                                           } .col-xs-push-0{                   .col-xs-pull-0{   left:auto;                          right:auto; }                                           } */ .calc-grid-column(@index,@class,@type) when (@type = push) and (@index>0){  .col-@{class}-push-@{index} {     left: percentage((@index / @grid-columns));  } } .calc-grid-column(@index,@class,@type) when (@type = push) and (@index = 0){  .col-@{class}-push-0 {     left: auto;   } } .calc-grid-column(@index,@class,@type) when (@type = pull) and (@index>0){  .col-@{class}-pull-@{index} {     right: percentage((@index / @grid-columns));  } } .calc-grid-column(@index,@class,@type) when (@type = pull) and (@index = 0){  .col-@{class}-pull-0 {     right: auto;   } } //2.4 /* .col-xs-offset-12{   margin-left:12/12; } .col-xs-offset-11{   margin-left:11/12; } ... .col-xs-offset-1{   margin-left:1/12; } .col-xs-offset-0{   margin-left:0; } */ .calc-grid-column(@index,@class,@type) when (@type = offset){   .col-@{class}-offset-@{index} {      margin-left: percentage((@index / @grid-columns));   } }


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐