less的引入和使用


文章地址:https://www.cnblogs.com/sandraryan/

之前就了解过less,但项目一直用的是css,所以,重新做一次系统的了解,顺便写个博客Orz

简介

less和sass都是css的预处理语言,最常用于bootstrap

less 是基于js的,在客户端处理(编译less文件)

sass基于ruby,在服务器端处理

less安装引入

 

 另一种引入方法是直接下载 (指路:官网),或者cdn引入

举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <div class="box">
        <p class="p1">test p</p>
    </div>
    <script src="https://cdn.bootcss.com/less.js/3.10.3/less.js"></script>
    <script></script>
</body>
</html>

html文件里引入css文件(这个css文件是less文件编译产生的,vscode自动编译),引入cdn的less文件

less 文件
@blue: lightblue; .p1
{ background-color: @blue; }

less文件(具体后续再解释~)

编译后的css文件:

.p1 {
  background-color: lightblue;
}

以上 一个简单的demo~~~~

变量

普通变量 

@blue: lightblue;

.p1 {
    background-color: @blue;
}

👆 @blue 是定义的一个新变量,名字为blue,值为lightblue

在调用的时候,直接用变量名调用

选择器变量

选择器可以被声明为变量,调用时在前面加类型(.或者#),调用的时候要加上{}

@blue: lightblue;
@p1 : p1;

.@{p1}{
    color: @blue;
}

声明选择器变量的时候也可以直接声明某种类型的选择器

@p2 : .p2;
@{p2} {
    color: red;
}

属性变量

属性名也可以被声明为变量,也要用{}调用

@b: border;
.p3 {
    @{b}: 1px solid red;
}

url变量

我怕觉得这个超好用der, 把一个路径给一个变量,如果整个项目和img的相对路径发生变化,直接修改变量就可以了

举个栗子

@img : '../../img';
.p1 {
    background-image : url('@{img}/1.jpg');
}
.p1 {
    background-image : url('@{img}/2.jpg');
}

申明变量

我的理解是,可以利用申明变量定义多条样式,调用时加上()

@pre: {
    width: 100px;
    height: 100px;
    border: 1px solid red;
}
.p1 {
    @pre();
}

变量的计算

在计算的时候,加减法以第一个数据的单位为基准,称出务必保持单位统一

颜色也可以计算~~~

@w : 200px;
@c : #333;
.p2 {
    width: 200px * 2;
    color: @c * 2;
    border: 1px solid green;
}

转换为css样式是

.p2 {
  width: 400px;
  color: #666666;
  border: 1px solid green;
}

可见注释 隐藏注释

也就是说 //后面的代码注释仅在less文件中可见,转换为css文件不可见

/*
you can see me
*/

// u can't see me 

转换为css

/*
you can see me
*/

变量套娃😁

@c1 : 'hi,c1';
@c2 : 'c1';
.p3::before{
    content : @@c2;
}

转为css

.p3::before {
  content: 'hi,c1';
}

less嵌套

less选择器是可以嵌套的,可以根据不同的块,使用不同样式,有利于代码维护,使css不容易互相影响

嵌套的时候,内层选择器前面的 & 符号就表示对父选择器的引用。 (& === 父元素)

在一个内层选择器的前面,如果没有 & 符号,则它被解析为父选择器的后代;如果有 & 符号,它就被解析为父元素自身或父元素的伪类。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <div class="box1 box1_f">
        <p class="p1">111</p>
        <p class="p2">222</p>
        <p class="p3">333</p>
        <p class="p4">444</p>
    </div>
    <div class="box2">
        <p class="p1  box1_f">111</p>
        <p class="p2">222</p>
        <p class="p3">333</p>
        <p class="p4">444</p>
    </div>

    <script src="https://cdn.bootcss.com/less.js/3.10.3/less.js"></script>
</body>
</html>

less

.box1 {
    .p1 {
        // p1 被解析为box1 的后代p1
        color: red;
    }
}

.box1 {
    // 在box1 后插入content内容
    &:after{
        content: 'hello, after box1';
    } 
    &_f {
        font-size: 20px;
        text-decoration: underline;
    }
}

css

.box1 .p1 {
  color: red;
}
.box1:after {
  content: 'hello, after box1';
}
.box1_f {
  font-size: 20px;
  text-decoration: underline;
}

嵌套的less样式会覆盖为嵌套的(原理和cs选择器一样)

.box1 {
    .p1 {
        // p1 被解析为box1 的后代p1
        color: red;
    }
}
.p1 {
    color: yellow;
}

box1下的p1 红色, box2 下的p1黄色 👆

媒体查询

@media screen {
    @media (max-width : 768px){
        .box1 {
            width: 700px;
            border: 1px solid green;
        }
    }
    @media (min-width: 770px){
        .box1 {
            width: 100%;
            border: 2px solid red;
        }
    }
}

css:

@media screen and (max-width: 768px) {
  .box1 {
    width: 700px;
    border: 1px solid green;
  }
}
@media screen and (min-width: 770px) {
  .box1 {
    width: 100%;
    border: 2px solid red;
  }
}

↑ 在屏幕状态下,宽度小于768px,box1 使700px且1px绿色边框,屏幕大于770, 100%宽度,红色边框

less方法

less声明的方法可以传参,声明方法可以用.和#,声明的方法可以传参,也可以有默认参数,调用时加上(),使用默认形参的话,不加也可以

举个例子

.wh(@w:10px,@h:10px){
    width :@w;
    height:@h;
}
.b(@a:1px,@b:solid,@c:red){
    border: @a @b @c;
}
.box1 {
    .wh(60px,30px);
    .b();
}
.box2 {
    .wh(60px,40px);
    .b(3px,dotted,green);
}

css:

.box1 {
  width: 60px;
  height: 30px;
  border: 1px solid red;
}
.box2 {
  width: 60px;
  height: 40px;
  border: 3px dotted green;
}

less方法还是很好用的~~~

less方法同时支持不定参

在定义这个方法之前,只有上帝知道后期要传几个参数

@arguments 是当前方法的参数列表 不定参用...表示

.e (...){
    box-shadow : @arguments;
}

.box3 {
    .e(1px,4px,10px,blue);
}

转换后 css

.box3 {
  box-shadow: 1px 4px 10px blue;
}

吃个饭

回来再写。。。。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM