less入门

1.初见less

1.1 什么是less

        less是一个css预编译器,意思指的是它可以扩展css语言,添加功能如允许变量(variables),混合(mixins),函数(functions)和许多其他技术,让css更具维护性,主题性,扩展性。

1.2 less官方网站

        中文:http://lesscss.cn/

        英文:https://lesscss.org/

1.3 与less的第一次碰面

  传统写法

.conten ul{
    list-style: none;
}

.conten li{
    height: 24px;
    line-height:24px
}

  less写法

.conten {
    ul{
        list-style: none;
    }
    li{
        height: 24px;
        line-height:24px
    }
}

1.4 less中的注释

2种注册方式:

  • //           以  //   开始的注释,不会编译到css文件中。
  • /**/       以  /* */包裹的注释会被编译到css文件中。

less文件:

// 只会在less中显示
ul{
    li{
        color:red;
    }
}

/*
    在 less 和 css 中都会显示
*/

less文件编译成的css文件:

ul li {
  color: red;
}
/*
    在 less 和 css 中都会显示
*/

2.正确使用less

2.1 如何使用less

        less文件只有被编译后才能够被浏览器识别使用。

2.2 less编译工具

  1. Koala: 国人开发的全平台的LESS编译工具。http://koala-app.com/index-zh.html
  2. WinLess: Window下的LESS编译软件。https://www.winless.org/
  3. Codekit: MAC平台下的LESS编译软件。https://codekitapp.com/

2.3 客户端调试方式

  • 首先引用less文件。注意:引用时使用link引入,然后将rel属性设置为 rel="stylesheet/less"
  • 然后引入 less.js。 注意:与引入普通js一致,但是一定放在less文件样式文件之后。

下载引入less.js文件:

        官网下载

cdn引入less.js:

        <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js"></script>

<!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>
    <!-- 1.引入 .less文件 -->
    <link rel="stylesheet/less" href="./index.less">
    <!-- 2.csdn  引入less.js 文件 -->
    <!-- <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js"></script> -->
    <!-- 2.下载引入less.js 文件 -->
    <script src="../node_modules/less/dist/less.min.js"></script>
</head>
<body>
    <h2>dd</h2>
</body>
</html>

2.4 下载less,使用命令编译文件

  1. 下载: npm install less --save
  2. 编译: lessc  ./index.less ./index.css       ./index.less为要编译的less文件;./index.css 为编译后生成的文件。

3.变量(variables)

3.1 普通的变量

1.变量的定义方式

 用 @  命名变量 。变量和变量值之间分号分开。   如: @green: green;     定义一个变量为绿色。

2.实例

html 代码

<!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>
    <header>
        <h1> less</h1>
    </header>
    <footer>
        <h1>learn less</h1>
    </footer>
</body>
</html>

less文件代码

@green:green;
@white:white;

header, footer{
    background-color: @green;
    h1{
        color: @white;
    }
}

 编译后的css文件代码

header,
footer {
  background-color: green;
}
header h1,
footer h1 {
  color: white;
}

3.注意

        由于变量只能定义一次,实际上他们就是“常量”

3.2 作为选择器和属性名

1.使用

        使用时将变量以  @{变量名}   的方式使用

2.案例

html文件

<!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>
    <header>
        <h1> less</h1>
    </header>
    <footer class="width">
        <h1>learn less</h1>
    </footer>
</body>
</html>

less文件

// 作为选择器和属性名的变量
@width: width;

// 作为选择器
.@{width}{
    //  作为属性名
    @{width}: 200px;
}

 编译后的css文件

.width {
  width: 200px;
}

3.3 作为URL

1.使用

        使用时,使用 " " 将变量的值扩起来,使用时同样将变量以 @{变量名} 的方式使用

2.案例

html文件

<!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>
    <header></header>
</body>
</html>

less文件

// 作为URL变量
@imgUrl:"https://www.baidu.com/img/";

