Less的基本使用

常用的预处理语言 Sass Less Stylus
使用Less两种方式

  1. 引入less <link rel="stylesheet/less" href="xxx.less">
    然后引入 less.js 文件
  2. 使用 npm 安装 npm install -g less
    在项目中使用Webpack 需要配合less-loader处理

一 变量
二 嵌套
三 混合方法
四 继承
五 导入
六 函数
七 其他

一.变量 变量是常量 ,只能定义一次,不能重复使用

值变量

/* Less */
@color: #999;
#wrap{
	color:@color;
}
/* 生成的 css */
#wrap{
	color:#999;
}

@开头定义变量 使用时 直接 @名称
在项目中 可以把常用变量封装到一个文件中 利于代码组织维护

作为选择器和属性名的变量

/* 选择器变量 */
@mySelector: #wrap;
@Wrap: wrap;
@{mySelector}{   /* 变量名 必须使用大括号包裹 */
  color: #999;
  width: 50%;
}
.@{Wrap}{
  color:#ccc;
}
#@{Wrap}{
  color:#666;
}

 /* 生成的 CSS */
 #wrap{
   color: #999;
   width: 50%;
 }
 .wrap{
   color:#ccc;
 }
 #wrap{
   color:#666;
 }
/* 属性变量 可以减少代码书写量 */
@bgc:background-color;
div{
    width:200px; 
    height:200px;
    @{bgc}:red;
}

url变量

/* 项目结果改变时 修改变量即可 不用一个个去找 */
@imgurl:"www://www.xxx.com/img/";
header{
	background:url("@{imgurl}bglogo.png")
}

声明变量

/* Less */
@background:{background:red;}
#main{
	@background();
}
/* css */
#main{
	background:red;
}

变量运算

/* Less */
@width:300px;
@color:#222;
#wrap{
	width:@width-20;
	height:@width-20*5;
	margin(@width-20)*5;
	color:@color*2;
	background-color:@color + #111;
}
/* 生成的css */
#wrap{
	width:280px;
	height:200px;
	margin:1400px;
	color:#444;
	background-color:#333;
}

变量作用域 就近原则

/* Less */
@var:@a;
@a:100%;
#wrap{
	width:@var;
	@a:9%;
}
/* 生成的css */
#wrap{
	width:9%;
}

用变量去定义变量

/* Less */
@fnord:"i am fnord.";
@var:"fnord";
#wrap::after{
	content:@@var; /* 将@val替换值为值 content:@fnord;*/
}
/* 生成的css */
#wrap::after{
	content:"i am fnofd."
}

二. 嵌套

& 的妙用

/* Less */
#header{
	&:after{
		content:"Less";
	}
	&_content{ /* 理解 直接把&替换成 #hearder */
		margin:20px;
	}
}
/* 生成的css */
#header::after{
	content:"Less";
}
#header_content{
	margin:20px;
}

媒体查询

/* Less */
#main{
	@media screen{
		@media(max-width:768px){
			width:100px;
		}
	}
	@media tv{
		width:1000px;
	}
}
/* 生成的css */
@media screen and(maxwidth:768px){
	#main{
		width:100px;
	}
}
@media tv{
	#main{
		width:1000px;
	}
}
/* 缺点是 每一个元素都会编译出自己@medai声明 并不会合并 */

三. 混合 (将一系列属性从一个规则集引入(“混合”)到另一个规则集的方式)

/* Less */
.card{
	background:#555;
}
#wrap{
	.card;
}
/* 生成的css */
#wrap{
	background:#555;
}

.card.card()是等价的
为了避免混淆 可写成:

.card(){...}
#wrap{
	.card();
}
/* '.'与'#'皆可作为方法前缀 方法后面写不写'()'看个人习惯 */

默认参数方法
如果没有没有传参 可以使用默认参数
@arguments犹如js中的arguments指 全部参数

/* Less */
.border(@a:10px,@b:50px,@c:30px,@color:#000){
	border:1px solid @color;
	box-shadow:@arguments;
}
#main{
	.border(0px,5px,30px,red)
}
#wrap{
	.border(0px);
}
#content{
	.border;
}
/* 生成的css */
#main{
	border:1px solid red;
	box-shadow:0px,5px,30px,red;
}
#wrap{
	border:1px solid #000;
}
#content{
	border:1px solid #000;
	box-shadow:10px 50px 30px #000;
}

方法的匹配模式

 /* Less */
 .triangle(top,@width:20px,@color:#000){
     border-color:transparent  transparent @color transparent ;
 }
 .triangle(right,@width:20px,@color:#000){
     border-color:transparent @color transparent  transparent ;
 }

 .triangle(bottom,@width:20px,@color:#000){
     border-color:@color transparent  transparent  transparent ;
 }
 .triangle(left,@width:20px,@color:#000){
     border-color:transparent  transparent  transparent @color;
 }
 .triangle(@_,@width:20px,@color:#000){
     border-style: solid;
     border-width: @width;
 }
 #main{
      .triangle(left, 50px, #999)
  }
  /* 生成的 CSS */
  #main{
    border-color:transparent  transparent  transparent #999;
    border-style: solid;
    border-width: 50px;
  }

第一个参数left会找到方法中匹配程度最高的 如果匹配程度相同 将全部选择 并存在着样式覆盖替换。
如果匹配的参数 是变量 则将会匹配 如 @_

