在制作网格系统的时候,大家应该对 .col1~.col12 这样的印象较深。在 CSS 中你需要一个一个去书写,但在 Sass 中,可以使用 @for 循环来完成。在 Sass 的 @for 循环中有两种方式:

  1. @for $i from <start> through <end>
  2. @for $i from <start> to <end>
  • $i 表示变量
  • start 表示起始值
  • end 表示结束值

这两个的区别是关键字 through 表示包括 end 这个数,而 to 则不包括 end 这个数。

如下代码,先来个使用 through 关键字的例子:

  1. @for $i from 1 through 3 {
  2. .item-#{$i} { width: 2em * $i; }
  3. }

编译出来的 CSS:

  1. .item-1 {
  2. width: 2em;
  3. }
  4.  
  5. .item-2 {
  6. width: 4em;
  7. }
  8.  
  9. .item-3 {
  10. width: 6em;
  11. }

再来个 to 关键字的例子:

  1. @for $i from 1 to 3 {
  2. .item-#{$i} { width: 2em * $i; }
  3. }

编译出来的 CSS:

  1. .item-1 {
  2. width: 2em;
  3. }
  4.  
  5. .item-2 {
  6. width: 4em;
  7. }

@for应用在网格系统生成各个格子 class 的代码:

  1. //SCSS
  2. $grid-prefix: span !default;
  3. $grid-width: 60px !default;
  4. $grid-gutter: 20px !default;
  5.  
  6. %grid {
  7. float: left;
  8. margin-left: $grid-gutter / 2;
  9. margin-right: $grid-gutter / 2;
  10. }
  11. @for $i from 1 through 12 {
  12. .#{$grid-prefix}#{$i}{
  13. width: $grid-width * $i + $grid-gutter * ($i - 1);
  14. @extend %grid;
  15. }
  16. }

编译出来的 CSS:

  1. .span1, .span2, .span3, .span4, .span5, .span6, .span7, .span8, .span9, .span10, .span11, .span12 {
  2. float: left;
  3. margin-left: 10px;
  4. margin-right: 10px;
  5. }
  6.  
  7. .span1 {
  8. width: 60px;
  9. }
  10.  
  11. .span2 {
  12. width: 140px;
  13. }
  14.  
  15. .span3 {
  16. width: 220px;
  17. }
  18.  
  19. .span4 {
  20. width: 300px;
  21. }
  22.  
  23. .span5 {
  24. width: 380px;
  25. }
  26.  
  27. .span6 {
  28. width: 460px;
  29. }
  30.  
  31. .span7 {
  32. width: 540px;
  33. }
  34.  
  35. .span8 {
  36. width: 620px;
  37. }
  38.  
  39. .span9 {
  40. width: 700px;
  41. }
  42.  
  43. .span10 {
  44. width: 780px;
  45. }
  46.  
  47. .span11 {
  48. width: 860px;
  49. }
  50.  
  51. .span12 {
  52. width: 940px;
  53. }

将上面的示例稍做修改,将 @for through 方式换成 @for to::

  1. //SCSS
  2. @for $i from 1 to 13 {
  3. .#{$grid-prefix}#{$i}{
  4. width: $grid-width * $i + $grid-gutter * ($i - 1);
  5. @extend %grid;
  6. }
  7. }

其最终编译出来的 CSS 代码和上例所编译出来的一模一样。

这两段 Sass 代码并无太多差别,只是 @for中的 <end> 取值不同。配合 through 的 <end> 值是 12,其遍历出来的终点值也是 12,和 <end> 值一样。配合 to 的 <end> 值是 13,其遍历出来的终点值是 12,就是 <end> 对就的值减去 1 。

Sass-@for的更多相关文章

  1. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  2. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  3. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  4. 前端CSS预处理器Sass

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  5. SASS教程sass超详细教程

    SASS安装及使用(sass教程.详细教程) 采用SASS开发CSS,可以提高开发效率. SASS建立在Ruby的基础之上,所以得先安装Ruby. Ruby的安装: 安装 rubyinstaller- ...

  6. Sass之坑Compass编译报错

    前段时间在使用Compass时遇到了其为难处理的一个坑,现记录到博客希望能帮助到各位. 一.问题: 利用Koala或者是gulp编译提示如下,截图为koala编译提示错误: 二.解决办法 从问题截图上 ...

  7. emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点

    摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...

  8. Sass用法指南

    写在前面的话:随着CSS文件越来越大,内容越来越复杂,对其进行很好的维护将变的很困难.这时CSS预处理器就能够帮上大忙了,它们往往拥有变量.嵌套.继承等许多CSS不具备的特性.有很多CSS预处理器,这 ...

  9. PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用

    如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCS ...

  10. Sass:初识Sass与Koala工具的使用

    一.下载Koala(找到合适的系统版本)并安装 二.先新建一个css文件夹,并在里面新建一个文本文档(.txt),将其命名为demo.scss 三.打开Koala,将css文件夹拽进来,可以修改一下输 ...

随机推荐

  1. nginx配置虚拟主机-端口号区分/域名区分

    Nginx实现虚拟机 可以实现在同一台服务运行多个网站,而且网站之间互相不干扰.同一个服务器可能有一个ip,网站需要使用80端口.网站的域名不同. 区分不同的网站有三种方式:ip区分.端口区分.域名区 ...

  2. CentOS下安装Chrome浏览器

    1. 下载安装脚本, 在下载目录中,执行以下命令,将安装脚本下载到本地 wget https://intoli.com/install-google-chrome.sh 2.然后授予可执行权限 chm ...

  3. php str_word_count()函数 语法

    php str_word_count()函数 语法 作用:计算字符串中的单词数.大理石平规格 语法:str_word_count(string,return,char) 参数: 参数 描述 strin ...

  4. The Cats' Feeding Spots

    The Cats' Feeding Spots 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Yan Yuan, the Peking University cam ...

  5. C++ STL:优先队列的使用详解

    堆是一个很重要的数据结构,那么我们如何更加简洁的去写大根/小根堆呢? 对于很多语言来说,只能一步一步手打,但是对于C++来说,写大根小根堆就简便得多,因为C++中有一个容器叫做priority_que ...

  6. MySQL 查询语句--------------进阶7:子查询

    #进阶7:子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或者内查询 外部的查询语句,称为主查询或外查询 分类: 按照子查询出现的位置: select后面:只支持标量子查询 fro ...

  7. 命令行下DEBIAN7时间错误的问题(转)

    Debian下的时间设置问题 Debian系统经常会遇到时间不准的情况,以下几个步骤可让您轻松摆脱烦恼: 1.设定正确的时区编辑/etc/timezone,写入Asia/Shanghai 2.使用da ...

  8. springboot连接mysql报错:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

    nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. ...

  9. jQuery基础--创建节点和 添加节点

    创建节点 $(function () { // var box = document.getElementById("box"); // // var a = document.c ...

  10. JavaScript.Remove

    Array.prototype.remove = function (from, to) {     var rest = this.slice((to || from) + 1 || this.le ...