这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
方法的命名空间
作用:让代码更加规范
例:
.card{
background: #723232;
.d(@w:300px){
width:@w;
#a (@h: 300px){
height:@h;//可以使用上一层传进来的方法
}
}
}
#wrap{
#card >.d >#a(100px);//父元素不能加括号
}
#main{
#card .d();
}
#con{
//不得单独使用命名空间的方法
//.d()如果前面没有引入命名空间#card,将会报错
#card;//等价于#card();
.d(20px);//必须先引入#card
م}
#wrap{ height:100px;
}
#main{
width:300px;
#con{
width:20px;
}
要点:
1、在CSS 中 > 选择器,选择的是儿子元素,就是必须与父元素有直接血源的元素。
2、在引入命令空间时,如使用 > 选择器,父元素不能加括号。
3、不得单独使用命名空间的方法 必须先引入命名空间,才能使用其中方法。
4、子方法可以使用上一层传进来的方法
方法的条件筛选
less没有ifelse,可是它有when、whennot以及and
whennot 的意思是“当某物不是某种情况时”,他主要用来生成复杂的条件模式。例如:当A不是B的情况时,可以使用"whennot A is B"。
#card{
//when &&
border(@width,@color,@style) when(@width>100px) and(@color=#999){
border:@style @color @width;
}
//whennot 相当于取反!
.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 (70px);
}
注意点:
比较运算有:
、 >=、 =、 <=、 <。
=代表的是等于
除去关键字 true以外的值都被视为false:
数量不定的参数
如果你希望你的方法接受数量不定的参数,你可以使用...,犹如 ES6 的扩展运算符。
. boxShadow(...){
box-shadow:@arguments;
}
textShadow(@a,...){
text-shadow:@arguments;
}
#main{
.boxShadow(1px, 4px, 30px, red);
.textShadow (1p×, 4p×, 30px, red);
}
方法使用important!
使用方法 非常简单,在方法名后 加上关键字即可。
.border{
border:solid 1px red;
margin:50px;
}
#main{
.border()!important;
/*生成后的 CsS
#main{
border:solid 1px red !important;
margin:50px !important;
}
循环方法
@theme-colors: {
primary: @primary;
success: @success;
info: @info;
warning: @warning;
danger: @danger;
};
each(@theme-colors,{
.rabbit-tag-@{key} {
color: @value;
background-color: rgba(@value, 0.2);
border: 1px solid rgba(@value, 0.35);
.rabbit-tag-close-icon {
&:hover {
color: darken(@value, 10%);
}
}
}
}
)
循环遍历主题颜色,对每一个class名以rabbit-tag为前缀的元素添加样式。
为其中的图标添加hover事件,改变颜色为主题颜色的变暗10%。
属性拼接方法
+_代表的是空格;+ 代表的是逗号。
生成的css:
继承
extend关键字
extend 是 Less 的一个伪类。它可继承所匹配声明中的全部样式。
.animation{
transition: all .3s ease-out;
}
.hide{
transform: scale(0);
}
}
#main{
&:extend(.animation);
}
#con{
&:extend(.animation .hide);
}
.animatn,#main{
transition: all .3s ease-out;
}
.animation .hide , #con{
transform: scale(0);
}
全局搜索替换
使用选择器匹配到的全部声明。
#main{
width: 200px;
}
#main {
&:after {
content:"Less is good!";
}
}
#wrap:extend(#main al1){}
#main,#warp{
width: 200px;
}
#main:after, #wrap:after {
content: "Less is good!";
}
减少代码重复性
从表面看来,extend与方法最大的差别,就是 extend 是同个选择器共用同一个声明,而 方法 是使用自己的声
明,这无疑增加了代码的重复性。
如:
继承的使用要点
1.选择器和扩展之间 是允许有空格的:pre:hover:extend(div pre)。
2·可以有多个扩展:pre:hover:extend(div pre):extend(.bucket tr)-注意这与pre:hover:extend(div pre,.bucket tr)一样。
3,这是不可以的,扩展必须在最后:pre:hover:extend(div pre).nth-child(odd)。
4,如果一个规则集包含多个选择器,所有选择器都可以使用extend关键字。
导入
@import关键字
导入less文件可省略后缀
关键字:@import
#main{
font-size:15px;
}
@import "style";
@import的位置可以任意放置
reference关键字
Less中最强大的特性使用引入的Less文件,但不会编译它。
@import (reference) "bootstrap. less";
once关键字
@import语句的默认行为。这表明相同的文件只会被导入一次,而随后的导入文件的重复代码都不会解析。
@import (once) "foo. less";
@import (once) "foo. less"; //this statement will be ignored
multiple关键字
使用@import(multiple)允许导入多个同名文件。
条件表达式
带条件的混合(前面有提过)
比较运算符:>,>=,=,=<,<
格式:when(){}
.mixin(@a) when(lightness(@a) >= 50% ) {
background-color: black;
}
.mixin(@a) when(lightness(@a) < 50% ) {
background-color: white;
}
.mixin(@a) {
color:@a;
}
. class1 {
. mixin(#ddd);
}
.class2 {
.mixin(#555);
}
.class1{
background: black;
color:#ddd;
}
.class2 {
background: white;
color:#555;
}
类型检测函数
检测值的类型,由less提供的函数,一般搭配when使用
iscolor
isnumber
isstring
iskeyword
isurl
. mixin(@a: # fff; @b: 0) when(isnumber(@b)) {
color: @a;
font-size: @b;
}
.mixin(@a; @b: black) when(iscolor(@b)) {
font-size: @a;
color: @b;
}
单位检测函数
检测一个值除了数字是否是一个特定的单位
ispixel
ispercentage
isem
isunit
.mixin(@a) when(ispixel(@a)) {
width: @a;
}
.mixin(@a) when(ispercentage(@a)) {
width: @a;
}
.class1 {
.mixin(960px);
}
.class2 {
.mixin(95%);
}
.class1 {
width: 960px;
}
.class2{
width: 95%;
}
函数
函数库
less中封装了非常多函数库,例如颜色定义、颜色操作、颜色混合、字符串处理等等。
例如color():用于解析颜色,将代表颜色的字符串转换为颜色值。
body {
color: color("#f60");
background: color("red");
}
body {
color: #ff6600;
background: #ffo000;
}
例如convert():将数字从一种类型(单位)转换为另一种类型
长度单位:m,cm,mm,in,pt,px,pc
时间单位:s,ms
角度单位:rad(弧度),deg(度),grad(梯度),tum(圆)
body {
width: convert(20cm, px);
}
body {
width: 755.90551181px;
}
less还有很多函数,需要自己去官网看文档了解