了解Bootstrap响应式原理:用less写十二栅格化

2017-06-21  本文已影响0人  这麻雀
@cols:12;
//行数
@num1:1200px;
//假定阈值1为屏幕最小宽度1200px
@num2:900px;
//阈值2为屏幕最小宽度900px


*{
    box-sizing: border-box;
    //border和padding计算入width之内
}

.clear(){
  //清除浮动
   &{
    &:before,&:after{
      content:"";
      display:block;
      clear:both;    
    }
  }
}

.container{
  //流式布局
  &-fluid{
    width:100%;
    .clear();
  }
  &-fluid > .row{
    width:100%; 
    .clear();
  }

  &{
    width:600px;
    .clear();
  }
  & > .row{
    width:100%;
    .clear();
  }
}

// l 大屏  m 中屏 s小屏
//小屏优先,实际区间范围w<900px
.for(s);
//在小屏的情况,让大屏和中屏的hide不成立,小屏的设置成立
.col-l-hide{
    display:block;
}
.col-m-hide{
    display: block;
}
.col-s-hide{
    display: none;
}

//中屏
//最小宽度900px;w>900执行;再加上之后大屏的情况,实际区间范围是900<w<1200
@media screen and (min-width:@num2){
  .for(m);
  .container{
      width: @num2;
  }
  //在900-1200px中,让s和l的情况不成立,m的情况成立
  .col-s-hide{
      display: block;
  }
  .col-l-hide{
      display: block;
  }
  .col-m-hide{
      display: none;
  }
}

//大屏
//最小宽度1200px,w>1200px执行
@media screen and (min-width:@num1){
  .for(l);
  .container{
      width: @num1;
  }
  .col-s-hide{
      display: block;
  }
  .col-m-hide{
      display: block;
  }
  .col-l-hide{
      display: none;
  }
}


.for(@type,@i:1) when (@i<=@cols){
  //@type:状态s/m/l
  //@i:选择的是十二分之几
  .container > .row > .col-@{type}-@{i}{
     width:@i/@cols*100%;
     //实际的宽度等于  所占比例/12*100%
     float:left;position: relative;

   }
   
  //设置offset
   .container > .row > .col-@{type}-offset-@{i}{
        margin-left:@i/@cols*100%;
   }
   
    // 偏移距离,push推【从左到右】,pull拉【从右到左】
    .container > .row > .col-@{type}-push-@{i}{
        left:@i/@cols*100%;
   }
   
   .container > .row > .col-@{type}-pull-@{i}{
       left:-@i/@cols*100%;
   } 
   
  .container-fluid > .row > .col-@{type}-@{i}{
    width:@i/@cols*100%;
    float:left;position: relative;
  }
  
  .for(@type,@i+1);
}

上一篇下一篇

猜你喜欢

热点阅读