Less基础整理

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文件里面的各种嵌套关系,因为屏幕显示有限的原因,其展现的不是特别明显,当然这种方式也可以通过连写样式代码,不换行的方式去解决。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值