less的使用
前言
less官方文档像JS般来思考
less
,即可 🈶 一定的深刻认识!!! 👇 是对应的官方文档
🌠 从官方的文档学习整理了 👇
less组成
👽 这里仅针对常见的几个模块(场景)进行详细地介绍!!
变量
js中采用的let/const/var等关键词来定义一个变量
而在less
中,则采用@
关键词来定义一个变量!
1 | @color: blue; |
变量的其他特殊用法
变量插值
js中采用模版字符串的方式,来实现字符串与变量/常量的拼接
而在less
中,则采用@{...}
的方式,来实现字符串规则的拼接,可以用在选择器名称
、属性名称
、URL
、和@import
语句!
👉 变量作为选择器名称插槽
1 | @btn: btn; |
👉 变量作为属性名称
1 | @color: color; |
👉 变量作为URL拼接
1 | @image: "../../image"; |
👉 变量作为@import语句使用
1 | @library: "library.less" |
变量的变量
😕 这听着有点绕,其实就是用一个变量引用另外一个变量,仅此而已
1 | @bgColor: "yellow"; |
类似于js中的var变量提升使用
类似于
js
中的所使用的var
变量提示,直接使用而后定义!
1 | .lazy-var{ |
直接捞其他属性直接使用
在less中,可以在已经定义的属性对象中,捞出其中的css属性作为变量来直接使用!
1 | p{ |
混入(mixin)
关于混入,意思是通过预先定义的一个样式“块对象”(这里我们称之为:创建一个mixin),将这个“块对象”作为一个“js对象”来使用,我们可以像
js
的函数变量
来思考它,主要 🈶 👇 几个特性!!
1 | .a, #b{ |
⚠ mixin
混入在定义的时候,可以带括号,也可以选择不带括号,这里不带括号的mixin
则代表将不生成对应的mixin代码块!!
混入的几种常见用法
包含选择器的整块混入
混入可以不仅仅可以包含属性,还可以包含选择器
1 | .my-hover-mixin() { |
命名空间
如果想在更复杂的选择器中混合属性,你可以堆叠多个id或类!
1 | #id{ |
提高权重的全量important
在
mixin
调用之后使用!important
关键字将其继承的所有属性标记为!important
!
1 | .foo(){ |
传递参数的混入
mixin
也可以接受参数,这些参数是在混合时传递给选择器块的变量
1 | .foo(@color){ |
⭐ 这里的参数还可以像es6.0
中的函数一样,提供默认的值,当没有传递参数时,采用默认的值!
1 | .foo(@color: blue){ |
像java一样可重载的函数
通过定义多个具有相同名称和不同参数个数的混入,可使用重叠使用的目的!
1 | .mixin(@color) { |
⚠ 上面这里的第三个混入没有被执行到,是因为其中的@padding
没有默认值,没有被使用,因此整个混入没有执行到,假如我们追加多一个同名混入,且其中的参数都覆盖到的话,那么也是可以被正常调用的!
1 | // 我是追加的混入 |
命名参数的直接混入
mixin
引用可以通过名称而不是位置来提供参数值,任何参数都可以通过其名称来引用,并且它们不必按任何特殊顺序排列!
这有点像将js
函数中的参数给集中到一个对象中来使用的方式!
1 | .mixin(@color: black; @margin: 10px; @padding: 20px) { |
混入中的参数统一指代@arguments
@arguments
在mixin
中有特殊含义,它包含调用mixin
时传递的所有参数,如果我们不想处理单个参数,这很有用!!
这就像是js函数中的argument
变量一样!
1 | .box-shadow(@x: 0, @y: 0, @blur: 1px, @color: #000) { |
可变参数的混入以及剩余参数的指代@rest
...
可以让我们的mixin
接收可变化的参数,@rest
可让我们使用接下来剩余的参数
这就像是js函数中的可变参数以及剩余参数变量的使用一样!
1 | // 仅匹配0个参数 |
混入的参数是另外一个变量(模式匹配)
有时,我们可能希望根据传递给它的参数更改混入的行为!
也就是参数是可变的另外一个参数
1 | .mixin(dark, @color) { |
仅取混入的某个属性(混入属性访问)
可以使用属性/变量访问器从已评估的混入规则中选择一个值!
也就是将混入的map样式对象中取其中的一个值来使用
1 | .average(@x, @y) { |
受保护的混入(守卫)
当我们想匹配表达式时,守卫很有用,而不是简单的值或元数,通过受保护的混合而不是if/else语句来实现条件执行
1 | .mixin(@a) when (lightness(@a) >= 50%) { |
⭐ 通过使用一个关键when
,对变量@a
进行了一个守卫拦截,不匹配的将不采用对应的混入(之前的基本上是无条件混入的方式)!
👽 守卫中可用的比较运算符的完整列表是:>, >=, =, =<, <
。此外,关键字true
是唯一的真值
嵌套(父选择器)
运算符表示嵌套规则&的父选择器,在将修改类或伪类应用于现有选择器时最常使用!
1 | a { |
🌠 关于嵌套选择器的使用,一句话概括一下:将&
当作是嵌套的父选择器名称即可
⚠ 有一个需要注意的是:当这个&
被反过来使用的时候,代表的是将所属的嵌套父选择器反过来使用!!
1 | .header { |
CSS守卫(when与if)
less
中允许通过使用when
以及if
关键词,来实现针对某个符合条件下的样式
1 | @my-option: true; |
1 | @my-option: true; |
函数
官方函数做点什么
在学习完成了关于
less
的相关知识点之后,并结合自身在实际项目过程中,对于less
的使用可谓是少之又少,或者比较有限,这边结合项目并整理了 👇 几个可能经常使用到的场景:
- 变量的使用,将项目中公用的值都存储到统一的一个变量中,并通过
import
或者全局导入
的方式,来保持访问的同一个变量; - 嵌套的继续使用,并结合
&
关键词,进行整体的配合使用; - 混入,对于需要有不同套的样式风格,采用混入的机制,结合
each函数
,生成多套不同的样式文件!