转载

Bootstrap Less mixin 和变量

Less mixin 和变量

除了用于快速布局的预定义栅格类,Bootstrap 还包含了一组 Less 变量和 mixin 用于帮你生成简单、语义化的布局。

变量

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

  1. @grid-columns:              12; 
  2. @grid-gutter-width:         30px; 
  3. @grid-float-breakpoint:     768px; 

mixin

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

  1. // Creates a wrapper for a series of columns 
  2. .make-row(@gutter: @grid-gutter-width) { 
  3.   // Then clear the floated columns 
  4.   .clearfix(); 
  5.  
  6.   @media (min-width: @screen-sm-min) { 
  7.     margin-left:  (@gutter / -2); 
  8.     margin-right: (@gutter / -2); 
  9.   } 
  10.  
  11.   // Negative margin nested rows out to align the content of columns 
  12.   .row { 
  13.     margin-left:  (@gutter / -2); 
  14.     margin-right: (@gutter / -2); 
  15.   } 
  16. } 
  17.  
  18. // Generate the extra small columns 
  19. .make-xs-column(@columns; @gutter: @grid-gutter-width) { 
  20.   position: relative; 
  21.   // Prevent columns from collapsing when empty 
  22.   min-height: 1px; 
  23.   // Inner gutter via padding 
  24.   padding-left:  (@gutter / 2); 
  25.   padding-right: (@gutter / 2); 
  26.  
  27.   // Calculate width based on number of columns available 
  28.   @media (min-width: @grid-float-breakpoint) { 
  29.     float: left; 
  30.     width: percentage((@columns / @grid-columns)); 
  31.   } 
  32. } 
  33.  
  34. // Generate the small columns 
  35. .make-sm-column(@columns; @gutter: @grid-gutter-width) { 
  36.   position: relative; 
  37.   // Prevent columns from collapsing when empty 
  38.   min-height: 1px; 
  39.   // Inner gutter via padding 
  40.   padding-left:  (@gutter / 2); 
  41.   padding-right: (@gutter / 2); 
  42.  
  43.   // Calculate width based on number of columns available 
  44.   @media (min-width: @screen-sm-min) { 
  45.     float: left; 
  46.     width: percentage((@columns / @grid-columns)); 
  47.   } 
  48. } 
  49.  
  50. // Generate the small column offsets 
  51. .make-sm-column-offset(@columns) { 
  52.   @media (min-width: @screen-sm-min) { 
  53.     margin-left: percentage((@columns / @grid-columns)); 
  54.   } 
  55. } 
  56. .make-sm-column-push(@columns) { 
  57.   @media (min-width: @screen-sm-min) { 
  58.     left: percentage((@columns / @grid-columns)); 
  59.   } 
  60. } 
  61. .make-sm-column-pull(@columns) { 
  62.   @media (min-width: @screen-sm-min) { 
  63.     right: percentage((@columns / @grid-columns)); 
  64.   } 
  65. } 
  66.  
  67. // Generate the medium columns 
  68. .make-md-column(@columns; @gutter: @grid-gutter-width) { 
  69.   position: relative; 
  70.   // Prevent columns from collapsing when empty 
  71.   min-height: 1px; 
  72.   // Inner gutter via padding 
  73.   padding-left:  (@gutter / 2); 
  74.   padding-right: (@gutter / 2); 
  75.  
  76.   // Calculate width based on number of columns available 
  77.   @media (min-width: @screen-md-min) { 
  78.     float: left; 
  79.     width: percentage((@columns / @grid-columns)); 
  80.   } 
  81. } 
  82.  
  83. // Generate the medium column offsets 
  84. .make-md-column-offset(@columns) { 
  85.   @media (min-width: @screen-md-min) { 
  86.     margin-left: percentage((@columns / @grid-columns)); 
  87.   } 
  88. } 
  89. .make-md-column-push(@columns) { 
  90.   @media (min-width: @screen-md-min) { 
  91.     left: percentage((@columns / @grid-columns)); 
  92.   } 
  93. } 
  94. .make-md-column-pull(@columns) { 
  95.   @media (min-width: @screen-md-min) { 
  96.     right: percentage((@columns / @grid-columns)); 
  97.   } 
  98. } 
  99.  
  100. // Generate the large columns 
  101. .make-lg-column(@columns; @gutter: @grid-gutter-width) { 
  102.   position: relative; 
  103.   // Prevent columns from collapsing when empty 
  104.   min-height: 1px; 
  105.   // Inner gutter via padding 
  106.   padding-left:  (@gutter / 2); 
  107.   padding-right: (@gutter / 2); 
  108.  
  109.   // Calculate width based on number of columns available 
  110.   @media (min-width: @screen-lg-min) { 
  111.     float: left; 
  112.     width: percentage((@columns / @grid-columns)); 
  113.   } 
  114. } 
  115.  
  116. // Generate the large column offsets 
  117. .make-lg-column-offset(@columns) { 
  118.   @media (min-width: @screen-lg-min) { 
  119.     margin-left: percentage((@columns / @grid-columns)); 
  120.   } 
  121. } 
  122. .make-lg-column-push(@columns) { 
  123.   @media (min-width: @screen-lg-min) { 
  124.     left: percentage((@columns / @grid-columns)); 
  125.   } 
  126. } 
  127. .make-lg-column-pull(@columns) { 
  128.   @media (min-width: @screen-lg-min) { 
  129.     right: percentage((@columns / @grid-columns)); 
  130.   } 
  131. } 

实例展示

你可以重新修改这些变量的值,或者用默认值调用这些 mixin。下面就是一个利用默认设置生成两列布局(列之间有间隔)的案例。

one:

  1. .wrapper {  
  2.   .make-row();  
  3. }  
  4. .content-main {  
  5.   .make-lg-column(8);  
  6. }  
  7. .content-secondary {  
  8.   .make-lg-column(3);  
  9.   .make-lg-column-offset(1);  
  10. }  

two:

  1. <div class="wrapper">  
  2.   <div class="content-main">...</div>  
  3.   <div class="content-secondary">...</div>  
  4. </div> 

 

正文到此结束
Loading...