1// Framework grid generation 2// 3// Used only by Bootstrap to generate the correct number of grid classes given 4// any value of `@grid-columns`. 5 6.make-grid-columns() { 7 // Common styles for all sizes of grid columns, widths 1-12 8 .col(@index) { // initial 9 @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; 10 .col((@index + 1), @item); 11 } 12 .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo 13 @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; 14 .col((@index + 1), ~"@{list}, @{item}"); 15 } 16 .col(@index, @list) when (@index > @grid-columns) { // terminal 17 @{list} { 18 position: relative; 19 // Prevent columns from collapsing when empty 20 min-height: 1px; 21 // Inner gutter via padding 22 padding-left: (@grid-gutter-width / 2); 23 padding-right: (@grid-gutter-width / 2); 24 } 25 } 26 .col(1); // kickstart it 27} 28 29.float-grid-columns(@class) { 30 .col(@index) { // initial 31 @item: ~".col-@{class}-@{index}"; 32 .col((@index + 1), @item); 33 } 34 .col(@index, @list) when (@index =< @grid-columns) { // general 35 @item: ~".col-@{class}-@{index}"; 36 .col((@index + 1), ~"@{list}, @{item}"); 37 } 38 .col(@index, @list) when (@index > @grid-columns) { // terminal 39 @{list} { 40 float: left; 41 } 42 } 43 .col(1); // kickstart it 44} 45 46.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { 47 .col-@{class}-@{index} { 48 width: percentage((@index / @grid-columns)); 49 } 50} 51.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) { 52 .col-@{class}-push-@{index} { 53 left: percentage((@index / @grid-columns)); 54 } 55} 56.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) { 57 .col-@{class}-push-0 { 58 left: auto; 59 } 60} 61.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) { 62 .col-@{class}-pull-@{index} { 63 right: percentage((@index / @grid-columns)); 64 } 65} 66.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) { 67 .col-@{class}-pull-0 { 68 right: auto; 69 } 70} 71.calc-grid-column(@index, @class, @type) when (@type = offset) { 72 .col-@{class}-offset-@{index} { 73 margin-left: percentage((@index / @grid-columns)); 74 } 75} 76 77// Basic looping in LESS 78.loop-grid-columns(@index, @class, @type) when (@index >= 0) { 79 .calc-grid-column(@index, @class, @type); 80 // next iteration 81 .loop-grid-columns((@index - 1), @class, @type); 82} 83 84// Create grid for specific class 85.make-grid(@class) { 86 .float-grid-columns(@class); 87 .loop-grid-columns(@grid-columns, @class, width); 88 .loop-grid-columns(@grid-columns, @class, pull); 89 .loop-grid-columns(@grid-columns, @class, push); 90 .loop-grid-columns(@grid-columns, @class, offset); 91} 92