header{
    background:url("@{imgUrl}PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
    width: 500px;
    height: 500px;
}

 编译后的css文件

header {
  background: url("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");
  width: 500px;
  height: 500px;
}

3.4 延迟加载

1.什么是延迟加载?

        变量是延迟加载的,在使用前不一定要预先声明。

2.案例

        先使用变量,但未先声明变量,依旧可以使用。

less文件

header, footer{
    background-color: @green;
    h1{
        color: @white;
    }
}

@green:green;
@white:white;

 编译后的css文件

header,
footer {
  background-color: green;
}
header h1,
footer h1 {
  color: white;
}

3.5 定义多个相同名称的变量时

        在定义一个变量两次时,只会使用最后定义的变量,less会从当前作用域中向上搜索,这个行为类似css的定义中始终使用最后定义的属性值。

less文件

// 定义相同名称变量时
@var:0;
.class{
    @var:1;
    .brass{
        @var:2;
        three:@var;  // 3
        @var:3;
    }
    one:@var;  // 1
    @var:aaa  // 在这再次定义时,上面的one就是aaa
}

编译后的css文件

.class {
  one: aaa;
}
.class .brass {
  three: 3;
}

4.混合(mixins)

4.1 普通混合    .类名

1.什么是混合

        混合就是一种将一系列属性从一个规则集引入(“混合”)到另一规则集的方式。

2.案例

html文件

<!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>
    <header>
        <h1>less</h1>
    </header>
    <footer class="width">
        <h2>learn less</h2>
    </footer>
</body>
</html>

less文件

// 以前遇到这种公共的样式会提取到一个公共的类中,在dom结构上class="类名"
// 在 less 中可以使用混合集
.font_hn{
    color:red;
    font-family: 'Courier New', Courier, monospace;
}

h1{
    font-size: 28px;
    .font_hn;
}
h2{
    font-size: 24px;
    .font_hn;
}

编译后的css文件 

.font_hn {
  color: red;
  font-family: 'Courier New', Courier, monospace;
}
h1 {
  font-size: 28px;
  color: red;
  font-family: 'Courier New', Courier, monospace;
}
h2 {
  font-size: 24px;
  color: red;
  font-family: 'Courier New', Courier, monospace;
}

4.2 不带输出的混合    ()

  用法:类名后面使用 () 。

1.什么是不带输出的混合?

        如果你想要创建一个混合集,但是却不想让它输出到你的样式中。

2.使用方式

        在不想输出的混合集的后面加上(),就可以不再编译的css文件中输出。

less文件

// 以前遇到这种公共的样式会提取到一个公共的类中,在dom结构上class="类名"
// 在 less 中可以使用混合集
// 在不想输出到编译后的css文件中的混合集后面加上括号,便不会输出到css文件中
// 混合集即为之前css样式中书写的公共样式类。
.font_hn(){
    color:red;
    font-family: 'Courier New', Courier, monospace;
}

h1{
    font-size: 28px;
    .font_hn;
}
h2{
    font-size: 24px;
    .font_hn;
}

编译后的css文件  【css文件中没有输出 font_hn 类】

h1 {
  font-size: 28px;
  color: red;
  font-family: 'Courier New', Courier, monospace;
}
h2 {
  font-size: 24px;
  color: red;
  font-family: 'Courier New', Courier, monospace;
}

4.3 带选择器的混合    &

方法:使用& 。类中的& 代表父级类

less文件

// () 不输出的混合
// 带选择器的混合
.my-hover-mlxin(){
    //  & 代表 父类
    //  &:hover 等同于 .my-hover-mlxin:hover
    &:hover{
        border: 1px solid red;
    }
}
button{
    // & 父级为button
    .my-hover-mlxin;
}
a{
    // & 父级为a
    .my-hover-mlxin;
}
h1{
    // & 父级为h1
    .my-hover-mlxin;
}

编译后的css文件

button:hover {
  border: 1px solid red;
}
a:hover {
  border: 1px solid red;
}
h1:hover {
  border: 1px solid red;
}

4.4 带参数的混合    (@参数)

方法:在使用混合时通过传参的方式。(@参数)

注意:定义的参数也必须使用@来定义,和之前的定义变量的方法一致

less文件

// 带参数的混合
// 这里定义参数也必须使用 @ 来定义,和之前定义参数一样。
.border(@color){
    border:1px solid @color;
}
h1{
    &:hover{
        .border(green);
    }
}
h2{
    &:hover{
        .border(#000);
    }  
}

编译后的css文件

h1:hover {
  border: 1px solid green;
}
h2:hover {
  border: 1px solid #000;
}

4.5 带参数并且有默认值    (@参数:默认值)

方法:给带参数的混合添加默认值。  (@参数:默认值)

注意:有默认值的时候使用时可以带括号也可以不带括号。

less文件

// 带参数并且有默认值的混合
// (@color:red)  (参数:默认值)
.border(@color:red){
    border:1px solid @color;
}
h1{
    &:hover{
        // 有默认值的情况使用时可以写括号,也可以不写
        // .border;
        .border();
    }
}
h2{
    &:hover{
        .border(#000);
    }  
}

编译后的css文件

h1:hover {
  border: 1px solid red;
}
h2:hover {
  border: 1px solid #000;
}

4.6 带多个参数的混合    ;

1.多个参数

1.1 什么是多参数

  • 一个组合可以带多个参数,参数之间可以用分号或者逗号分隔
  • 但是推荐使用分号分隔,因为逗号符号有两个意思。它可以解释为mixins参数分隔符或者css列表分隔符

1.2 官方阐述

  • 两个参数,并且每个参数都是逗号分隔的列表:.name(1,2,3;something,ele)
  • 三个参数,并且每个参数都包含一个数字:.name(1,2,3)
  • 使用伪造的分号创建mixin,调用的时候参数包含一个逗号分割的css列表:.name(1,2,3;)
  • 逗号分割默认值:.name(@param1:red,blue)

less代码

// 带多个参数的混合
/*带多个参数的混合*/
// 
.mixin(@color; @padding:xxx; @margin:2){
    color-3: @color;
    padding-s: @padding;
    margin:@margin @margin @margin @margin;
}

.divmaizi{
    // 传入 @color ,其他两个使用默认值
    .mixin(red);
}

.div{
    // 传入 @color 为 1,2,3; @padding为something,ele;  @margin使用默认值 2
    .mixin(1,2,3;something,ele);
}

.div1{
    // 三个参数用逗号分割;
    // @color 为 1;   @padding 为 2; @margin  为 3;
    .mixin(1,2,3);
}

.div2{
    // @color 为 1,2,3   其他的使用默认值
    .mixin(1,2,3;);
}
// 如果传参的括号里面全部都是以逗号分隔,那么会依次传给各个参数值。
// 如果传参的括号里面既有逗号又有分号,那么会把分号前面看做一个整体,传给一个参数。

编译后的css文件

/*带多个参数的混合*/
.divmaizi {
  color-3: red;
  padding-s: xxx;
  margin: 2 2 2 2;
}
.div {
  color-3: 1, 2, 3;
  padding-s: something, ele;
  margin: 2 2 2 2;
}
.div1 {
  color-3: 1;
  padding-s: 2;
  margin: 3 3 3 3;
}
.div2 {
  color-3: 1, 2, 3;
  padding-s: xxx;
  margin: 2 2 2 2;
}

 总结:

        如果传参的括号里面全部都是以逗号分隔,那么会依次传给各个参数值。

        如果传参的括号里面既有逗号又有分号,那么会把分号前面看做一个整体,传给一个参数。

 2. 定义多个具有相同名称和参数数量的混合

        定义多个具有相同名称和参数数量的mixins是合法的,less会使用它可以应用的属性,如果使用mixins的时候只带一个参数,比如 .mixin(green), 这个属性会导致所有的mixin都会强制使用这个明确的参数

less文件

.mixin(@color){
    color-1:@color;
}

.mixin(@color;@padding:2){
    color-2:@color;
    padding-2: @padding;
}

// 如果 @padding 没有默认值,调用的时候就会执行该混合。
// 如果有 默认值就会执行。
.mixin(@color;@padding:2;@margin:2){
    /*@padding 如果没有默认值就会导致该混合不编译*/
    color-3:@color;
    padding-3: @padding;
    margin: @margin @margin @margin @margin;
}
.some .selector div{
    .mixin(#008000);
}

变异后的css文件

.some .selector div {
  color-1: #008000;
  color-2: #008000;
  padding-2: 2;
  /*@padding 如果没有默认值就会导致该混合不编译*/
  color-3: #008000;
  padding-3: 2;
  margin: 2 2 2 2;
}

4.7 命名参数

1.命名参数

        引用mixin时可以通过参数名称而不是参数的位置来为mixin提供数值,任何参数都已通过它的名称来引用,这样就不必按照任意特定的顺序来使用参数。

less文件

// 命名参数
.mixin(@color:black;@margin:10px;@padding:20px){
    color:@color;
    margin: @margin;
    padding: @padding;
}

.class{
    // 根据变量的名称来赋值。
    .mixin(@margin:20px, @color:#33acfe)
}

.class2{
    .mixin(#efca44, @padding:40px);
}
.class3{
    // 传给了第一个
    .mixin(80px);
}

编译后的css文件

.class {
  color: #33acfe;
  margin: 20px;
  padding: 20px;
}
.class2 {
  color: #efca44;
  margin: 10px;
  padding: 40px;
}
.class3 {
  color: 80px;
  margin: 10px;
  padding: 20px;
}

 通过变量名称来赋值,不根据赋值的位置来确定。

4.8 @arguments变量

1.什么是 arguments变量

        arguments代表所有的可变参数

注意:

  • @arguments代表所有可变参数,参数的先后顺序就是你的 () 括号内 的参数的先后顺序。
  • 注意在使用的属性,值的位置和个数也是一一对应的,只有一个值,把值赋值给第一个;两个值,赋值给第一个和第二个;三个值,分别赋给三个... 以此类推,但是需要注意的是假如我想给第一个和第三个赋值,你不能写 (值1, , 值3), 必须把原来的默认值写上去。

less文件

// @arguments
.border(@x:solid,@c:red){
    // 之前是这样写 border:21px @x @c;
    // @arguments 按传入的参数的顺序添加
    border:21px @arguments;
}
div{
    .border();
}

编译后的css文件

div {
  border: 21px solid red;
}

4.9 匹配模式

1.说明

        传值的时候定义一个字符,在使用的时候使用那个字符,就调用哪条规则

less文件

.border(all, @w:5px){
    border-radius: @w;
}
.border(t_l, @w:5px){
    border-top-left-radius: @w;
}
.border(t_r, @w:5px){
    border-top-right-radius: @w;
}
.border(b_l, @w:5px){
    border-bottom-right-radius: @w;
}
.border(b_r, @w:5px){
    border-bottom-right-radius: @w;
}
footer{
    // all  对应 all规则
    .border(all,10px);
    // t_r 对应t_r规则
    .border(t_r,10px);
    background-color: #33acfe;
}

编译后的css文件

footer {
  border-radius: 10px;
  border-top-right-radius: 10px;
  background-color: #33acfe;
}

4.10 得到混合中变量的返回值

对传入的参数进行运算,可以通过定义变量的形式把运算结果传出来。

less文件

.average(@x;@y){
    // 定义变量
    @he:@x + @y;
    @average: ((@x+@y)/2);
}

div{
    .average(16px, 50px);
    // 使用变量
    padding: @average;
    margin: @he;
}

编译后的css文件

div {
  padding: 33px;
  margin: 66px;
}

5.嵌套规则(nested-rules)

6.运算(operations)

7.函数(functions)

8.命名空间

9.作用域

10.引入(importing)

11.关键字(important)

12.条件表达式

13.循环(loop)

14.合并属性

15.函数库(function)

持续更新中.......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值