Less


CSS的弊端:

image.png

Less

1. Less介绍

  • Leaner Style Sheets,是一门CSS扩展语言,也称为CSS预处理器
  • 作为CSS的一种形式的扩展,在现有的CSS语法上为CSS加入程序式的特性。
  • 它在CSS的语法上,引入了变量,Mixin(混入),运算以及函数等功能,简化了CSS的编写,降低了维护成本。
  • 既可以在客户端运行,也可以在服务器端运行(Node、Rhino平台)。
  • Less中文网址:http://lesscss.cn/
  • 中文文档:https://less.bootcss.com/
  • 常见的CSS预处理器:Sass、Less、Stylus

2. Less使用

2.1 Less编译为CSS

方式一:less文件需要编译,在官网下载less.js文件,引入该文件。

需要注意:

  • 引入的less文件要放在js编译文件之上,否则没效果。
  • rel=”stylesheet/less” ,在原先写法上加 /less
<link rel="stylesheet/less" href="">
<script src="/less.js"> </script>

方式二 Vscode less 插件:

  • Easy LESS插件用来把less文件编译为css文件。
  • 安装完插件后,重新加载下Vscode。只要保存一下less文件,会自动生成css文件。
  • 在写样式时只需关注less文件,对应的css文件会自动更新。

2.2 Less的注释

  • // :这种注释在编译后不会出现在css文件中。
  • /* */:这种编译后会出现在css文件中。

3. Less变量

3.1 几种变量的使用

1. 选择器变量

将选择器名称写为变量。

举例:

@boxSelector: #wrap;
@wrap: wrap;

使用:
@{boxSelector} {
    color: #bbb;
    width: 200px;
}
.@{wrap} {
    color: #bbb;
    width: 200px;
}

最后编译的css为:
#boxSelector {
    color: #bbb;
    width: 200px;
}
.wrap {
    color: #bbb;
    width: 200px;
}

2. 属性变量

  • 属性名属性值都可以是变量。
    • 语法@{ xxx }: @yyy;
    • 注意属性名要被一对花括号包起来,而值不用
  • 举例:
定义变量:
@w: width;
@w-value: 100px;

使用:
 .box{
     @{w}: @w-value;
 } 

3. URL变量

方便拼接,后续路径更改只需改一次变量中的值。

举例:

@images: "../img/";

.box {
    background: url('@images/除变量以外需要拼接的路径.png');
}

4. 声明变量

相当于属性名和值一起

  • 使用变量的语法:@bg();
  • 注意后面需要加上 () 

举例:

@bg: { background: #fff; };

.box {
    @bg();
}

5. 变量的运算

1. 用法示例

@w = 100px;
div {
    width: @w - 50;
}

2. 注意点:

  • 运算符左右必须有个空格
  • 变量的单位问题:
    • 加减法:取第一个为准。
    • 乘除法:单位一定要统一

6. 变量的作用域 & 用变量定义变量

作用域:就近原则,和css的处理方式是一样的。

两种结合起来举例:

@width: @a;
@a: 100%;

.div {
    width: @width;
    @a: 9%
}

以上被解析为:
width: 9%;
个人理解:不仅是变量的就近原则,还有下面样式覆盖上面的因素在。

7. 混合

  • 可以带参数。。。。(此处待记……)
  • 可以有多个参数。

image-20221005113444528

3.2 变量命名规范

  • 必须含有@为前缀
  • 不能包含特殊字符
  • 不能以数字开头
  • 大小写敏感。(@color和@Color是两个变量)

例:

// 定义一个蓝色的变量:
@color: pink;
body {
    background: @color;
}

4. Less嵌套

4.1 &符的使用

  • 当结构有嵌套时,使用 & 与不使用的区别
    • 使用 &符会不发生嵌套,而是直接替换了。
  • 伪类/伪元素时需要用&

例1:

#header {
    &:after {
        content: 'less is more';    
    }
    .title {
        font-weight: bold;    
    }
    &_content {
        margin: 20px;    
    }
}


// 生成的css: 下面注意区分
#header::after {
    content: 'less is more';
}
#header .title {   // 嵌套了
    font-weight: bold;
}
#header_content {   // 没嵌套!!!替换了
    margin: 20px;
}

例2

<div class="logo">
  <a href="">这是一个网站名称</a>
</div>

less的写法:

.logo {
  width: 100px;
  a {
    color: blue;
  }
}

例3:当有伪类/伪元素时,用**&**。

例:

a {
    color: blue;
}

a:hover {
    color: green;
}

要写成:

a {
    color: blue;
    // 要变成这样
    &:hover {
        color: green;
    }
}

4.2 媒体查询

在css中,不同元素样式要在每个尺寸下都写,Less可以在写当前元素样式时顺带写媒体查询(如下)。

缺点:每个元素汇编出自己的 @media 声明,并不会合并

#wrap {
    width: 500px;
}
@media screen and (max-width: 768px) {
    #wrap {
        width: 100px;    
    }
}

// 使用Less:
#main {
    @media screen {
        @media (max-width: 768px) {
            width: 100px;        
        }    
    }
    @media tv {
        width: 100px;      
    }
}

使用技巧——定义私有样式 (待续…)


5. 匹配模式——条件判断

条件符合时使用该样式渲染页面。

https://www.bilibili.com/video/BV13F411Y7ro?p=7&vd_source=d839eda9a2b875da47ce4ee8814c818f&t=427.5

举例:

image-20221005113936555

如何使用上面的判断:同样在括号中放入参数,进入匹配模式。

image.png

6. 导入

https://www.bilibili.com/video/BV1fS4y127nt?p=6&vd_source=d839eda9a2b875da47ce4ee8814c818f&t=11.0

1. 文件导入:可以不加文件后缀名。

// 在index.less文件中导入nav.less:
@import "nav";

2. reference:引入Less文件,而不编译它。

@import (reference) "nav";

3. once:@import语句的**默认行为**。表明相同的文件只会被导入一次,随后导入的文件的重复代码不会再解析。

@import (once) "nav";

4. multiple允许导入多个同名文件

@import (multiple) "nav";

文章作者: polariis
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 polariis !
评论
  目录