less学习笔记

less 是一门 css 的预处理语言,less 是 css 增强版,通过 less 可以编写更少的代码实现更强大的样式

less 语法大体上和 css 一致,但 less 中增添了许多对 css 的扩展

在 less 中添加了许多新特性,如虽然在原生 css 中支持变量,但是对不同浏览器的兼容性不好,有的浏览器不支持,而通过 less 浏览器对变量、minxin 等都可支持

此外 less 中可以使用 @import 引入其他 less 文件有助于样式模块化

浏览器无法直接执行 less 代码,必须先将 less 转换为 css(如 VSCode 中 Easy LESS 插件可将 less 自动编译为 css),再由浏览器执行

基础

变量声明:@变量名:xxx;

使用变量:@变量名

变量在 less 中属于块级作用域,延迟加载

— 当变量作为类名或属性名或一部分值使用时,通过@{变量名}

— 直接使用另一个属性的值 $参考的属性(v3.0.0后支持)

— less 中样式可以嵌套,当表示当前层的元素本身时使用 & 表示,表示子元素时使用>子元素{}

— 当前元素有与其他元素共有的部分时,用 当前元素:extend(有相同样式的元素){},关键字 all 表示继承所有父类的相关声明块

#test{
    &:extend(.father all)
}
//相当于
#test:extend(.father all){}

实质上将 .father 选择器和 #test 组合成一个选择器,声明块使用 .father 的

注意父类不能定义成混合(继承不灵活但性能高,混合灵活(因为可以传参)但性能低)

— 对其他元素样式进行引用,相当于直接复制其他元素样式 元素选择器();,这种方式性能比上一种差,因为要先复制

— 解决上个问题,可使用类选择器时可在选择器后添加一个括号,实际上就创建了一个mixins(相当于是个混合函数),即这部分样式不是自己用,而是专门给别人用

引入其他 less 文件,通过 @import "xxx.less;",该功能可用于样式模块化,如将定义变量、定义动画、定义布局、整合的 less 文件分开,方便后期维护

less 中所有数值都可以直接进行运算,如 + - * /

当重复声明时,使用时依据就近原则,使用最近声明的值

可先使用后声明

@a:100px;
@b:#bfa;
@c:box2;
@d:color;
.box1{
    width: @a;
    @{d}: @b;
    background-@{d}:@b;
}
.@{c}{
    width: @a;
    background-image: url("@{C}/1.png");
}
.p2:extend(.p1){
    color:red;
}
.p3{
    .p1();  //mixins,直接对指定样式进行引用
}
.p4(){  //创建了一个mixins
    width:100px;
    height:100px;
}
.test(@w:100px,@h,@bg-color){  //调用混合函数,可指定默认值
    width: @w;
    height: @h;
    border: 1px solid @bg-color;
}
div{
    .test(200px,300px,#bfa);  //调用混合函数,按顺序传递参数,或.test(@bg-color:#bfa,@h:300px,@2:200px);
}
.span{
    color: average(red,blue);  //使用 less 定义好的混合函数
}
body:hover{
    background-color: darken(#bfa,20%); //使用 less 定义好的混合函数,当鼠标移入 body 时颜色加深20%
}

less 的避免编译

~"不会被编译的内容"

VSCode 中的插件 Easy LESS

Easy LESS 插件可将 less 自动编译为 css,但是在浏览器中检查页面样式时显示的依然时 css 文件中的代码位置,可在插件中设置如下内容,设置后浏览器中调试样式显示的时在 less 文件中的代码位置

"less.compile":{
    "compress": false,  //true => remove surplus whitespace
    "sourceMap": true,  //true => generate source maps(.css.map files)
    "out": true,   //false => DON'T output .css files(overidable per-file)
}