天天看点

lessless的使用

less的使用

主流的

CSS

预处理器

  • Less 官网:http://lesscss.org 中文 :https://less.bootcss.com/
  • Sass 官网:http://sass-lang.com
  • Stylus 官网:http://learnboost.github.com/stylus

一 less编译

1 CSS预处理语言

less不能够支持得到浏览器的支持,需要将其进行转换。

less sass:都是css预处理器-》语言,为开发者提供的一个CSS解决方案。
          css:不支持函数 不支持变量。
    浏览器不支持less,sass。需要对其进行编译(将less,sass--->css)
   
猫云:https://www.bootcdn.cn/
           

2 使用less.js

less.js

下载地址:https://cdn.bootcdn.net/ajax/libs/less.js/4.1.1/less.min.js

2.1 编译less style

注意:

1、less.js是可以将less转化为css

2、less.js如果转换成style的话,需要增加type="text/less"属性

3、less.js必须要写到style的下边

<style type="text/less">
        @w:200px;
        @h:300px;
        .container {
            width: @w;
            height:@h;
            background:red;
            margin:0 auto;
            p {
                color:green;
            }
        }
    </style>
    <script src="../lib/less.min.js"></script>
           

2.2 编译less 外部

注意:

页面中直接使用.less文件,需要将rel=stylesheet/less

<link rel="stylesheet/less" href="less/index.less">
    <script src="../lib/less.min.js"></script>
           

2.3 通过命令编译之后的CSS

压缩外部文件

<link rel="stylesheet" href="less/output.css" target="_blank" rel="external nofollow" >
           

3 命令安装less

3.1 使用less命令

使用less命令:
    1、安装node
    2、打开cmd控制台
         一、通过运行
         1、打开运行(win+r)
         2、在运行中输入 cmd  回车
         二、通过目录
            在目录中直接输入 cmd 回车。
    3、验证node是否安装完成  
        在控制台输入  node -v
    4、全局安装less
        npm install less -g
    5、使用lessc 命令进行编译less文件
    lessc需要转换的less文件地址 输出less文件地址
           

3.2 编译命令

1、将当前的index.less 编译为 output.css:
        lessc index.less output.css
        
2、将当前目录下的less文件夹中的index.less 编译到了当前文件夹中
        lessc less/index.less output.css
        
3、指定编译以后的目录:
        lessc less/index.less less/output.css
           

3.3 其他命令

1、cd..:进入到上一级目录
   cd one: 进入到one文件夹
   cd o 按下tab : 选择以o开头目录,按回车进入目录
2、cd less:进入到less文件夹
3、c:  切换盘符
4、从c盘中跳转到D:\210225\lession01\code\less中:
        	 C:\>cd D:\210225\lession01\code\less    
        	 C:\>d:    
        	 D:\210225\lession01\code\less>
5、dir: 显示当前的文件列表
6、cls:清屏
7、可以通过上下箭头切换命令(之前使用过的命令)
           

3.4 转换并压缩

1、安装 
        npm install less-plugin-clean-css -g
2、使用
        lessc index.less output.css --clean-css
           

4 第三方编译软件koala

可以跨平台运行,操作很简单,只需要将你编译的文件拖进来即可

4 使用vscode自动编译less

当有需要时,可以在设置中搜索less关键字

setting.config.js:
{
	"window.zoomLecel":1,
	"less.compile": {
		"compress": true,//是否删除多余空白字符
		"sourceMap":true,//是否创建文件目录树,true的话会自动生成一个.css.map文件
		"out":"../css/",//true,//是否输出css文件,false为不输出
		"outExt":".css",//输出文件的后缀,默认为.css或.wxss
	}
}
           

二 注释(重点)

1、// less提供的一种注释,不会被编译css中

2、 css原生注释,会在编译生成的css中出现

// 行注释,不会被编译的
@color: green;
/*
块注释,会被编译
*/
@width: 100px;
           

三 变量(重点)

1 值变量

使用 @ 符号来定义变量 ,在Less中开头是 @ 则是变量。

语法:@变量名:变量值

@width: 100px;
@height: @width + 100px;
           

2 作为普通属性值使用

单位设置与第一个设置的参数保持一致

@width: 100px;
@height: @width + 100em;
.demo{
  width:@width;    //100px
  height:@height;  //200px
}
           

3 选择器变量

选择器也可以使用变量,变量需要用@{}包裹

@selector:root;
        .@{selector} {
            width:100px;
            height:200px;
            background:#ccc
        }
           

4 属性变量

属性名称使用变量,变量需要用@{}包括

@selector:root;
        @abc:height;
        .@{selector} {
            width:100px;
            @{abc}:200px;
            background:#ccc
        }
           

5 url变量

url需要加引号,若要将里面的值进行拼接,需要用到{}

