Less学习

语法篇

注释

  1. //注释
    这样的注释内容不会被编译到CSS文件中
  2. /*注释*/
    这样的注释内容会被编译到CSS文件中

变量

  1. 定义变量使用@开头
  2. 当定义变量用作CSS值: 直接@变量名
  3. 当定义变量用作CSS属性名、选择器或编译前进行运算: 需要使用语法: @{变量名}
  4. 变量的延迟加载 :less中每个{}都是一个作用域,变量会先在自己的作用域中查找进而向上(作用域链)
@我是less变量;
@w: width;
@h: height;
@wl: 100px;
@selector: #box1;
@result: ~"fuck-@{wl}"; @{selector}{
@{w}: @wl;
@{height}: @result; //height: fuck-100px;
}
/* 上述写法等价于CSS */
#box1{
width: 100px;
height: fuck-100px;
} /* 变量延迟加载示例代码 */
@var: 123;
.box1{
@var: 222; //此时@var = 222
.paper{
@var: 666; //此时@var = 666
three: @var; /*此时@var=3; 参考JS中的变量提升*/
@var: 3;
}
.news{
two: @var; /*此时@var=222; 去上级作用域中找(非同级) 参考JS中的作用域链*/
}
}

映射(Maps)

#colors() {
primary: blue;
secondary: green;
} .button {
color: #colors[primary];
border: 1px solid #colors[secondary];
} //编译为
.button {
color: blue;
border: 1px solid green;
}

@规则嵌套和冒泡

冒泡: @ 规则(例如 @media@supports)可以向后代选择器一样进行嵌套,但是@规则会被放在最前面。

.test{
width: 100px;
@media (min-width: 1200px){
width: 500px;
@media (max-width: 1500px){
width: 1000px;
}
}
@media (min-width: 768px){
width: 666px;
}
} /* 以上less会被解析成CSS如下 */
.test{
width: 100px;
} // 第一个@冒泡
@media (min-width: 1200px){
.test{
width: 500px;
}
}
// 第二个@冒泡
@media (min-width: 1200px) and (max-width: 1500px){
.test{
width: 1000px;
}
}
// 第三个@冒泡
@media (min-width: 768px){
.test{
width: 666px;
}
}

less中的嵌套规则

  1. 后代关系

    #father{.son{}}
    ``` less
    #father{
    .son{
    color: red;
    }
    } /*以上等同于CSS*/
    #father .son{
    color: red;
    }
  2. 伪元素、伪类

    #box1{&:hover{}}
    ``` less
    #box1{
    &:hover{
    color: red;
    }
    } /*以上等同于CSS*/
    #box1:hover{
    color: red;
    }

less中的混合

