Sass四种数字运算详细介绍

在Sass中,共有4种数字运算:

  • (1)加法;
  • (2)减法;
  • (3)乘法;
  • (4)除法;

这4种运算方式,我们在其他编程语言(如JavaScript)也能看到,但是Sass的这4种运算不太一样,还是有不少我们需要注意的地方。所以在这一节中,小伙伴们要细心留意一下。

 

一、Sass加法

在Sass中,做加法运算时,数值可以带单位,但是需要运算单位相同。如果不相同就会报错,编译不通过。

举例1:运算单位相同

div
{
    width:(100px + 20px);
}

编译出来的CSS代码如下:

div
{
    width:120px;
}

分析:

由于“100px”和“20px”的单位相同,都是px。所以在Sass中,这两个可以做加法运算。

举例2:运算单位不同

div
{
    width:(100px + 20em);
}

编译出来的CSS代码如下:

Incompatible units: 'em' and 'px'.

分析:

因为“100px”和“20em”单位不同,所以在Sass编译的时候会报错。其中,“Incompatible units: 'em' and 'px'.”意思是“em和px单位不一致”。

我们再来看一个实际开发中的例子,体会一下Sass加法的用法:

$sidebar-width:220px;
$content-width:720px;
$gap-width:20px;
.container
{
    width: ($sidebar-width + $content-width + $gap-width)
    margin: 0 auto;
}

编译出来的CSS代码如下:

.container
{
    width:960px;
    margin:0 auto;
}

 

二、Sass减法

在Sass中,做减法运算时,数值可以带单位,但是需要运算单位相同。如果不相同就会报错,编译不通过。这一点跟Sass加法是一样的。

举例1:运算单位相同

div
{
    width:(100px - 20px);
}

编译出来的CSS代码如下:

div
{
    width:80px;
}

分析:

由于“100px”和“20px”的单位相同,都是px。所以在Sass中,这两个可以做减法运算。

举例2:运算单位不同

div
{
    width:(100px - 20em);
}

编译出来的CSS代码如下:

Incompatible units: 'em' and 'px'.

分析:

因为“100px”和“20em”单位不同,所以在Sass编译的时候会报错。其中,“Incompatible units: 'em' and 'px'.”意思是“em和px单位不一致”。

我们也来看一个实际开发中的例子,体会一下Sass减法的用法:

$container-width:960px;
$sidebar-width:200px;
.content
{
    width: ($container-width - $sidebar-width);
}

编译出来的CSS代码如下:

.content
{
    width:760px;
}

分析:

在Sass中,如果是做减法运算是“变量”而不是“数值”的时候,我们要注意减号“-”前后一定要有空格。像上面这个例子,如果减号前后没有空格:

$container-width:960px;
$sidebar-width:200px;
.content
{
    width: ($container-width-$sidebar-width);
}

像上面这样,Sass是无法正确地识别哪个“-”是变量的一部分,哪个“-”是减号。不过对于Sass中的加法,则不需要考虑这一点。

 

三、Sass乘法

在Sass中,做乘法运算时,只能有一个数值带单位,另外一个数值只能是不带单位的数字。如果两个都是带单位的数字,则Sass会报错而编译不通过。其实,小伙伴们稍微想一下平常数学中的运算,就很容易明白。

举例1:一个带单位,另外一个不带单位

div
{
    width:(100px * 2);
}

编译出来的CSS代码如下:

div
{
    width:200px;
}

举例2:两个都带单位

div
{
    width:(100px * 2px);
}

编译出来的CSS代码如下:

200px*px isn't a valid CSS value.

分析:

“200px*px isn't a valid CSS value.”意思是:200px*px不是一个有效的CSS属性值。我们再来看一个实际开发中的例子,体会一下Sass乘法的用法:

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

编译出来的CSS代码如下:

.item-1
{
    width: 10px;
}
.item-2
{
    width: 20px;
}
.item-3
{
    width: 30px;
}

 

四、Sass除法

我们都知道,“/”在CSS中已经作为一种符号来使用了,例如我们常见的字体属性缩写“font:Arial 12px/1.5em”。因此在Sass中做除法运算的时候,如果我们直接使用“/”符号作为除号,将不会生效。

在Sass中,如果我们想要做除法运算,我们需要在外面添加一个“小括号()”。

举例:

div
{
    width:(100px/2);
}

编译出来的CSS代码如下:

div
{
    width:50px;
}

分析:

在这个例子中,如果我们将小括号去掉,则Sass编译的时候会报错。但是在Sass中,如果做除法运算中是“变量”而不是“数值”时,“/”会被自动识别为除法,不需要在外面添加小括号。

举例:

$width:100px;
div
{
    width:$width/2;
}

编译出来的CSS代码如下:

div
{
    width:50px;
}

在使用Sass的过程中,“/”这个符号被当做除法运算时有以下3种情况:

  • (1)数值被小括号()包含;
  • (2)数值是另外一个数学表达式的一部分;
  • (3)数值或它的任意部分存储在一个变量中或者函数的返回值;

举例:

$height:100px;
div
{
    font:20px/10px;                 //纯CSS,不是除法运算
    width:(20px/10px);              //使用了小括号,是除法运算,符合第1点
    height:$height/2;               //使用了变量,是除法运算,符合第3点
    line-height:round(1.5)/2;       //使用了函数,是除法运算,符合第3点
    margin-left:10px + 10px/2px;    //使用了加号,是除法运算,符合第2点
}

编译出来的CSS代码如下:

div 
{
    font: 20px/10px;
    width: 2;
    height: 50px;
    line-height: 1;
    margin-left: 15px;
}

分析:

在实际开发中,不管是加法、减法,还是乘法、除法运算,我们都建议在外面加上小括号。这种书写方式,能够使得代码一目了然,也方便维护。希望小伙伴们也规范一下自己的书写方式。