方法的命名空间

  /* Less */
#card(){
  	background:#333;
  	.d(@w:300px){
  		width:@w;
  		#a(@h:300px){
  			height:@h;
  			width:@w;
		}
	}
}
#wrap{
	#card>.d>#a(100px);
}
#main{
	#card .d();
}
#con{
	#card();
	.d(20px);
}
/* 生成的 CSS */
#wrap{
	height:100px;
	width:300px;
}
#main{
	width:300px;
}
#con{
	width:20px;
}

要点…

  • 在 CSS 中> 选择器,选择的是 儿子元素,就是 必须与父元素 有直接血源的元素。
  • 在引入命令空间时,如使用 > 选择器,父元素不能加 括号。
  • 不得单独使用命名空间的方法 必须先引入命名空间,才能使用 其中方法。
  • 子方法 可以使用上一层传进来的方法

方法的条件筛选 when

/* Less */
/* and相当于'&&' not相当于 '!' 逗号','相当于或运算 '|' */
#card{
	.border(@width,@color,@style)when(@width>100px)and(@color=#999){
		border:@style @color @width;
	}
	.background(@color)when not(@color>=#222){
		background:@color;
	}
	.font(@size:20px)when(@size>50px),(@size<100px){
		font-size:@size;
	}
}
#main{
	#card>.border(200px,#999,solid);
	#card .background(#111);
	#card > .font(40px);
}
/* 生成的 CSS */
#main{
	border:solid #999 200px;
	background:#111;
	font-size:40px;
}

要点…

  • 比较运算有: > >= = =< <。
  • = 代表的是等于
  • 除去关键字 true 以外的值都被视为 false

数量不定的参数

/* Less */
.boxShadow(...){
	box-shadow:@arguments;
}
.textShadow(@a,...){
	text-shadow:@arguments;
}
#main{
	.boxShadow(1px,4px,30px,red);
	.textShadow(1px,4px,30px,red);
}
/* 生成的 CSS */
#main{
	box-shadow:1px 4px 30px red;
	text-shadow:1px 4px 30px red;
}

方法使用important!

/* Less */
 .border{
     border: solid 1px red;
     margin: 50px;
 }
 #main{
     .border() !important;
 }
 /* 生成后的 CSS */
 #main {
     border: solid 1px red !important;
     margin: 50px !important;
 }

循环方法
官网中的一个 Demo,模拟了生成栅格系统

 /* Less */
 .generate-columns(4);
 .generate-columns(@n, @i: 1) when (@i =< @n) {
   .column-@{i} {
     width: (@i * 100% / @n);
   }
   .generate-columns(@n, (@i + 1));
 }
 /* 生成后的 CSS */
 .column-1 {
   width: 25%;
 }
 .column-2 {
   width: 50%;
 }
 .column-3 {
   width: 75%;
 }
 .column-4 {
   width: 100%;
 }

实战技巧

/* Less */
.ave(@x,@y){
	@ave:((@x+@y)/2);
}
div{
	.ave(16px, 50px);
	padding:@ave;
}
/* 生成的 CSS */
div{
	padding:33px;
}

四.继承 extend是Less的一个伪类 可继承所匹配声明中的全部样式

/* Less */
.animation{
	transition:all .3s ease-out;
	.hide{
		transform:scale(0);
	}
}
#main{
	&:extend(.animation);
}
#con{
	&:extend(.animation .hide);
}
/* 生成的 CSS */
.animation, #main{
	transition;all .3s ease-out;
}
.animation .hide, #con{
	transform:scale(0);
}

all 全局搜索替换

/* Less */
#main{
	width:200px;
}
#main{
	&:after{
		content:"less";
	}
}
#wrap:extend(#main all){}
/* 生成的 CSS */
#main, #wrap{
	width:200px;
}
#main:after, #wrap:after{
	content:"less";
}

五. 导入

导入 less 文件 可省略后缀

import  "main";

reference
使用引入的less文件 但不好编译它
使用@import(reference)导入外部文件 但不会添加 把导入的文件 编译到最终输出中 只引用

/* Less */
@import (reference) "bootstrap.less";
#wrap:extend(.navbar all){}

once
@import语句但默认行为 表明相同但文件只会被导入一次 而随后导入文件的重复代码都不会解析。

@import (once) "foo.less";

multiple
使用@import(multiple)允许导入多个同名文件

/* Less */
.a{color:green};
@import (multiple) "foo.less";
@import (multiple) "foo.less";
/* css */
.a{color:green;}
.a{color:green;}

六. 函数

判断类型

isnumber(#ffo) /* 是否是一个数字 返回boolean类型 */
iscolor(xx)
isurl(xx)

颜色操作

saturate /* 增加一定数值的颜色饱和度 */
lighten /* 增加一定数值的颜色亮度 */
darken /* 降低一定数值的颜色饱和度 */
fade /* 给颜色设定一定数值的透明度 */
mix /* 根据比例混合两种颜色 */

数学函数

ceil /* 向上取整 */
floor /* 向下取整 */
percentage /* 将浮点数转换为百分比字符串 */
round /* 四舍五入 */
sqrt /* 计算一个数的平方根 */
abs /* 计算数字的绝对值 原样保持单位 */
pow /* 计算一个数的乘方 */

七. 其他
注释:

// 只会在less中显示 
/* 会在less和css中显示 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值