vs code 安装easy-less插件:
VScode安装easy less 插件并配置_MpChan228的博客-CSDN博客
Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性。Less 可以运行在 Node 或浏览器端。
在安装好Less的插件后,通过编写.less文件,可生成对应的css样式文件。
1、变量
1.1变量的声明:
Less使用@声明变量,
语法:@变量名:变量的值;
@zero:0;
1.2变量的使用
第一种方式——
将变量作为属性值来使用时,只需要写 @变量名
@zero:0;
@bg:sky
*{
margin: @zero;
padding: @zero;
}
.box{
width: 200px;
height: 200px;
background:@bg;
position:absolute;
top:@zero;
bottom:@zero;
right:@zero;
left:@zero;
margin:auto;
}
第二种方式——
当变量作为属性名来使用时,语法为@{变量名}
下面的代码中,@w 变量在使用时为@{w}
@zero:0;
@w:width;
@h:height;
*{
margin: @zero;
padding: @zero;
}
.box{
@{w}: 200px;
@h: 200px;
background:#000;
position:absolute;
top:@zero;
bottom:@zero;
right:@zero;
left:@zero;
margin:auto;
}
第三种方式——
将变量作为选择器来使用时
语法:选择器@{变量名} 或 @{选择器变量名}
@b:box;
.@{b}{
width:200px;
}
或者
@b:box;
@{.b}{
width:200px;
}
上面的代码相当于:
.box{
width:200px;
}
2、变量的延迟加载
less格式代码如下:下面的代码中,three的值和one的值分别是多少?
@var:0;
.wrap{
@var:1;
.box{
@var:2;
three:@var;
@var:3;
@var:5;
}
@var:4;
one: @var;
@var:6;
}
编译后的css文件如下:
.wrap {
one: 6;
}
.wrap .box {
three: 5;
}
总结:当查找变量时,如果当前大括号内存在该变量,直接使用最后一个,不分远近;
如果自身不存在,则向上一个大括号查找,与第一种情况同理,直接使用上级大括号的最后一个,不分远近。
3、Less的嵌套规则
以基本的html文档为例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./css/index.css">
</head>
<body>
<ul class="list">
<li>111
<a href="">123</a>
</li>
<li>222</li>
<li>333</li>
<a href="">456</a>
<a href="">789</a>
</ul>
</body>
</html>
对应的less文件:
@zero:0
@l:list;
*{
margin: @zero; //0
padding: @zero; //0
}
// 在less当中,常规嵌套写法,编译后使用的是后代选择器
.@{l}{ //.list
list-style: none;
li{ //这里相当于.list .li{...}
width: 200px;
// 在less中,如果需要使用伪类 伪元素 结构类等(所有带冒号的),都可以使用&,&代表当前大括号这个元素本身,或者说&是前边所有选择器的集合——即 .list li:hover
&:hover{
background: pink;
}
// .list li 中,鼠标移到第二个li时,背景色为blue
&:nth-child(2):hover{
background: blue;
}
}
// 如果想要操作直接子元素,则在前边添加一个>即可,和css语法一致
>a{
color: red;
}
}
编译后的css文件:
* {
margin: 0;
padding: 0;
}
.list {
list-style: none;
}
.list li {
width: 200px;
}
.list li:hover {
background: pink;
}
.list li:nth-child(2):hover {
background: blue;
}
.list > a {
color: red;
}
最终效果:
4、混合(Mixin)
混合是less中的重点,先来看看html+css实现下面基础的效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./css/index2.css">
</head>
<body>
<div class="wrap">
<div class="box">
<div class="inner"></div>
</div>
</div>
</body>
</html>
* {
margin: 0;
padding: 0;
}
.wrap {
width: 400px;
height: 400px;
background: pink;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.box {
width: 300px;
height: 300px;
background: yellowgreen;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.inner {
width: 200px;
height: 200px;
background: blue;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
实现效果:
从上面的例子中可以看到,css文件里有很多重复的代码,我们可以将这些重复的代码统一交给混合来处理,见下图中的.allCenter(){...}
*{
margin: 0;
padding: 0;
}
// less的混合以点(.)开始,语法:.混合名(){}
.allCenter(){
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.wrap{
width: 400px;
height: 400px;
background: pink;
.allCenter();
}
.box{
width: 300px;
height: 300px;
background: yellowgreen;
.allCenter(); //调用混合 相当于在调用的位置写了混合里面的代码,调用混合时,就是使用.混合名(); 注意结尾必须加分号,不加会不稳定
}
.inner{
width: 200px;
height: 200px;
background: blue;
.allCenter();
}
实现效果:
混合的强大之处在于,它支持传递参数,语法和声明变量相同:
上面的代码中,我们对于每个div的类,里面的宽、高、背景颜色没有设定值,可以参考下面的代码进行传参:
less的混合以点(.)开始,
语法:.混合名(){}
*{
margin: 0;
padding: 0;
}
// less的混合以点(.)开始,语法:.混合名(){}
// 混合里的多个变量使用逗号分隔,混合参数没有设置默认值的情况下,调用混合参数的个数必须对等 定义3个就要传3个
.allCenter(@w,@h,@bg){
width: @w;
height: @h;
background: @bg;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.wrap{
.allCenter(@w:400px;@h:400px;@bg:pink);
}
.box{
//调用混合 相当于在调用的位置写了混合里面的代码,调用混合时,就是使用.混合名(); 注意结尾必须加分号,不加会不稳定
.allCenter(@w:300px;@h:300px;@bg:yellowgreen);
}
.inner{
.allCenter(@w:200px;@h:200px;@bg:blue);
}
注意:混合里的多个变量使用逗号分隔,混合参数没有设置默认值的情况下,调用混合参数的个数必须对等 定义3个就要传3个
4.1混合的默认参数设置
和调用混合一样,只需要在小括号中指定默认值即可。调用混合时,如果传递了参数,则按照传递的参数进行设置;如果没有传递参数,则按照默认值进行设置
.allCenter(@w:400px;@h:400px;@bg:pink){
width: @w;
height: @h;
background: @bg;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
在实际开发中,存在混合的less文件一般会单独的存放在一个文件中,然后通过一个基本的css,使用下面的代码
@import 'minxins/mixin'
进行引入
合理的使用混合,可以处理类似塌陷等方面的问题,将处理塌陷的css代码单独的写在一个混合中,在需要处理的css代码结构处进行调用即可。
5、预编译器的缺点
less sess 这种预编译器的语法可能会存在以下弊病:
当嵌套内容过多、样式过多时,less文件里面的各种嵌套关系,因为屏幕显示有限的原因,其展现的不是特别明显,当然这种方式也可以通过连写样式代码,不换行的方式去解决。