技多不压身,不断尝试新知识、新技术才能有所提高,任何一门技术的掌握都是由浅入深的,所以不要逃避新技术,有开始,持之以恒,慢慢会发现比原来懂了很多。这是讲在前面的话,好了,开始进入主题。
知识体系:
- less概括
- 如何使用less
- 导入(Importing)
- 变量(Variables)
- 嵌套(Nested Rules)
- 混合(Mixins)
- 继承/扩展(Extend)
- 运算(Operations)
- 命名空间和访问器(Namespaces and Accessors)
- 作用域(Scope)
- 父选择器(Parent Selectors)
- 循环(Loops)
- 合并(Merge)
- 函数(Functions)
1、less概括
Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。less文件后缀是.less,less只有被编译后才能被浏览器识别使用。less之于css,可以理解为typescript之于JavaScript。
2、如何使用less
- 通过npm在命令行运行
$ npm install -g less
$lessc style.less style.css
- 在浏览器上作为脚本文件下载
通过link标签引入less文件
<link rel="stylesheet/less" type="text/css" href="styles.less" />
接下来通过script标签引入less.js文件
<script src="less.js" type="text/javascript"></script>
- 集成在第三方工具内
3、导入(Importing)
用于导入LESS或CSS文件的内容。如果导入的是less文件,可以将.less后缀省略。如:
@import "library"; // library.less
@import "typo.css";
4、变量(Variables)
变量的作用就是把值定义在一个地方,然后在各处使用,这样能让代码更易维护,变量名以“@”开始,通过“:”赋值。 变量是懒加载的,也就是说你可以在变量定义之前使用变量。 如:
@color1: #ca428b;
.div1{
background-color : @color1;
}
.div2{
background-color : @color1;
}
编译为css:
.div1 {
background-color: #ca428b;
}
.div2 {
background-color: #ca428b;
}
5、嵌套(Nested Rules)
模仿html结构,让css代码更加简洁明了清晰。如:
.container{
h1{
font-size: 25px;
color:#E45456;
}
.myclass{
h1{
font-size: 25px;
color:#E45456;
}
}
}
.container h1 {
font-size: 25px;
color: #E45456;
}
.container .myclass h1 {
font-size: 25px;
color: #E45456;
}
6、混合(Mixins)
把某个选择器中的样式拿过来使用,less中的内容比较多,这里只做简单介绍。
.a(){ //放置括号后在输出中消失
padding-left: 100px;
}
.myclass{
background : #64d9c0;
.a;
}
编译为css:
.myclass{
background : #64d9c0;
padding-left: 100px;
}
7、继承/扩展(Extend)
虽然在上述的案例中,.myclass把.a中的样式继承了过来,但是原理却是把代码copy一份过来,这样编译后的CSS中依然会存留大量的冗余CSS代码,为了避免这一点,我们可以使用extend伪类来实现样式的继承使用。如:
.img{
font-size: 45px;
font-style: italic;
}
.style,
.container:extend(.img){
background: #BF70A5;
}
编译为css:
.img,
.container {
font-size: 45px;
font-style: italic;
}
.style,
.container {
background: #BF70A5;
}
8、运算(Operations)
可以对数字、颜色值、变量进行+, -, *, /操作。如:
@base: 5%;
@filler: @base * 2; // 10%
@other: @base + @filler; // 15%
9、命名空间和访问器(Namespaces and Accessors)
在LESS的语法中,我们可以指定命名空间,实现在一个盒子中层级嵌套式的编写。下面案例中,调取.class3样式需要.class1 > .class2>.class3。如:
.class1 {
.class2 {
.class3 {
color:green;
}
}
}
.myclass {
.class1 > .class2 > .class3;
}
.class1 .class2 .class3 {
color: green;
}
.myclass {
color: green;
}
10、作用域(Scope)
less中的作用域与编程语言中的作用域概念非常相似,首先会在局部查找变量和混合。如果没找到,编译器就会在父作用域中查找,依次类推。如:
@clolor:#ffffff;
.bgcolor{
width: 50px;
@clolor:#cccccc;
a{
color: @clolor; //#cccccc
}
}
编译为css:
.bgcolor {
width: 50px;
}
.bgcolor a {
color: #cccccc;
}
11、父选择器(Parent Selectors)
使用&(和号)运算符来引用父选择器。 嵌套规则的父选择器由&运算符表示,并在将修改类或伪类应用于现有选择器时使用。
.select {
& + & {
color: #A9F5F2;
}
}
编译为css:
.select + .select {
color: #A9F5F2;
}
12、循环(Loops)
在less中,混合可以调用它自身,这样,当一个混合递归调用自己,再结合Guard表达式和模式匹配这两个特性,就可以写出循环结构.如:
.loop(@counter) when (@counter > 0) {
.loop((@counter - 1)); // 递归调用自身 3 2 1
width: (10px * @counter); // 每次调用时产生的样式代码30px 20px 10px
}
div {
.loop(3); // 调用循环
}
编译为css:
div{
width: 30px;
width: 20px;
width: 10px;
}
13、合并(Merge)
在需要合并的属性后加上+,合并后属性值以“,”隔开。如:
.myfunc() {
box-shadow+: 5px 5px 5px grey;
}
.class {
.myfunc();
box-shadow+: 0 0 5px #f78181;
}
编译为css:
.class {
box-shadow: 5px 5px 5px grey, 0 0 5px #f78181;
}
14、函数(Functions)
Less提供了许多用于转换颜色,处理字符串和进行算术运算的函数。
.bgcolor{
background :rgb(0,133,0) ;
z-index: blue(#050506);
}
编译为css:
.bgcolor{
background :#008500;
z-index: 6;
}