CSS作为一种样式语言, 本身用来给HTML元素添加样式是没有问题的.
但是目前前端项目已经越来越复杂, 不再是简简单单的几行CSS就可以搞定的, 我们需要几千行甚至上万行的CSS来完成页面的美化工作.
随着代码量的增加, 必然会造成很多的编写不便:
Less (Leaner Style Sheets 的缩写) 是一门CSS 扩展语言, 并且兼容CSS。
<script src="https://cdn.jsdelivr.net/npm/less@4" ></script>
easy less 保存less文件以后,就自动在当前文件夹生成css文件。
◼ Less语法一:Less是兼容CSS的
只是将css的扩展名改成了.less结尾而已;
◼ 在一个大型的网页项目中,我们CSS使用到的某几种属性值往往是特定的
所以,我们可以将常见的颜色或者字体等定义为变量来使用;
◼ 在Less中使用如下的格式来定义变量;
@变量名: 变量值;
可以理解为&就是外面这个选择器的名称
a.link {
color: @mainColor;
font-size: @smallFontSize;
background-color: #0f0;
&:hover {
color: #00f;
}
}
相当于a.link:hover
<!-- &符号的练习 -->
<ul class="list">
<li class="item">1</li>
<li class="item">2</li>
<li class="item">3</li>
<li class="item">4</li>
<li class="item">5</li>
</ul>
// &符号的练习
.list {
.item {
font-size: 20px;
&:hover {
color: @mainColor;
}
&:nth-child(1) {
color: orange;
}
&:nth-child(2) {
color: #00f;
}
}
}
◼ 在Less中,算术运算符 +、-、*、/ 可以对任何数字、颜色或变量进行运算。
如果单位换算无效或失去意义,则忽略单位;
◼ 在原来的CSS编写过程中,多个选择器中可能会有大量相同的代码
在less中提供了混入(Mixins)来帮助我们完成这样的操作;
◼ 混合(Mixin)是一种将一组属性从一个规则集(或混入)到另一个规则集的方法。
◼ 注意:混入在没有参数的情况下,小括号可以省略,但是不建议这样使用;
一般会在less的文件夹里面创建一个mixins.less文件,里面放的都是混入的方法的定义。
在日常开发中,推荐类选择器,因为id选择器不能重复,多人开发容易冲突。
带参数的情况:
// 2.2.混入是可以传递参数(定义变量)的
.box_border(@borderWidth: 5px, @borderColor: purple) {
border: @borderWidth solid @borderColor;
}
.box1 {
background-color: #f00;
.box_border();
}
.box2 {
width: 150px;
background-color: #0f0;
.box_border(10px, orange);
}
// 2.3.混入和映射(Map)结合使用
// 作用: 弥补less中不能自定义函数的缺陷
.box_size {
width: 100px;
height: 100px;
}
.box1 {
width: .box_size() [width];
/* 只需要 .box_size里面的width
如果全部需要,就直接混入
.box_size()
*/
background-color: #f00;
}
https://lesscss.org/less-preview/
和mixins相比,继承代码最终会转化成并集选择器;
混合
.box_border {
border: 5px solid #f00;
}
.box {
width: 100px;
background-color: orange;
.box_border();
}
转成css后
.box_border {
border: 5px solid #f00;
}
.box {
width: 100px;
background-color: orange;
border: 5px solid #f00;
}
继承
.box_border {
border: 5px solid #f00;
}
.box {
width: 100px;
background-color: orange;
&:extend(.box_border);
}
转成css后
.box_border,
.box {
border: 5px solid #f00;
}
.box {
width: 100px;
background-color: orange;
}
总结:
混合是把调用的名字插入替换成里面的内容
继承代码最终会转化成并集选择器。一般用混入多,混入可以传入参数。
混入的话,转成css后阅读性更多。
如果找不到,则从“父”级作用域继承;
如果一个变量在全局有定义,在父元素有定义,在爷爷元素有定义,儿子就是使用距离它最近的变量,也就是父亲里面的,父亲没有就是用爷爷的。自己里面有这个变量,就使用自己的。就近原则。
如果自己混入了一个
.box_mixin {
@mainColor: orange;
}
这个mainColor属性就插入到自己里面了,
然后自己的颜色就是这个orange了。不去找父辈元素里面的这个变量了。
在Less中,块注释和行注释都可以使用
// 单行注释
/* 多行注释 */
所以,Sass的语法使用的是类似于Ruby的语法,没有花括号,没有分号,具有严格的缩进;