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插件
-
在VS Code的扩展商店中,找到Easy LESS插件并安装,随后重启VS Code
-
”文件“-”首选项“-”设置“中找到Easy LESS的settings.json文件并打开
-
修改如下
"less.compile": { "out":"./css/" }
-
在index.less文件中修改css样式,将会在css文件下生成新的index.css文件
<link rel="stylesheet" type="text/css" href="/css/index.css" />
Less注释
//该类型注释不会被编译到css文件中去
/*该类型注释会被编译到css文件中去*/
Less变量
用@来声明一个变量
- 变量作为普通属性值来使用时,直接使用“@变量名”
- 变量作为选择器/属性名/url的时候,使用"@{选择器/属性名/url}"
- 变量延迟加载,可以先使用,后声明
@bgcolor:pink; //声明背景变量
@m:margin; //声明属性名变量,不常用
@h1:#h1; //声明选择器变量,不常用
@{h1}{ //调用选择器变量
@{m}: 0; //调用属性名变量
background: @bgcolor; //调用背景变量
}
/*变量的延迟加载*/
#h1{
@var: 1;
num: @var; //num的值最后会是3
@var: 3;
}
Less嵌套
-
父级嵌套规则
#div1{ #div2{ } }
-
平级嵌套规则
#div1{ &:hover{ } }
Less 混合
混合就是将一系列属性从一个规则集引入到另一个规则集的方式
优点是灵活性高,缺点是代码冗余
现有div1及其内部div2,div2要在div1中居中
-
普通混合,编译后的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 } } }
-
不带输出的混合,编译后的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() } } }
-
带参数的混合
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) //调用时传入实参 } } }
-
带参数且有默认值的混合
参数最后完整传入,如不完整传入有可能发生错误
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() //不传入实参就会选择默认值 } } }
-
命名混合
如果只想给其中某一个变量赋值,需要使用命名混合
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) /*只给背景赋值,其它采用默认值*/ } } }
-
匹配模式
如需要一个大的和一个小的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) //根据传入实参的不同选择样式 } } }
-
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继承
继承的优点是代码简洁,缺点是灵活度低,不能使用参数
-
继承
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); //第二种 } } }
-
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)";
}