@bg:'img/Logo.png';
    @bgImg:'Logo.png';
        .root {
            background-image: url('less/img/Logo.png');
        }
        .one {
            background-image: url(@bg);
        }
        .two {
            background-image: url('img/@{bgImg}');
        }
           

6 声明变量

用于引入公共代码块

  • 结构: @name: { 属性: 值 ;};
  • 使用:@name();
@wh: {
            width:100px;
            height:200px
        }
        .root {
            @wh();
            background-color: red;
           

7 lazy loading(作用域)

懒加载(按照需要加载) 预加载

lazy loading的含义在于变量的定义位置不必要在其使用位置之前,但其使用范围仍然满足内层优先原则,且同级定义的相同变量,后一个生效(即将会在前一个覆盖),自己给自己设置的优先级最高。

@w:@h;
    @h:100px;
    .root {
        @w:300px;
        width:@w;
        height:@h;
        @w:400px;
    }
    @w:200px;
           

8 避免翻译

使用~‘值’结构可以避免被翻译,不加翻译的时候会带上引号,会报错

@min-width-750:~'min-width:750px';
        .root {
            width: 300px;
            height: 300px;
            background-color: red;
        }
        @media (@min-width-750) {
            .root {
                background-color: green;
            }
        }
           

四 混合Mixins

混合就是将一系列属性从一个规则集引入到另一个规则集的方式,类似于 JavaScript 中的函数, 目的是提高代码的重用性。

1 普通混合

传递参数加(),如果没有参数,可以省略()。

.one {
            width: 100px;
            height: 200px;
        }
        .root {
            .one();// 如果你不需要传递参数,那么可以省略()。
            background:red
        }
           

2 不带输出的混合

混合名()的形式定义。增加(),不会编译为css场景,假如结构当中不使用这个形式,可不加。

// one 不会被输出
        .one(){
            width:100px;
            height:200px;
        }
        .root{
            .one();
            background:red;
        }
           

3 命名空间

可以在Mixins中指定多个属性作为子容器,方便拼接

.demo(){
  .one {
    color: red;
  }
  .two{
    color: blue;
  }
  .three{
    color:yellow;
  }
}
.a {
  .demo > .one; //把one下面的属性拿过来 使用>要加空格,不建议使用.
}
.b{
  .demo .two;
}
.c{
  .demo.three;
}
           

4 带参数的混合

不声明的时候结果一一对应,也可以直接定义,但是要自己改参数。

.demo(@b,@w,@h){
            width:@w;
            height:@h;
            border:@b solid red;
        }
        .root{
            // 传递参数需要一一对应
           // .demo(4px,100px,200px);

            // 可以直接定义。无须一一对应。
            .demo(@w:200px,@b:4px,@h:400px);
        }
           

5 有默认值的混合

.demo(@b:1px,@w,@h:500px) {
            width:@w;
            height:@h;
            border:@b solid red;
        }
        .root{
            .demo(2px,@w:200px,@h:800px);
        }
           

6 带多个参数的集合

.border(@a:1px,@w:100px,@h:200px,@color:green){
  width:@w;
  height:@h;
  border:solid @a @color;
}
#main{
  .border(2px,@h:300px);
}
           

7 @arguments的用法

@arguments 犹如 JS 中的 arguments 指代的是 全部参数。

.demo(@b:1px,@s:solid,@color:red){
           // border: @color @b @s ;
            border: @arguments;
        }
       .root{
           width:100px;
           height: 100px;
           .demo(4px);
       }
           

8 条件判断

Less 没有 if else,它有 when用于做条件判断 less

// 与
       .demo(@b:1px,@s:solid,@color:red) when (@b=4px) and (iscolor(@color)){
           border: @arguments;
       }
        // 非
       // .demo(@b:1px,@s:solid,@color:red) when not(@color=red){
       //     border: @arguments;
       // }

        // 或
       // .demo(@b:1px,@s:solid,@color:red) when (@b=4px) , (@color=red){
       //     border: @arguments;
       // }

        .root{
            width:100px;
            height: 100px;
            .demo(4px,dashed,1);
        }
           

9 Mixins的重载

相同混合属性名,参数不同的

Mixins

称为

Mixins

的重载。

重载:定义函数,名字可以相同,但是参数的数量不一致。如果一致的话不符合规范。

.one(@w){
            width:@w;
        }
        .one(@w,@bg){
            width:@w;
            height:10px;
            background: @bg;
        }
        .one(@w,@h,@bg){
            width:@w;
            height:@h;
            background: @bg;
        }
        .root{
            .one(100px,200px,yellow);
        }
           

五 嵌套

Less 提供了使用嵌套代替层叠或与层叠结合使用的能力

1 基本层级嵌套

.root{
            width: 100px;
            height: 200px;
            border:1px solid yellow;
            p{
                color:red;
            }
        }
           