混合就是将一套规则运用到另一个选择器中

  1. 普通混合

    /*混合规则*/
    .mix{ //这个less混合(样式)会作为类出现在CSS中
    width: 100px;
    height: 100px;
    background: #bfa;
    } .box1{
    .mix;
    } .box2{
    .mix;
    }
  2. 不带参数混合(命名空间和访问符)

    /*混合规则*/
    .mix(){ //这个less混合(样式)不会出现在CSS中
    width: 100px;
    height: 100px;
    background: #bfa;
    } .box1{
    .mix;
    } .box2{
    .mix;
    }

    命名空间和访问符

    #funSet(){
    width: 100px;
    height: 100px;
    border: 1px solid black; .fun1(){ //这个less混合(样式)不会出现在CSS中
    box-sizing: border-box;
    &:hover{
    background-color: red;
    }
    } .fun2(){ //这个less混合(样式)不会出现在CSS中
    display: block;
    }
    } .use{
    #funSet();
    #funSet.fun2(); //相当于调用fun2这个函数
    } //编译后结果
    .use{
    width: 100px;
    height: 100px;
    border: 1px solid black;
    display: block;
    }
  3. 带参数混合

    /*混合规则*/
    .mix(@w){ //这个less混合(样式)不会出现在CSS中
    width: @w;
    height: 100px;
    background: yellowgreen;
    } .box1{
    .mix(100px);
    } .box2{
    .mix(100px);
    }
  4. 带多个参数混合

    @w: 100px;
    @h: 200px;
    @color: greenyellow;
    /*混合规则*/
    .mix(@w,@h,@color){ //这个less混合(样式)不会出现在CSS中
    width: @w;
    height: @h;
    background: @color;
    } .box1{
    .mix(100px,200px,blue);
    } .box2{
    .mix(100px,200px,blue);
    }
  5. 参数带默认值混合

    /*混合规则*/
    .mix(@w:20px){ //这个less混合(样式)不会出现在CSS中
    width: @w;
    height: 200px;
    background: greenyellow;
    } .box1{
    .mix(100px); //修改 @w(width) 默认值
    } .box2{
    .mix(); //不会报错,因为有默认值
    }
  6. 多个参数带默认值混合

    /*混合规则*/
    .mix(@w:20px,@h:20px,@color:#bfa){ //这个less混合(样式)不会出现在CSS中
    width: @w;
    height: @h;
    background: @color;
    } .box1{
    .mix(100px,200px,blue); //修改默认值
    } .box2{
    .mix(); //不会报错,因为有默认值
    } .box3{
    .mix(100px); //修改的是width,即第一个参数
    } .box4{
    .mix(red); //报错 变量是顺序传入的(关键字参数可以解决)
    }
  7. 关键字参数

    /*混合规则*/
    .mix(@w:20px,@h:20px,@color:#bfa){ //这个less混合(样式)不会出现在CSS中
    width: @w;
    height: @h;
    background: @color;
    } .box1{
    .mix(100px,200px,blue);
    } .box2{
    .mix(); //不会报错
    } .box3{
    .mix(@color: pink); //使用关键字不会报错
    }
  8. 匹配模式

    @w:20px;
    @h:20px;
    /*共有规则*/
    .public(){ //这个less混合(样式)不会出现在CSS中
    width: @w;
    height: @h;
    } .box1(id,@color:pink){ //id是匹配模式的特点,相当于标识符
    .public();
    background: @color;
    } .box1(id2,@color:blue){ //id2是匹配模式的特点,相当于标识符
    .public();
    background: @color;
    } // ===== 匹配模式类似于多态(示例是box1的两种形态) ===== //创建一个蓝色的正方形
    .square{
    .box1(id2) //id2是匹配模式的特点,相当于标识符
    }
    //上述less代码等同于CSS如下:
    .square {
    width: 20px;
    height: 20px;
    background: blue;
    }
  9. 匹配模式(改进)

    改进:让混合调用时不需要再调用共有规则[ .public() ]

    @w:20px;
    @h:20px;
    /*共有规则*/
    .box1(@_,@color){ //使用同样名称但是形参写上@_,var1,var2
    width: @w;
    height: @h;
    } .box1(id,@color:pink){ //id是匹配模式的特点,相当于标识符
    //.box1(); //调用时自动加上5-6行代码
    background: @color;
    } .box1(id2,@color:blue){ //id2是匹配模式的特点,相当于标识符
    background: @color;
    } // ===== 匹配模式类似于多态(示例是box1的两种形态) ===== //创建一个蓝色的正方形
    .square{
    .box1(id2) //id2是匹配模式的特点,相当于标识符
    }
    //创建一个黑色的正方形
    .square2{
    .box1(id,black) //id2是匹配模式的特点,相当于标识符
    }
    //上述less代码等同于CSS如下:
    .square {
    width: 20px;
    height: 20px;
    background: blue;
    } .square2 {
    width: 20px;
    height: 20px;
    background: black;
    }
  10. @arguments变量

>  类似于JS中的参数伪数组
    /*共有规则*/
.box1(@1,@2,@3){
border: @arguments;
} .myClass{
.box1(1px,solid,black);
}
//上述less代码等同于CSS如下:
.myClass{
border: 1px solid black;
}

less的运算

less的四则运算( 加减乘除 )可以对 任何的数字、颜色、变量进行运算

  1. 单位以最左侧的单位类型为准
.test{
width: 10em + 2px;
} //编译结果
.test{
width: 12em;
}
  1. 如果单位换算无效或失去意义,则忽略单位。无效的单位换算例如:px 到 cm 或 rad 到 % 的转换
.test{
width: 10em + 2px;
} //编译结果
.test{
width: 2 + 5px - 3cm; // 结果是 2+5-3 = 4 最左边单位是 px;
}
.box1{
width: (100px + 100px); //width: 200px;
} // 可以只有一边带单位
.box1{
width: (100px + 100); //width: 200px;
height: (50 + 50px); //height: 100px;
}

extend延伸/继承

.beExtended{                //用于被外挂功能的CSS样式
box-sizing: border-box;
} .box1{
&:extend(.beExtended all); //加上all会将包括伪类在内一起继承
width: 100px;
height: 100px;
background: pink; .box2{
font-size: 16px;
background: #bfa; &:hover{
width: 200px;
height: 200px;
background-color: yellow;
}
}
} // 上述less等同于CSS如下:
.beExtended,
.box1 {
box-sizing: border-box;
} .box1 {
width: 100px;
height: 100px;
background: pink;
}
.box1 .box2 {
font-size: 16px;
background: #bfa;
}
.box1 .box2:hover {
width: 200px;
height: 200px;
background-color: yellow;
}

less忽略编译(转义)

转义(Escaping)允许你使用任意字符串作为属性或变量值。任何 ~"anything" 或 ~'anything' 形式的内容都将按 原样输出

.box1{
width: (100px + 100px); //该语句会通过less预编译
height: ~"calc(100px + 10px)"; //该语句less不会预编译(原封不动)
}

