🎅Less 快速学习(下)🎅
Less
本文承接上文《Less快速学习(下)》,对 less 进行学习总结。
运算(Operations)
在 less 中,算术运算符可以对任何数字、颜色或变量进行运算,与calc
有些类似
思维导图:
单位推断
less 会为你自动推断数值的单位,所以不必每一个值都加上单位,如果是calc
不加单位就会失效
例子:
这里虽然只有 5px 有单位,但是也依旧可以成功转换
注意:运算符与值之间必须以空格分开。如果不隔开,将生成错误的转换结果
@width: 10 +5px -3;
转换结果:
width: 10 5px -3;
运算优先级
涉及到优先级计算,应当使用()区分优先级计算,否则将乘除的优先级将会大于加减优先级
颜色值运算
less
在运算时,先将颜色值转换为 RGB 模式,然后再转换为 16 进制颜色值并返回
两个十六进制计算:#100001 + #002200
= #102201
如果转换为 10 进制就是:1048577
+ 8704
= 1057281
而1057281
的十六进制就是102201
接下来来看这个例子:这里生成的结果不是#000001
因为 1 其实指的是rgb(1,1,1)
,如果是 10 的话,那么也就是rgb(10,10,10)
。 因为 rgb 不会超过 255,所以如果运算时超过,就会默认为rgb(255,255,255)
也就是#ffffff
函数
Less 提供了许多用于转换颜色,处理字符串和进行算术运算的函数,这些函数使用起来非常简单。特别是其中有关于颜色部分的函数。
命名空间(namespace)
出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(mixins)
进行分组。因为之前说过,有作用域的影响,所以不同作用域下的混入会失败,比如下面的例子:
所以可以使用命名空间的方式,来用链式结构去调用你需要混入的元素样式。这里可以使用#div1.color
来混入 div1 下的 color 元素
转换的结果:
引入(@import)
在less
中,可以引入一个或多个.less 文件,然后这个文件中所有变量可以在当前 less 项目中使用。 这一点与 css 中引入其实是类似的。
引入的命令是@import
并且可以携带参数, 使用方式
@import (参数1, 参数2) 文件地址
条件表达式
在 less 专门为混合定义了条件判断语法,使用 when 关键字进行判断,只有当条件满足时执行括号中的代码。
思维导图:
when 关键字
比如下面就是对设定的变量 width 进行宽度判断的方法,如果宽度超过 100px 设置为 100px,否则使用传入的参数值
转换后 CSS:
并或非
在条件表达式判断时,还可以使用并或非进行多条件判断。
实例:
转换的 CSS 代码:
乍一看好像使用条件表达式的 less 非常复杂,但是写完表达式后的可复用性就很高了,对于需要条件多的 css 样式就能起到节约代码并整理结构的效果了
类型检查函数
在less
当中,还存在类型检查函数,检查是否符合类型,可以据此配合条件判断进行使用
iscolor: 值是颜色,则返回 true,否则返回 false
isnumber: 判断值是否是数值
isstring: 判断值是否是字符串
iskeyword: 判断值是否关键字
isurl: 判断值是否是 url
类型检查函数
检查一个值除了数字外是否有一个特定的单位
ispixel: 判断是否存在像素单位
ispercentage: 判断是否存在百分比
isem: 判断是否存在 em 单位
isunit:判断是否存在指定类型
循环(Loop)
在less
中,混合可以调用它自身,这一点就很类似于JavaScript
当中的递归调用了,当一个混合递归调用自己,再结合条件表达式和模式匹配这两个特性,就可以写出循环结构。
递归
实例:塑造一个循环 css,创造 ul 下的 10 个 li,并且 li 的宽度逐步增大
转换的 CSS 代码:
each 函数
在less
中,其实还有一个each
函数也可以做到循环。它的功能是将规则集的计算绑定到列表的每个成员
使用方式:each(变量, { ... })
,其中 @value 可以代表变量列表的值,@key 可以代表变量列表的 key 值。
实例:
转换的 CSS 代码:
映射(Maps)
在之前说过,less
可以通过命名空间来找到需要使用的混入,这一点很像JavaScript
.
这里的映射是将混合(mixins)和规则集(rulesets)作为一组值的映射(map)使用。此方式很像 JavaScript 中的数组。
实例:
转换的 CSS 代码:
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/81a66299741df639f568f3e74】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论