Less学习笔记

Less学习

Less简介

less是一门CSS预处理语言,给CSS增加了变量、函数等特性。

Less安装及使用

命令行安装

1.npm install -g less		//安装less
2.npm install -g less-plugin-clean-css		//安装clean-css,用于压缩css
3.lessc index.less index.css
4.lessc --clean-css index.less index.min.css

引入less.js文件

1.创建index.less文件
2.引入index.less文件
<link rel="stylesheet" href="index.less" type="text/less" />
3.引入less.js文件
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js"></script>
4.在index.less文件中使用less语法编辑css样式

安装Easy LESS插件

  1. 在VS Code的扩展商店中,找到Easy LESS插件并安装,随后重启VS Code

  2. ”文件“-”首选项“-”设置“中找到Easy LESS的settings.json文件并打开

  3. 修改如下

    "less.compile": {
        "out":"./css/"
        }
    
  4. 在index.less文件中修改css样式,将会在css文件下生成新的index.css文件

    <link rel="stylesheet" type="text/css" href="/css/index.css" />
    

Less注释

//该类型注释不会被编译到css文件中去
/*该类型注释会被编译到css文件中去*/

Less变量

用@来声明一个变量

  1. 变量作为普通属性值来使用时,直接使用“@变量名”
  2. 变量作为选择器/属性名/url的时候,使用"@{选择器/属性名/url}"
  3. 变量延迟加载,可以先使用,后声明
@bgcolor:pink;	//声明背景变量
@m:margin;		//声明属性名变量,不常用
@h1:#h1;		//声明选择器变量,不常用
@{h1}{			//调用选择器变量
    @{m}: 0;	//调用属性名变量
    background: @bgcolor;	//调用背景变量
}
/*变量的延迟加载*/
#h1{
    @var: 1;
    num: @var;	//num的值最后会是3
    @var: 3;
}

Less嵌套

  1. 父级嵌套规则

    #div1{
        #div2{
    	
        }
    }
    
  2. 平级嵌套规则

    #div1{
    	&:hover{
    	
    	}
    }
    

Less 混合

混合就是将一系列属性从一个规则集引入到另一个规则集的方式

优点是灵活性高,缺点是代码冗余

现有div1及其内部div2,div2要在div1中居中

  1. 普通混合,编译后的css文件中带有".juzhong"样式

    body{
        margin: 0;
        padding: 0;
        .juzhong{				//选择器后面没有括号,css中会输出该样式
            width: 100px;
            height: 100px;
            background-color: pink;
            transform: translate(50%,50%);
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong
            }
        }
    }
    
  2. 不带输出的混合,编译后的css文件中没有“.juzhong”样式

    body{
        margin: 0;
        padding: 0;
        .juzhong(){				//选择器后加上括号,css中不输出该样式
            width: 100px;
            height: 100px;
            background-color: pink;
            transform: translate(50%,50%);
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong()
            }
        }
    }
    
  3. 带参数的混合

    body{
        margin: 0;
        padding: 0;
        .juzhong(@w,@h,@bgc){		//选择器中定义形参
            width: @w;
            height: @h;
            background-color: @bgc;
            transform: translate(50%,50%);
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong(100px,100px,pink)		//调用时传入实参
            }
        }
    }
    
  4. 带参数且有默认值的混合

    参数最后完整传入,如不完整传入有可能发生错误

    body{
        margin: 0;
        padding: 0;
        .juzhong(@w:50px,@h:50px,@bgc:red){		//定义形参时同时指定默认值
            width: @w;
            height: @h;
            background-color: @bgc;
            transform: translate(50%,50%);
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong(100px,100px,pink)	
                .juzhong(100px,100px)	/*当传入的参数数量不完整时,会按顺序将第									一个实参赋值给第一个形参,以此类推*/
                .juzhong()		//不传入实参就会选择默认值
            }
        }
    }
    
  5. 命名混合

    如果只想给其中某一个变量赋值,需要使用命名混合

    body{
        margin: 0;
        padding: 0;
        .juzhong(@w:50px,@h:50px,@bgc:red){
            width: @w;
            height: @h;
            background-color: @bgc;
            transform: translate(50%,50%);
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong(@bgc:pink)  	/*只给背景赋值,其它采用默认值*/
            }
        }
    }
    
  6. 匹配模式

    如需要一个大的和一个小的div,可采用匹配模式

    body{
        margin: 0;
        padding: 0;
        .juzhong(@_,@bgc){				//@_是公共样式
            transform: translate(50%,50%);
        }
        .juzhong(small,@bgc){
            width: 50px;
            height: 50px;
            background-color: @bgc;
        }
        .juzhong(big,@bgc){
            width: 100px;
            height: 100px;
            background-color: @bgc;
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong(big,pink)		//根据传入实参的不同选择样式
            }
        }
    }
    
  7. arguments变量

    body{
        margin: 0;
        padding: 0;
        .juzhong(@w:50px,@h:50px,@bgc:red){		
            width: @w;
            height: @h;
            background-color: @bgc;
            transform: translate(50%,50%);
        }
        .border(@a,@b,@c){
            border: @arguments;		//使用arguments变量引用传入的实参
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2{
                .juzhong(100px,100px,pink);
                .border(1px,solid,black);
            }
        }
    }
    

Less继承

继承的优点是代码简洁,缺点是灵活度低,不能使用参数

  1. 继承

    body{
        margin: 0;
        padding: 0;
        .juzhong{	
            transform: translate(50%,50%); 
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2:extend(.juzhong){     //第一种
                width: 100px;
                height: 100px;
                background-color: pink;
               // &:extend(.juzhong);   //第二种
            }
        }
    }
    
  2. all关键字

    body{
        margin: 0;
        padding: 0;
        .juzhong{	
            transform: translate(50%,50%); 
        }
        .juzhong:hover{
            background-color: red();
        }
        .div1{
            width: 200px;
            height: 200px;
            background-color: green;
            .div2:extend(.juzhong all){     //第一种
                width: 100px;
                height: 100px;
                background-color: pink;
               // &:extend(.juzhong all);   //第二种
            }
        }
    }
    

Less避免编译

less有时候会帮助我们进行计算,然后我们不想让其计算的话,可以采用“~”关键字

.div{
    width: ~"calc(200px + 200px)";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值