2 父选择&符

.root{
            p{
                background: red;
                &:first-child{
                    color:gold;
                }
            }
            //p:nth-child(1){
            //    color:green;
            //}
           

3 @media 嵌套

.root {
            @media screen {
                color: green;
                @media (min-width: 768px) {
                    color: red;
                }
            }
        }
           

六 运算符

Less还支持+、-、*、/运算符。但对单位不一致的运算数进行运算要注意以下两点:

  • 运算数与运算符间必须用空格分隔;
  • 以第一个运算数的单位作为运算结果的单位
@w: 1px +2em;// 运算数与运算符间没有空格,没有输出
        @w1: 2px - 1em;
        @w2: 2px * 2em;
        @w3: 4px * 2em;
        .one{
            width: @w;// 失败的
        }
        .two{
            width: @w1;// 1px
        }
        .three{
            width: @w2;// 4px
        }
        .four{
            width: @w3;// 8px
        }
           

七 函数

混合(

Mixins

)类似于 JavaScript 中的自定义函数, 而这里的函数类似于

JavaScrip

t 中的内置函数。

Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。

可以参考 Less 中文网提供的函数手册: http://lesscss.cn/functions/#misc-functions

需要注意的是,一般我们很少会使用这些内置函数。

1 混合 (misc)

// 字符转颜色
color("#CCC") 

//返回图像尺寸(示例尺寸100*50)
image-size("file.jpg"); // => 100px 50px 
image-width("file.jpg"); // => 100px
image-height("file.jpg"); // => 50px

// 单位转换
convert(9s, "ms"); // => 9000ms
convert(14cm, mm); // => 140mm
convert(8, mm); // => 8
           

2 字符串

// 转义
filter: e("ms:alwaysHasItsOwnSyntax.For.Stuff()"); // 与~"value"类似

// 替换
replace("Hi Tom?", "Tom", "Jack"); // => "Hi Jack"
replace("Hi Tom?", "(Tom).$", "new $1."); // => "Hi new Tom"
           

3 判断类型

isnumber(56px); // => true 是否含数字
isstring("string"); // => true
iscolor(#ff0); // => true
iscolor(blue); // => true
iskeyword(keyword); // => true
isurl(url(...)); // => true
ispixel(56px); // => true
isem(7.8em); // => true
ispercentage(7.8%); // => true
isunit(4rem, rem); // => true 是否为指定单位
isruleset(@rules); // => true 是否为变量
           

4 颜色操作

rgb(90, 129, 32)   //  #5a8120
darken(hsl(90, 80%, 50%), 20%)  // #4d8a0f 增加饱和度
hsl(90, 100%, 50%) // => #80ff00 色相(H)、饱和度(S)、明度(L)
hsla(90, 100%, 50%, 0.5) // => rgba(128, 255, 0, 0.5) 色相(H)、饱和度(S)、明度(L)、透明度(A)
hsv(90, 100%, 50%) // => #408000 色调(H),饱和度(S),明度(V)
hsv(90, 100%, 50%) // => rgba(64, 128, 0, 0.5) 色调(H),饱和度(S),明度(V)、透明度(A)
hue(hsl(90, 100%, 50%)) // => 90 提取色相
           

5 数学函数

ceil(2.1); // => 3 向上取整
floor(2.1); // => 2 向下取整
percentage(.3); // => 30% 转百分比
round(1.67, 1); // => 1.7 四舍五入,保留一位小数点
sqrt(25cm); // => 5cm 取平方根
abs(-5cm); // => 5cm 取绝对值
sin(1deg); // => 0.01745240643728351 正弦
asin(-0.8414709848078965); // => -1rad 反正弦
pi(); // => 3.141592653589793 圆周率π
max(3px, 42px, 1px, 16px); // => 42px
min(3px, 42px, 1px, 16px); // => 1px
           

八 映射(Maps)

映射需要加括号

.demo(){
            width:100px;
            height:200px;
            .one{
                width:600px;
                height:500px;
            }
        }
        .root{
            // 需要加上括号。
            @one:.demo.one();
            width:.demo[width];
           // height:.demo.one[height];
            height:@one[height];
            background:red;
        }
           

九 继承

extend 是 Less 的一个伪类。它可继承 所匹配声明中的全部样式 。

mixins

的区别:不可以传参数

.demo{
            width:100px;
            height:200px;
            .my{
                background:red;
            }
        }
        #one{
            &:extend(.demo);
        }
        #two{
            &:extend(.demo .my);
        }
           

十 导入(重点)

你可以导入一个

.less

文件,此文件中的所有变量就可以全部使用了。

如果导入的文件是

.less

扩展名,则可以将扩展名省略掉。普通的css也支持import

@import "library.less"; 
@import "mixins";  // mixins.less
@import "typo.css";