- 本站的镜像网站: GitHub Pages, 个人网站
- 本人的 CSDN 博客: 点这里起飞
1. 相关网站
- Less 中文网: http://lesscss.cn/
- W3Cschool Less 教程: https://www.w3cschool.cn/less/
- Less 在线编译: https://lesstester.com/
2. Less是什么
- Less 是一种 CSS 预处理语言. 其在 CSS 的基础上, 增加了变量, Mixin, 函数等特性. 增加了 CSS 的可维护可重用性.
- Less 需要 node.js 的支持. 可运行于 Node 或 浏览器端.
3. Less2CSS
- 安装 node.js
使用 node.js 中的 npm 安装 less.
1
npm install -g less
使用 lessc, less 文件编译为 css 文件
1
lessc style.less style.css
3.1. lessc命令行参数选项
1 | # 定义 全局变量, 可在文件中使用 |
4. Less比CSS多出的特性
- 转义语法为
~"待转义字符"
4.1. Less导入其他文件
- 使用
@import
伪指令导入其他 less 文件. 可出现在文件任意位置.- 如果 import 的文件后缀是 css, 则导入的内容被视为 css, 不作编译处理.
- 如果 import 的文件后缀是其他, 都将视为 less 文件导入.
- import 支持各种导入选项. 选项写在
()
中, 多个选项之间使用,
分割.(reference)
: 使用一个 less 作为参考, 不输出它本身.(inline)
: 将 css 直接不作处理的复制到输出 css 文件中.(less)
: 指定导入为 less 文件, 而不看文件后缀.(css)
: 指定导入为 css 文件, 而不看文件后缀.(once)
: 只导入一次该文件.(multiple)
: 多次导入文件.(optional)
: 即使找不到要导入的文件, 也仍然会继续编译.
1 | //-------------- importA.less ------------- |
4.2. 选择器的嵌套
- 在嵌套中, 可使用
&
表示其所有父选择器.
1 | MainWindow { |
4.3. 算术运算符
- 支持
+
,-
,*
,/
运算符 - 可作用于 数字, 颜色, 变量
1 | @nSize: 10px; |
4.4. 变量
- 更像是其他语言的常量, 因为它只能被定义一次. 以最后定义的值为最终值.
- 可用于: rule属性, rule值, rule属性部件, 选择器, 选择器部件, 字符串拼接.
- 定义:
@变量名: 变量值;
- 使用:
@变量名
或@{变量名}
- 只有用于 rule值 时使用
@变量名
, 其他时候都使用@{变量名}
- 只有用于 rule值 时使用
- 变量中可存储:
- 单值类型: 普通值(eg: 12px, 12, abc, #fff), css.
- 列表类型:
- 定义时: eg
@testArray: #fff, #000, #00f;
- 使用
extract(@testArray, 1)
获取列表元素, index 从 1 开始计数(程序员看着很别扭). - 使用
length(@testArray)
获取列表元素个数
- 定义时: eg
- 可使用多个
@
来模拟出类似于 C指针 的用法.
1 | @bkCol: #ffffff; |
1 | @var: { |
5. 继承extend
- 使用
extend(父选择器)
继承父选择器. - 父选择器 必须严格匹配, 除了属性选择器中属性值的引号不必匹配, 或添加了 all 关键字.
父选择器不能是变量编译后的内容, 也不能在 extend() 中传入变量.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@p1: .ButtonA;
@p2: .ButtonB;
.ButtonA {
color: red;
}
@{p2} {
color: blue;
}
// extend 中不能使用变量
.MyButton1:extend(@{p1}) { }
// 因为 .ButtonB 是 @p2 编译后产生的选择器, 所以不能 extend
.MyButton2:extend(.ButtonB) {}
1 | .animal{ |
5.1. 可供调用的函数
- 提供了一些函数, 可操作 颜色, 字符串, 数学运算.
- 详细可查看 https://www.w3cschool.cn/less/less_misc_functions.html
5.2. Mixins混合
- 类似于其他编程语言中的函数, 将一组 CSS 封装起来, 并可以提供参数.
- 其功能为: 按照各条件和参数, 输出指定 css.
- 因为没有条件语句, 可使用保护的命名空间来模拟该语法功能. 只有在条件返回为真时才使用.
- 可使用
! important
关键字来覆盖特定属性. - 声明混合: 可使用类选择器或id选择器用和使用正常CSS一样的方式来声明.
- 带参数
- 参数之间使用
;
或,
分割(建议使用;
). 且该部分样式只在调用处展开. - 参数可提供默认形参, 实参传入的时候尽量使用名字指定具体参数, 而不使用位置指定.
- 使用
@参数名
表示参数. - 使用
@{参数名}
和~""
配合, 实现字符串替换. @arguments
表示使用所有参数
- 参数之间使用
1 | // 可使用 . 和 # 选择器, 定义 mixin |
5.2.1. Mixin中可包含的内容
- 可包含普通 CSS 语法.
- 可定义变量. 说的是可在 Mixin 中定义变量. 其中的变量会在调用 Mixin 处展开.
- 变量存在作用域. 当调用 Mixin 时存在同名变量时, 在调用者中包含的变量优先级最高.
- 可定义 Mixin.
1 | .WidgetMixin(@col) { |
5.2.2. 可变数量参数
- 可使用
...
表示可变数量参数. - 可使用
@rest...
变量表示剩余的参数.
1 | // 使用 ... |
5.2.3. 模式匹配
- 可根据不同的参数个数, 匹配不同的 mixin.
用于规定一定的条件, 符合条件则展开
1 | // 只能匹配第一个参数为 blueSkin 的调用 |
5.3. 条件判断
- 没有 if/else 语法, 而是使用 Guards. 用于执行指定匹配的 mixin.
- 比较运算符:
<
,>
,<=
,>=
,=
.=
可用于比较数字, 字符串, 标识符等.- 其他只能用于比较数字.
- 逻辑运算符:
when
,and
表示与,,
表示或,not
非. - 类型检查函数:
- 检查特定类型:
iscolor()
,isnumber()
,isstring()
,iskeyword()
,isurl()
. - 检查特定单位:
ispixel()
,ispercentage()
,isem()
,isunit()
.
- 检查特定类型:
default()
表示 条件语句中的 else, switch 语句中的 default.
1 | // [1] and 为 &&, not 为 ! |
5.4. 循环
- Less 的循环使用 递归 来实现
1 | .generate-columns(@n, @i: 1) when (@i =< @n) { |
5.5. 合并merge
- 在一般 css 属性后, 增加
+
和+_
, 来实现相同属性的值合并.+
: 使用,
合并各部分的值.+_
: 使用空格合并各部分的值.
1 | #MyButton { |
— 道理越辩越明, 欢迎留言讨论. —