1-4 @for循环 (下)
本节编程练习不计算学习进度,请电脑登录imooc.com操作

@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 。

任务

小伙伴们,现在让我们来练习一下@for循环的用法吧!

  1. // ----
  2. // Sass (v3.4.12)
  3. // Compass (v1.0.3)
  4. // ----
  5.  
  6. //SCSS
  7. $grid-prefix: span !default;
  8. $grid-width: 60px !default;
  9. $grid-gutter: 20px !default;
  10.  
  11. %grid {
  12. float: left;
  13. margin-left: $grid-gutter / 2;
  14. margin-right: $grid-gutter / 2;
  15. }
  16.  
  17. //through
  18. @for $i from 1 through 12 {
  19. .#{$grid-prefix}#{$i}{
  20. width: $grid-width * $i + $grid-gutter * ($i - 1);
  21. @extend %grid;
  22. }
  23. }
  24.  
  25. //to
  26. @for $i from 1 to 13 {
  27. .#{$grid-prefix}#{$i}{
  28. width: $grid-width * $i + $grid-gutter * ($i - 1);
  29. @extend %grid;
  30. }
  31. }
下一节