Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。
中文网址: http://lesscss.cn/
1、写样式更简单:嵌套
2、使用方便:变量、运算、函数
3、学习成本低:语法
@color:#adf;
@height:100px;
//1. 变量声明
header{
background-color:@color;
height:@height;
}
将一个变量的值作为选择器
@section:#section;
@{
section}{
height:400px;
background:#ede;
}
@one:section;
@two:footer;
@s:~'@{
one},@{
two}';
@{
s}{
background:#999;
}
header{
height:100px+200px;
}
section{
height:100px*2%; // 200px;
// 如果都有单位,则使用第一个作为单位
width:900/33px; //27.2727px;
// 如果只有一个有单位,则使用该单位
}
less 支持嵌套书写形式
#app{
#header{
// 子孙元素
.logo{
}
// 子元素
>.search{
}
// 后边紧挨着的元素
+ div{
}
&:hover{
}
&::before{
}
}
}
.left{
height:500px;
background-color:#adb;
// >=1200
@media screen and(min-width:1200px) {
background:#6e4848;
}
// >=1200,<=900
@media screen and(max-width:1200px) and (min-width:900px){
background:#baa;
}
//<900
@media screen and (max-width:900px){
background:#abd;
}
}
变量只能在当前代码段和下层代码段使用。
将需要重复使用的代码封装到一个类中,在需要使用的地方调用。
.class #id
.font_h{
color: red;
}
h1{
font-size:28px;
.font_h;
}
不输出选择器的单独样式设置
.float_left{
content:".";
display:block;
clear:both;
}
#box1{
float_left();
}
// 定义混合
.border(@border_color){
border:2px solid @border_color;
}
// 使用混合
.div{
.border(#f60);
// 使用时我们需要传入一个参数进去
}
.div {
border: 2px solid #ff6600;
}
两个混合,混合名相同,但是参数不同,这是两个不同的混合,根据参数的个数来决定执行哪个混合
// 定义混合
.border(@border_color:#f60;){
border:2px solid @border_color;
}
// 使用混合
.div{
.border();
}
.div {
border: 2px solid #ff6600;
}
注意: 具有默认值的参数一定要靠后声明,否则会有语法错误。
调用的时候有两种形式
按顺序传参
.box2(100px, 100px, #000);
制定参数名传参
.box2(@bg:#090, @width: 100px, @height:200px);
.arrow(@size:10px, @color: #908, @direction) when(@direction=bottom) {
width:0px;
height:0px;
border-style:solid;
border-width: @size;
border-color: @color transparent transparent transparent ;
}
less 支持组件化,允许将不同功能的代码放到不同的文件中。
less 提供了内置函数来处理,文档地址 https://less.bootcss.com/functions/,函数和混合的区分
混合
相当于是自定义函数函数
相当于是内置函数数学函数
颜色操作
Map 相当于 JS 的对象,可以把一系列的数据保存在 Map 中
#color(){
base: #098;
darker: darken(#098, 10%);
darkest: darken(#098, 30%);
}
footer{
height:100px;
background: #color[darker];
}