导入(Import)

相当于将 被引用 的文件 复制 一份放入 引用 文件中

@import "library"; // less文件可以省略后缀
@import "myStyleSheet.css";

看完我的笔记不懂也会懂----less的更多相关文章

  1. 看完我的笔记不懂也会懂----bootstrap

    目录 Bootstrap笔记 知识点扫盲 容器 栅格系统 源码分析部分 外部容器 栅格系统(盒模型)设计的精妙之处 Bootstrap笔记 写在开始: 由于我对AngulaJS的学习只是一个最浅显的过 ...

  2. 看完我的笔记不懂也会懂----AngulaJS

    目录 Angular.js学习笔记 ng-app(指令) ng-model ng-init angular之表达式 双向数据绑定 数据流向的总结 作用域对象 控制器对象 依赖对象与依赖注入 命令式与声 ...

  3. 看完我的笔记不懂也会懂----git

    Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...

  4. 看完我的笔记不懂也会懂----Node.js

    Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...

  5. 看完我的笔记不懂也会懂----javascript模块化

    JavaScript模块化 模块化引子 模块化的历史进化 模块化规范 CommonJS规范 Node.js(服务器端) 下项目的结构分析 browerify(浏览器端) 下项目的结构分析 AMD规范 ...

  6. 看完我的笔记不懂也会懂----MongoDB

    MongoDb数据库学习 - 数据库的分类 - 数据库基本概念 - MongoDB常用指令 - MongoDB的CURD - sort({key:*[1,-1]}).limit(num).skip(n ...

  7. 看完我的笔记不懂也会懂----MarkDown使用指南

    目录 语法 [TOC] 自动生成目录 1. 标题 2. 文本强调 3. 列表 4. 图片 5. 超链接 6. 文本引用 7. 分割线 8. 代码 9. 任务列表 (MPE专属) 10. 表格 11. ...

  8. 看完我的笔记不懂也会懂----ECMAscript 567

    目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...

  9. 看完我的笔记不懂也会懂----Ajax

    Ajax(Asynchronous JavaScript And XML) - 本次学习所用到的插件 - XML - JSON - 关于AJAX - HTTP协议 - AJAX重点之XMLHttpRe ...

随机推荐

  1. Aery的UE4 C++游戏开发之旅(5)字符&字符串

    目录 TCHAR 字符 使用TEXT()宏包裹字符串字面量 转换字符编码 FString 字符串 FString 剖析 FString 使用 FName 字符串 FName 剖析 FName 使用 F ...

  2. F - Courses (学生选课(匈牙利算法模板))

    题目大意:一共有N个学生跟P门课程,一个学生可以任意选一门或多门课,问是否达成: 1.每个学生选的都是不同的课(即不能有两个学生选同一门课) 2.每门课都有一个代表(即P门课都被成功选过) 输入为: ...

  3. B - B Silver Cow Party (最短路+转置)

    有n个农场,编号1~N,农场里奶牛将去X号农场.这N个农场之间有M条单向路(注意),通过第i条路将需要花费Ti单位时间.选择最短时间的最优路径来回一趟,花费在去的路上和返回农场的这些最优路径的最长时间 ...

  4. c++中几种swap

    在c与c++中,有多种办法可以通过函数交换传入的两数的值,但有容易有一些问题产生,因而本文将几种交换方式及容易出错的点进行了分类. 1.传引用这是c++中最常见方式如下: int swap1 (int ...

  5. HDU6434 Count【欧拉函数 线性筛】

    HDU6434 I. Count T次询问,每次询问\(\sum_{i=1}^{n}\sum_{j=1}^{n-1}[gcd(i-j,i+j)=1]\) \(T\le 1e5, n \le 2e7\) ...

  6. uestc 1221 Ancient Go

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status Y ...

  7. 三、Python基本数据类型

    一.基本算术运算(获取的结果是值) 1 a1=10 2 a2=20#初始赋值 3 a3=a1+a2 #结果30 4 a4=a2-a1 #结果10 5 a5=a1*a2 #结果200 6 a6=a2/a ...

  8. Java基础(第二期)

    数据类型扩展以及面试题讲解 整数拓展:进制 int i=10; int i2=010; //八进制0 int i3=0x10; //十六进制0x 0~9 A~F 16 相关进制转换自行学习,用的不多 ...

  9. 左神算法第一节课:复杂度、排序(冒泡、选择、插入、归并)、小和问题和逆序对问题、对数器和递归(Master公式)

    第一节课 复杂度 排序(冒泡.选择.插入.归并) 小和问题和逆序对问题 对数器 递归 1.  复杂度 认识时间复杂度常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数 ...

  10. GitHub new features 2020 All In One

    GitHub new features 2020 All In One Discussions Discussions is the space for your community to have ...