Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。LESS 为 CSS 赋予了动态语言的特性,如变量、继承、运算、函数。LESS 既可以在客户端上运行 (支持 IE 6+、Webkit、Firefox),也可以借助 Node.js 或者 Rhino 在服务端运行。
因为 Less 和 CSS 非常像,因此很容易学习。而且 Less 仅对 CSS 语言增加了少许方便的扩展,这就是 Less 如此易学的原因之一。
在浏览器环境中使用 Less :(注意链接的顺序)
<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js" >script>
在 Node.js 环境中使用 Less :
npm install -g less
> lessc styles.less styles.css
用@声明变量(分为全局/局部变量)
//全局变量
@width:100px;
@height:100px;
@borderColor: red;
.block{
//局部变量,只能在这里面可以调用
@bgcolor:#444;
//变量的调用方式
width: @width;
height: @height;
border: solid 1px @borderColor;
background-color:@bgcolor;
}
@base:2;
@baseColor: blue;
@borderColor: red;
.menu{
width: @width*@base;
height: @height -2;
border: solid 1px @borderColor+@baseColor;
}
将一组属性从一个规则集包含(或混入)到另一个规则集的方法(方法的定义和调用)
1)无参
.borderRadius{
border-radius:10px ;
}
//调用方式:
//直接在样式中调用,它可以带括号或者不带
.borderRadius();
.borderRadius;
2).含参
//1.默认情况下的含参
.borderRadius(@radius){
border-radius:@radius ;
}
//调用方式:
//直接在样式中调用,必须要传参
.borderRadius(40px);
//2.含默认值的参数
.borderRadius(@radius:10px){
border-radius:@radius ;
}
//调用方式:
//直接在样式中调用,如果不传参就用默认值,传参就用传的值
.borderRadius(50%);
.borderRadius();
.menu{
width: @width*@base;
@media (min-width: 768px) {
width: @width;
}
height: @height;
border: solid 1px @borderColor+@baseColor;
.baby{
width: @width;
height: @height;
border: solid 1px @borderColor;
margin: auto;
position: relative;
//悬停
&:hover{
background-color: darkblue;
}
//伪类
&:after{
position: absolute;
content: '';
border: solid 12px #6bcbfa;
}
}
}
允许使用任意字符串作为属性或变量值。任何 ~“anything” 或 ~‘anything’ 形式的内容都将按原样输出,除非 interpolation。
@media768:~"(max-width:768px)";
.zy{
width: 200px;
height: 300px;
border: solid 1px @borderColor;
margin: auto;
@media @media768{
width: 768px;
background: red;
}
}
1).逻辑功能(Logical Functions)
iscolor()
:检测是否是一个颜色, 返回的是true/false 。if()
逻辑判断: if(条件,true,false)
@some:#dd1;
.iscolor{
width: 100px;
height: 100px;
//如果为真,返回第一个值,反之返回第二个值
background-color: if(iscolor(@some),@some,black);
}
boolean(condition);
2).字符串函数(String Functions)
escape 转码字符串, 用于带字符串的值的用的转码。
escape(string);
3).清单功能(List Functions)
length(list);
返回长度range(start,end,step);
产生一组数字 (start,step(帧数)可选)each(list,rules);
遍历方法//each() 遍历方法
//3种写法
//value指当前的遍历值,index指当前遍历的索引从1开始,key指键值
each(range(5), {
.col-@{value} {
width: @value * 5px;
height: @value * 5px;
border: solid 1px saddlebrown;
}});
//数组型
@arr:a,b,c,d,e;
each(@arr,{
.col-@{value} {
width: @index * 5px;
height: @index * 5px;
border: solid 1px saddlebrown;
}
});
//对象型
@set:{one:red;two:blue;three: orange; four: pink; five: yellow; };
each(@set,{
.col-@{key} {
width: @index * 5px;
height: @index * 5px;
border: solid 1px saddlebrown;
}
});
4).数学函数(Math Functions)
ceil 向上取整
floor 向下取整
percentage 转化百分比
round 四舍五入
sqrt 开平方的
abs 取绝对值的
sin asin cos acos tan atan
pi 3.141592653589793
pow 求幂
min 取最小值的
max 取最大值的
5).类型方法(Type Functions)
检测是否是数字的方法:isnumber, 返回值是true false
检测是否是字符串的:isstring, 返回值true
false 检测是否是路径:isurl,返回值true flase
检测像素值的:ispixel 返回值 true false
检测是否是em单位的:isem,返回值 true false
检测是否是%单位的:ispercentage,返回值true false
6).颜色的函数
rgb()
rgba()
hsl(): 哈希值hsl(90, 100%, 50%)
操作颜色的函数:
lightness:设置颜色亮度
lightness(hsl(90, 100%, 50%))
lighten:减轻颜色的亮度
lighten(hsl(90, 80%, 50%), 20%)
darken: 加重颜色的亮度darken(hsl(90, 80%, 50%), 20%)
fadein: 降低颜色的透明度
fade: 设置不透明度rgba(241,70,50,0.1),80%
mix: 混合颜色的方法 , 前两个是颜色, 平衡点可选, 默认50%
tint: 把颜色和白色混合,平衡点默认50%
shade: 把颜色和黑色进行混合,平衡点默认50%
multiply: 混合两个颜色,让变暗
screen: 混合两个颜色,让变亮
定义一个命名空间,作用是封装
#space() {
primary: blue;
secondary: green;
.btn {
width: 100px;
height: 100px;
font-size: 13px;
}
}
.bgcolor {
width: 200px;
height: 200px;
background-color: #space[primary]; //是命名空间的映射关系
.btn {
#space.btn(); //访问命名空间
}
}