前言
CSS的语法比较简单,但是有时候为了让两个元素(拥有同一个类名)的样式不一样,就需要添加另外一个类或者在书写CSS的时候多加层级。这样很不方便,而且也容易出错。除此还有在CSS中没有变量、函数这种概念,并且有时候为了兼容不同浏览器要写一堆类似的样式。
在css预编译器中,上面的问题都可以得到解决。css预编译器有很多:Sass、Less 、Stylus这三种是比较常用的,彼此之间都是大同小异。
变量
1. 值变量
定义@ + 变量名称:值;
使用的时候直接就是@ + 变量
在页面样式中,经常会出现好多字体或者背景色什么的设置都是一样的,但是有时候需要把原系统的样式配色换一套,这个时候就需要全局搜索,而且一不小心还会改错。这个时候特别希望能够拥有js的定义变量常量,再赋值的功能,就如下:
1 | const bgColor="skyblue"; |
Less变量书写
1 | /* Less */ |
2. 选择器变量
定义@ + 变量名称:值;
使用的时候直接就是@ + { + 变量 + }
,要使用大括号包裹变量名
选择器变成动态的,后期修改html的css以及ID的时候可以不用重写,直接修改变量值。
1 | /* Less */ |
3. 属性变量
定义@ + 变量名称:值;
使用的时候直接就是@ + { + 变量 + }
,要使用大括号包裹变量名
1 | /* Less */ |
4. URL变量
定义@ + 变量名称:值;
使用的时候直接就是@ + { + 变量 + }
,要使用大括号包裹变量名
比较常用的就是,将前面的相同路径定义成一个变量,后期如果image文件夹修改路径了,可以直接修改这个变量,不用每个URL都要修改了。主要就是提取相同的绝对/相对路径。
1 | /* Less */ |
5. 声明变量
定义@name:{属性: 值;};
使用的时候直接就是@name()
,要使用大括号包裹变量名
可以将一堆相同的样式提取出来
1 | /* Less */ |
6. 变量运算
- 加减法时,以第一个数据的单位为基准
- 乘除法时,注意单位一定要统一
CSS3中有一个calc()函数,但是局限性比较大
1 | /* Less */ |
7. 变量作用域
一句话理解就是:就近原则,不要跟我提闭包。
1 | /* Less */ |
8. 用变量去定义变量
1 | /* Less */ |
嵌套
Less的嵌套是最常用的,并且具有层级关系,能够避免不同层级下的相同类名元素的样式相同。而且便于我们查找样式进行修改。
1. & 妙用
&
: 代表的上一层选择器的名字,此例便是header。
1 | /* Less */ |
2. 媒体查询
在以往的工作中,我们使用 媒体查询,都要把一个元素 分开写
1 | #wrap{ |
Less 提供了一个十分便捷的方式
1 | /* Less */ |
唯一的缺点就是 每一个元素都会编译出自己 @media
声明,并不会合并。
可以借助 Less 在元素中,去定义自己的私有样式。
1 | /* Less */ |
混合方法-mixin
1. 无参数方法
方法犹如 声明的集合,使用时 直接键入名称即可。
1 | /* Less */ |
其中 .card
与 .card()
是等价的
- . 与 # 皆可作为 方法前缀。
- 方法后写不写 () 看个人习惯。
2. 默认参数方法
- Less 可以使用默认参数,如果 没有传参数,那么将使用默认参数。
- @arguments 犹如 JS 中的 arguments 指代的是 全部参数。
- 传的参数中 必须带着单位。
1 | /* Less */ |
3. 方法的匹配模式
与 面向对象中的多态 很相似
1 | /* Less */ |
- 第一个参数 left 要会找到方法中匹配程度最高的,如果匹配程度相同,将全部选择,并存在着样式覆盖替换。
- 如果匹配的参数 是变量,则将会匹配,如 @_ 。
4. 方法的命名空间
让方法更加规范
1 | /* Less */ |
- 在 CSS 中> 选择器,选择的是 儿子元素,就是 必须与父元素 有直接血源的元素。
- 在引入命令空间时,如使用 > 选择器,父元素不能加 括号。
- 不得单独使用命名空间的方法 必须先引入命名空间,才能使用 其中方法。
- 子方法 可以使用上一层传进来的方法
5. 方法的条件筛选
Less 没有 if else,可是它有 when
1 | /* Less */ |
- 比较运算有: > >= = =<<。< li>
- = 代表的是等于
- 除去关键字 true 以外的值都被视为 false
6. 数量不定的参数
如果你希望你的方法接受数量不定的参数,你可以使用… ,犹如 ES6 的扩展运算符。
1 | /* Less */ |
7. 方法使用important!
使用方法 非常简单,在方法名后 加上关键字即可。
1 | /* Less */ |
8. 循环方法
Less 并没有提供 for 循环功能,但这也难不倒 聪明的程序员,使用递归去实现。 下面是官网中的一个 Demo,模拟了生成栅格系统。
1 | /* Less */ |
9. 属性拼接方法
+_
代表的是 空格;+
代表的是 逗号。
- 逗号
1 | /* Less */ |
- 空格
1 | /* Less */ |
导入
1. 导入 less 文件 可省略后缀
1 | import "main"; |
2.@import
的位置可随意放置
1 | #main{ |
3. reference
Less 中 最强大的特性 使用 引入的 Less 文件,但不会 编译它。
1 | /* Less */ |
使用@import (reference)导入外部文件,但不会添加 把导入的文件 编译到最终输出中,只引用。
4. once
@import语句的默认行为。这表明相同的文件只会被导入一次,而随后的导入文件的重复代码都不会解析。
1 | @import (once) "foo.less"; |
5. multiple
使用@import (multiple)允许导入多个同名文件。
1 | /* Less */ |
函数
1. 判断类型
- isnumber
判断给定的值 是否 是一个数字。
1 | isnumber(#ff0); // false |
iscolor
判断给定的值 是否 是一个颜色。
isurl
判断给定的值 是否 是一个 url 。
2. 颜色操作
saturate
增加一定数值的颜色饱和度。
lighten
增加一定数值的颜色亮度。
darken
降低一定数值的颜色亮度。
fade
给颜色设定一定数值的透明度。
mix
根据比例混合两种颜色。
3. 数学函数
ceil
增向上取整。
floor
向下取整。
percentage
将浮点数转换为百分比字符串。
round
四舍五入。
sqrt
计算一个数的平方根。
abs
计算数字的绝对值,原样保持单位。
pow
计算一个数的乘方。
注释
/* */
CSS原生注释,会被编译在 CSS 文件中。/ /
Less提供的一种注释,不会被编译在 CSS 文件中。
除此之外,还有继承等一系列的,需要大家参考官网去学习了解
参考资料:Less中文网 [http://lesscss.cn/]