Writing similar classes with minor variations, like utility classes, can be a pain to write and update. Sometimes just a single character is the only difference between classes and updating the defining parameter means we need to change it for every class name and value. We can write a class one time and the @for directive can write all the minor variations for us. If the similar classes need to be updated, with the help of the @for directive, they only need to be updated once. In this lesson we learn how to leverage the power of the SCSS @for control directive to relieve the pain.

Basic @for-to loop in SCSS:

// doesn't include 10
@for $i from 1 to 10 {
.order {
order: $i;
}
}

output:

.order {
order:; } .order {
order:; }
...
.order {
order:; }

@for-through:

// includes 5
@for $x from 1 through 5 {
.level {
z-index: $x;
}
}

output:

.level {
z-index:; } ... .level {
z-index:; }

@for with 'if' condition:

@for $i from 0 through 10 {
$value: .5 * $i;
$has-decimal: floor($value) != $value;
$class-name: if(
$has-decimal,
#{$value - 0.5}pt5, // if true
$value // if false
); .mt-#{$class-name} {
margin-top: #{$value}rem;
}
}

output:

.mt-0 {
margin-top: 0rem; } .mt-0pt5 {
margin-top: 0.5rem; } .mt-1 {
margin-top: 1rem; } .mt-1pt5 {
margin-top: 1.5rem; } .. .mt-5 {
margin-top: 5rem; }

Using attr selector:

@for $i from 0 through 10 {
$value: .5 * $i; [class~="mt-#{$value}"] {
margin-top: #{$value}rem;
}
}

output:

[class~="mt-0"] {
margin-top: 0rem; } [class~="mt-0.5"] {
margin-top: 0.5rem; } [class~="mt-1"] {
margin-top: 1rem; } .. [class~="mt-5"] {
margin-top: 5rem; }

@for with @mixin

@mixin light-color-class($color, $color-name,$i) {
$color-value: if($i == 0, $color, lighten($color, 5% * $i)); .#{$color-name}#{$i} {
color: $color-value;
}
} @for $i from 0 through 5 {
@include light-color-class(red, 'passion', $i);
@include light-color-class(green, 'natural', $i);
@include light-color-class(blue, 'cool', $i);
}

output:

.passion0 {
color: red; } .natural0 {
color: green; } .cool0 {
color: blue; } .passion1 {
color: #ff1a1a; } .natural1 {
color: #009a00; } .cool1 {
color: #1a1aff; } ...

[SCSS] Write similar classes with the SCSS @for Control Directive的更多相关文章

  1. [SCSS] Loop Over Data with the SCSS @each Control Directive

    The SCSS @for directive is great when we know how many iterations are required and we only need 1 va ...

  2. [SCSS] Write Custom Functions with the SCSS @function Directive

    Writing SCSS @functions is similar to writing functions in other programming languages; they can acc ...

  3. vue,一路走来(17)--vue使用scss,并且全局引入公共scss样式

    最近朋友问如何在vue项目中使用scss样式,想起之前项目是直接在main.js直接import css文件的,然而main.js不可以直接import scss文件. import './asset ...

  4. 在vue-cli中安装scss,且可以全局引入scss的步骤

    简历魔板__个人简历模板在线生成 在写vue的css样式时,觉得需要css预处理器让自己的css更加简洁.适应性更强.可读性更佳,更易于代码的维护,于是在vue-cli脚手架采用scss.写过的人都知 ...

  5. Upgrading to Java 8——第三章 Optional and Similar Classes

    Java程序员对付空指针异常已经好多年了.在Java8中将有新的方式去处理他们.通过包装一个潜在的可能为null的类称为Optianal. 在Java8中添加了the Optional, Option ...

  6. Ruby安装Scss

    Ruby安装Scss 引言 已经许久不写HTML了,今天有点以前的东西要改.但是刚装的Windows10,已经没有以前的Web开发环境了.只好重新安装. 结果Webstorm装好后配置Scss出现错误 ...

  7. webstorm配置scss自动编译路径

    webstorm支持sass的同步编译,也就是即写即编译,并且可以指定编译后的css的目录. 本文使用的webstorm为8.0版本 scss安装:http://www.w3cplus.com/sas ...

  8. scss语法介绍

    这里既然是对语法的介绍,那么至于如何安装和编译scss我就不多少了,主要是因为本人在群里认识的小伙伴有的不会用scss,所以就借着放假的机会来对scss语法做个总结,博主在开发过程中用scss蛮多,所 ...

  9. SCSS 在项目中的运用

    最后一段时间一直在做一些网站或是CMS的项目,想用bootstrap,但是,设计那哥们说了,用什么都行,就不能用bootstrap,我去了个..... 无语中,逼着自己写.说实话,就是用bootstr ...

随机推荐

  1. 平衡树之RB-tree

    #include <memory> template<class T> struct rb_node { T key; bool color;//true red | fals ...

  2. ZOJ 3674 Search in the Wiki(字典树 + map + vector)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4917 题意:每一个单词都一些tips单词. 先输入n个单词和他们的t ...

  3. c#操作ElasticSearch5详解

    c#操作ElasticSearch详解 ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearc ...

  4. Maven学习笔记4

    POM解析pom描述自身坐标,以及它关联的依赖,插件,仓库等. 项目模块设计项目聚合和继承. pom标签解析1. pom标签解析2. pom标签解析3. pom标签解析4. 聚合和继承 聚合模块只保留 ...

  5. 快速傅里叶变换FFT(模板)

    好不容易闲下来总结一下FFT.QAQ 1.DFT: 对于多项式的乘法,DFT给了我们新的思路(点值表达式的O(n)相乘) 对于我们习惯的多项式算法例如多项式A(x)=5x+1和B(x)=2x+2 C( ...

  6. C#之在treeview中鼠标点击的所选的节点触发事件

    一.背景 如下图所示,我想实现通过鼠标点击treeview的根节点,然后在文本框控件中显示鼠标点击的节点号. 二.程序实现 因为是要通过鼠标点击才发生的事情,所以这属于一个事件,需要触发才行,刚开始不 ...

  7. Talk the Talk

     Talk the Talk Mark Richards in Any pRoFESSion, jargon is used so that individuals within that pro- ...

  8. 【CS Round #43 A】Expected Dice

    [链接]https://csacademy.com/contest/round-43/task/expected-dice/ [题意] 大水题 [题解] 把36种可能的结果都存下来. 然后把重复出现的 ...

  9. Zookeeper源码用ant进行编译为eclipse工程--转载

    原文地址:http://www.it165.net/os/html/201411/10142.html Zookeeper GitHub的下载地址是:https://github.com/apache ...

  10. Ext常用控件

    多选下拉框 var workname = new Ext.form.MultiSelect({ store: pointComboBoxStore, fieldLabel: '工作面', labelS ...