对比less聊scss(2):变量和数据类型

在less中,声明变量使用@符号,而scss也有用到@符号,这也是以后的篇章要讲的关键字的符号。

而scss中的变量则是用$符号来标记变量,是不是让程序员倍感熟悉的符号啊~~(很多linux支持的语言变量都是$来定义,包括linux-shell)

 

然而,和less不同的是,scss新增了几种数据类型。在这点要比less高明很多,因为less的数据类型很模糊。下面分别对比一下两者:

less:

数字 -> 1em、2、4px、6deg、10%

颜色 -> #FF0、#FCFCFC、blue、rgba(9,9,9,0.5)

字符串 -> "content"、-class

布尔型 -> true、false、所有非true变量均为false

 

scss:

 

 

1、不同单位类型的运算

--> scss

转换后:

下面是注释部分报错内容:

从上面的测试得出下面结果:

第一组:不同单位 -> 加减乘除 -> 报错

第二组:相同单位

  -> 除 -> 不报错 -> 转换后无单位

  -> 乘 -> 报错

  -> 加减 -> 运算正确

第三组:有单位与无单位的运算 -> 加减乘除 -> 运算正确

第四组:有单位数值与字符串运算 -> 字符串中是数值

  -> 加:连接符号,并且把连接后的变量加上了双引号

  -> 减:直接组合

  -> 乘除:可以运算

第五组:有单位数值与字符串运算 -> 字符串是非数值

  -> 加:同样是连接符

  -> 减、除:直接连接

  -> 乘:报错

 

例子还有很多,不过按照上面的例子来看,scss对变量类型做了很明确的分类,这点less就十分模糊。

 

--> less

转换后:

less对加减乘除的运算带单位不带单位都可以运算,单位不同的以第一个单位为准。

如果是数值和字符串,就无法运算了,加减作为连接符(是用于连接多个属性值的),而乘除则会报错。

 

2、字符串的连接 #{}

--> scss

scss可以通过#{}的方式使字符串做任意的连接,我们有下面两种连接方式: 

#{$a}#{$b}-name 等同于 #{$a + $b}-name 等同于 #{$a + $b "-name"}

#{}中的变量会自动过滤两边的引号

转换后:

而scss还可以这么玩,但less却不可以

结果:

 

--> less

最后是less只能做下面这种简单的字符串拼接

结果:

属性名:less、scss都可以拼接

选择器名:less只能拼字段,无法拼选择器符(.#>,),scss可以

属性值:less不可以拼,scss可以

变量双引号:less无法消去,scss可以

 

3、颜色的调色盘

--> scss

结果:

 

--> less

结果:

总结:

就颜色运算来看,less的观赏性不如scss,但less功能上要优于scss。

颜色加减:scss带alpha通道的无法运算,less都可以

颜色乘除:scss关键字常量(blue)无法运算,less都可以

但scss会保留颜色书写的格式,而less都会转换成6位16进制码。

 

 4、布尔运算

scss提供了布尔运算符,可以进行布尔运算,而less只能在 when 的mixin中才能用来判断,且不能连续和嵌套。

scss中 非 null和false 的变量和值都会判定为 true;

less中 非 true 的变量和值都会判定为false。

下面只例举scss的布尔运算,因为less中不存在布尔运算:

结果:

 

5、其他的类型

scss中除了上面传统的几种类型外,还比less多出 null值类型、数组类型、map类型。

以后的文章我会通过scss的判断循环来详细讲解布尔运算、数组和map。

 

posted @ 2017-05-11 16:55  冉夜  阅读(493)  评论(0编辑  收藏  举报