Less是什么
在开发的过程中,会有很多选择器的层级和相同的内容这样会显得CSS文件写的样式会显得很冗余,于是就有了Less,Less是为了简化CSS的书写形式而诞生的一种语言,但是Less文件最终也会产生CSS文件,Less也能写CSS
Less基本操作
Less语法的内容有点像编程语言的基本语法,因此这样就会比较容易学习,在学习的过程中多与编程语言进行对比着来看
下面给个最基本的格式,这里是在js标签下使用,vscode也有插件,还有一些软件(Koala)可以编译,但是不管是插件也好,js也好,本质都是为了产生CSS文件,进而使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<style type="text/less">
/*这里就写less语法*/
</style>
</head>
<body></body>
</html>
<script src="https://cdn.bootcdn.net/ajax/libs/less.js/4.1.3/less.min.js"></script>
Less分层
Less文件
#main {
width: 30px;
height: 90px;
color: red;
.son { //这和符合标签的双标签书写形式,标签里面可以套标签,样式也可以套样式,这样这里的.son也就相当于是#main下面的
width: 30px;
height: 30px;
background-color: blue;
}
}
编译后的CSS文件
#main {
width: 30px;
height: 90px;
color: red;
}
#main .son {
width: 30px;
height: 30px;
background-color: blue;
}
可以看出在Less分层里面写的默认是在指父子关系,但是有一类伪类选择器,例如hover
#main {
width:30px;
height: 90px;
&:hover { //例如&指代前面一层的选择器,然后后面跟要的伪类选择器,这样就灵活了很多
width: 40px;
}
&>div { //这是代表最近一层的子元素的样式
background: color;
}
}
Less注释
Less的注释和编程语言JavaScript和CSS是一样的,用/**/
表示多行注释,//
表示行内注释
Less变量
有了变量也可以简化很多的事情,变量可以装入指定的内容,然后进行操作
- 变量的声明
格式:
@变量名:值
- 变量的使用
格式:
@变量名,这是CSS普通值使用变量的情况下
@{变量名},这是CSS属性名和选择器名使用变量的情况下(需要在变量名两边加个花括号)
Less函数
在CSS中有很多重复的样式是多余的,在编程语言中,可以利用函数去多次重复调用代码块,在Less中也有类似函数的使用,在Less中的函数叫做混合
-
不带参数的混合(函数)
#fun(){ //这里的函数名要写成选择器的样子,一般写成类选择器和ID选择器 width:200px; height:200px; background: blue; } .dm { #fun() } .dm1 { #fun() }
-
带参数的混合(函数)
#argfun(@width,@height,@color){ //这里完全可以和JavaScript里面的函数理解,形参
width:@width;
height:@height;
background: @color;
}
.dm {
#argfun(200px,200px,blue) //实参传入
}
.dm1 {
#argfun(100px,200px,red)
}
.dm2 {
#argfun(@height:200,@width:100px;@color:red) //指定参数名传值,如果不指定就是按照形参的顺序进行传入
}
- 默认值参数的混合(函数)
#normalFun(r,@w,@h){ //这里写个r是用来做标示的,类似flag
height: @h;
width: @w;
background: red;
}
#normalFun(b,@w,@h){ //这里填个b也用来做标示的,类似flag
height: @h;
width: @w;
background: blue;
}
.dm {
#normalFun(r,200px,200px); //传入标示r
}
.dm1 {
#normalFun(b,100px,200px); //传入标示b
}
4.多个参数的传值
.fun(@1,@2,@3){
border: @arguments; //就是把传进的参数全部放这里
border: @1 @2 @3; //这个效果和上面这个效果一样
}
.dm {
width: 200px;
height: 200px;
.fun(1px,solid,red);
}
Less模块
在编程语言中可以通过模块的形式扩展自己的包,在Less里面也可以导入指定的Less文件,然后使用Less文件里面的变量和混合(函数)
//在index.less文件下的内容
#argfun(@width:200px,@height,@color){ //定义一个函数(混合)
width:@width;
height:@height;
background: @color;
}
@color:green; //定义一个变量
//主文件less下的内容
@import "./index.less";
.dm {
#argfun(200px,200px,@color); //利用导入进来的函数和变量
}
.dm1 {
#argfun(100px,200px,red);
}
Less运算
在CSS中,值是不支持直接运算的,但是在Less中,CSS属性的值是支持直接运算的
.render(){
background: red;
}
.dm {
width: 100px+50px;//在less中,不仅仅是可以加还可以乘和除,减
height: 150+50%;//相加的数字中,必须要有一个数字是带单位的,这样才能把最终的值带上指定的单位,比如这里就是算的200%
.render();
}
Less继承
在CSS中,有很多重复的样式,在Less中除了可以用混合(函数)解决,还可以使用继承解决,继承是指拿指定选择器中的属性和值放到当前选择器中
.dm1 {
width: 200px;
height: 200px;
background: blue;
}
.dm {
&:extend(.dm1);
}
编译后的源码:
.dm1,dm { //最终会编译成这种多个选择的形式
width: 200px;
height: 200px;
background: blue;
}