[SCSS] Write similar classes with the SCSS @for Control Directive

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: 1; }

.order {
  order: 2; }
...
.order {
  order: 9; }

@for-through:

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

output:

.level {
  z-index: 1; }

...

.level {
  z-index: 5; }

@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; }

...
时间: 2024-10-18 19:46:29

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

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

最近朋友问如何在vue项目中使用scss样式,想起之前项目是直接在main.js直接import css文件的,然而main.js不可以直接import scss文件. import './assets/css.css' src/assets/scss.scss $border-color:#c58f5d; .box{ width:100px; height: 100px; border:1px solid #f40; } 第一步:安装依赖 cnpm install node-sass --sa

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

Java程序员对付空指针异常已经好多年了.在Java8中将有新的方式去处理他们.通过包装一个潜在的可能为null的类称为Optianal. 在Java8中添加了the Optional, OptionalInt, OptionalLong 和 OptionalDouble 类来处理空指针异常(NullPointerExceptions). 在java.util的包中,有很多使用Lambda表达式和方法引用的范例类. 这四个类是很相似的,Optional是它们当中最重要的类因为他可以用在任何类型上

css预处理scss环境配置

css 预处理器 CSS 预处理器用一种专门的编程语言,进行 Web css编码,然后再编译成正常的 CSS 文件,以供项目使用:说简单点就是在某个环境下写css 可以写变量.表达式.嵌套等,在通过该环境将css预处理的语言编译成正常的css文件; sass与scss 学习网站:  http://sass.bootcss.com/ sass是采用Ruby语言编写的一款css预处理语言.Sass的缩进语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此sa

webstorm配置scss自动编译路径

webstorm支持sass的同步编译,也就是即写即编译,并且可以指定编译后的css的目录. 本文使用的webstorm为8.0版本 点击左上角的File→Settings→File Watchers 在弹窗的窗口的右上角点击绿色的 ‘+’ 号,然后选择scss ------------------------------------------------------------------------------- Arguments: 可以配置编译后的文件的输出路径,我这里写的是: --n

Scss与Less区别

Scss与Less区别 一. Sass/Scss.Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量.嵌套.运算,混入(Mixin).继承.颜色处理,函数等),更容易阅读. Sass与Scss是什么关系? Sass的缩排语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此sass语法进行了改良,Sass 3就变成了Scss(sass

编译sass,遇到报错error style.scss (Line 3: Invalid GBK character "\xE5")

今天学习sass,写了一行中文注释,结果却遇到了报错: 1 cmd.exe /D /C call C:/Ruby23-x64/bin/scss.bat --no-cache --update style.scss:style.css 2 error style.scss (Line 3: Invalid GBK character "\xE5") 3 4 Process finished with exit code 1 以前在公司使用的mac没用遇到这种问题,当使用windows 7

angular使用sass的scss语法

一.现象: 为了简写样式 二.解决: 1.安装sass ,利用npm 安装(npm工具如果没有,请先自行安装好) (1).npm install node-sass --save-dev (2).npm install sass-loader --save-dev 2.修改.angular-cli.json文件 把原来的: "defaults": { "styleExt": "css","component": {}} 修改为

webpack单独构建scss文件与.vue组件里构建scss的一个坑

在入口main.js里构建scss是通过引入模块的方式 import './assets/_reset.scss'; import './assets/_flex.scss'; import './assets/_functions.scss'; 在.vue组件里是单独构建的 <style lang="scss" scoped> img { width: rem(300px); } #product, .gallery, .detail { width: rem(750px

前端学习之路——scss篇

学习资料: sass语法 http://www.w3cplus.com/sassguide/syntax.html Sass http://sass.bootcss.com/docs/sass-reference/  http://www.ruanyifeng.com/blog/2012/06/sass.html 一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 Sass依赖于ruby环境,所以