@for循環(下)
上一小節的那個實例幾乎用不著,哈哈,所以其實是沒什麼營養的東西,只是幫助理解了原來@for 是這麼回事。怎麼的也不能就這麼忽悠大家啊,大家好不容易抽空看下文章,就這麼點扯淡的東西怎麼對得住呢。下面再來個營養級別的,@for應用在網格系統生成各個格子class 的代碼:
//SCSS
$grid-prefix: span !default;
$grid-width: 60px !default;
$grid-gutter: 20px !default;
%grid {
float: left;
margin-left: $grid-gutter / 2;
margin-right: $grid-gutter / 2;
}
@for $i from 1 through 12 {
.#{$grid-prefix}#{$i}{
width: $grid-width * $i + $grid-gutter * ($i - 1);
@extend %grid;
}
}
編譯出來的CSS:
.span1, .span2, .span3, .span4, .span5, .span6, .span7, .span8, .span9, .span10, .span11, .span12 {
float: left;
margin-left: 10px;
margin-right: 10px;
}
.span1 {
width: 60px;
}
.span2 {
width: 140px;
}
.span3 {
width: 220px;
}
.span4 {
width: 300px;
}
.span5 {
width: 380px;
}
.span6 {
width: 460px;
}
.span7 {
width: 540px;
}
.span8 {
width: 620px;
}
.span9 {
width: 700px;
}
.span10 {
width: 780px;
}
.span11 {
width: 860px;
}
.span12 {
width: 940px;
}
將上面的示例稍做修改,將@for through 方式換成@for to::
//SCSS
@for $i from 1 to 13 {
.#{$grid-prefix}#{$i}{
width: $grid-width * $i + $grid-gutter * ($i - 1);
@extend %grid;
}
}
其最終編譯出來的CSS 代碼和上例所編譯出來的一模一樣。
這兩段Sass 代碼並無太多差別,只是@for中的<end> 取值不同。配合through 的<end> 值是12,其遍歷出來的終點值也是12,和<end> 值一樣。配合to 的<end> 值是13,其遍歷出來的終點值是12,就是<end> 對就的值減去1 。