LESS
less作用
css层叠样式表,它是标记语言,不是编程语言;所有的预编译CSS语言(less/sass…)都是赋予了css的面向对象思想
less的编译
LESS叫做预编译CSS:写好的LESS代码浏览器是不能渲染的,需要我们把它编译成为能渲染的CSS才可以
在开发环境下,我们一般都通过导入less插件(less-2.5.3.min.js)来随时编译less
1 2 3 4 5
| <link rel="stylersheet/less" href="1.less">
<script src="js/less-2.5.3.min.js"></script>
|
生产环境中,我们需要事先把less编译成css:
- 使用node编译
- 下载安装node
- 在node全局环境下,使用npm包管理器安装一个less模块
npm install less -g
- 在指定的目录中执行
less xxx.less yyy.less
把less编译成css,less xxx.less xxx.min.css -x
不仅编译成css,而且还把css压缩
- 使用编译工具
less中的基础与发
变量
- 设置变量使用
@[变量名]: 变量值
- 传统css支持的值都可以作为变量值
- 变量名中可以出现
-
(less中可以支持数学运算,在部分减法运算的时候,我们需要明确的是运算符还是名字中的-@(shadow-px)-10
)
- 不是所有的情况下都要使用变量,只有很多样式都使用了相同的值,而且以后如果改变的话所有元素的样式都跟着改变
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @a: 1; @b: 30%; @c: 1000px; @d: #000; @shadow-color: red; @img-url: '../img'; @name: '测试'; @get: 'name';
.box { opacity: @a; filter: alpha(opacity=(@a*100)); background: url("@{img-url}/xxx.png"); }
|
mixin混合应用
在less当中只要设置了一个样式类,我们就可以把它称之为一个方法,其他地方需要用刀这些样式的,直接.[类名]
调用即可(原理:把当前样式类中的代码原封不动的copy一份过去)
不加括号,即是普通样式类,也是封装的一个函数,编译的时候,这个样式类中的代码依然跟着编译,加括号仅仅是封装的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| .pub { width: 100px; height: 100px; background: green; }
.box { .pub; background: red; }
.pub { width: 100px; height: 100px; background: green; }
.box { width: 100px; height: 100px; background: green; background: red; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| .pub() { width: 100px; height: 100px; background: green; }
.box { .pub(); background: red; }
.box { width: 100px; height: 100px; background: green; background: red; }
|
函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| .函数名(@参数1:默认值1, @参数2...){ @arguments }
.transition(@property:all, @duration, @timing:linear, @delay:0s) { transition: @arguments; }
.box { .transition(all, 1s, linear, 0s); .transition(@timing: ease, @duration: 1s); }
.sum(@n:0, @m:0) { @result: @n + @m; }
.box { .sum(10, 20); width: unit(@result, px); }
|
命名空间
在less当中每一个大括号都是一个私有作用域,且变量的声明和赋值在作用于中都会提升
1 2 3 4 5 6 7 8 9 10
| @a: 10; .box { width: unit(@a, px); @a: 20; .mark { width: unit(@a, px); } }
|
extend继承
项目中,如果想要使用extend实现继承,我们一般都把需要继承的样式类写在最外层(而不是里层的私有作用域),如果22想要继承当前私有作用域中的某个样式类,需要把前缀都准备好
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| .pub { width: 100px; height: 100px; background: red; }
.com { color: #ff6700; }
.box:extend(.pub) { background: green; }
.box { &:extend(.pub, .com); background: green; }
.box { .mark { width: 100px; height: 100px; } .inner { .mark; background: red; } }
|
条件和递归
我们在mixin中设置的条件:常用的条件运算符:>/>=/</<=/=
;我们设定的条件还可以使用is函数:iscolor
isnumber
isstring
iskeyword
isurl
ispixel
ispercentage
…
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| .pub(@x) when (@x <= 10) { width: 100px; height: 200px; }
.pub(@x) when (@x > 10) { width: 200px; height: 400px; }
.box { .pub(20); background: green; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| .columns(@i) when (@i <= 4) { .box@{i} { width: unit(@i*10, %); } .columns(@i + 1); }
.columns(1);
.box1 { width: 10%; } .box2 { width: 20%; } .box3 { width: 30%; } .box4 { width: 40%; }
|
链接符&和import
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| .box { .mark { color: red; } &.pp { background: red; } & > .mm { background: green; } &:hover { background: orange; } }
|
1 2
| @import "reset"; @import (reference) "public";
|
less小测
小米商城