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. 关于数位DP的学习

    ---恢复内容开始--- 因为最近做比赛经常会出现数位DP,便尝试着去学学看数位DP. 先给出两篇论文的链接: <数位计数问题解法研究> <浅谈数位类统计问题> 然后也是寻找了 ...

  2. hdu5438 Ponds

    Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submissi ...

  3. Codeforces Round #678 (Div. 2) C. Binary Search (二分,组合数)

    题意:有长度\(n\)的序列,让你构造序列,使得二分查找能在\(pos\)位置找到值\(x\).问最多能构造出多少种排列? 题解:题目给出的\(pos\)是固定的,所以我们可以根据图中所给的代码来进行 ...

  4. Codeforces Round #501 (Div. 3) D. Walking Between Houses (思维,构造)

    题意:一共有\(n\)个房子,你需要访问\(k\)次,每次访问的距离是\(|x-y|\),每次都不能停留,问是否能使访问的总距离为\(s\),若能,输出\(YES\)和每次访问的房屋,反正输出\(NO ...

  5. B-number HDU - 3652

    题意: 找出区间[li,ri]有多少个符合要求的数: 1.这个数里面有13 2.这个数可以被13整除 题解: 这个题目和之前的有点不一样就是这个题目要我们求包含13的(之前做过的都是不包含).但是都差 ...

  6. Python 实现多线程的几种方式

    threading.Thread 模块 继承实现: import threading import time class TestThread(threading.Thread): def __ini ...

  7. K8S(04)核心插件-coredns服务

    K8S核心插件-coredns服务 目录 K8S核心插件-coredns服务 1 coredns用途 1.1 为什么需要服务发现 2 coredns的部署 2.1 获取coredns的docker镜像 ...

  8. 831A- Unimodal Array

    A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. codeforces 6E (非原创)

    E. Exposition time limit per test 1.5 seconds memory limit per test 64 megabytes input standard inpu ...

  10. sqli-libs(4) 双引号报错

    经测试,发现单引号不报错,而双引号却报错了 通过查看源码,发现下图中红色的箭头,如果不知道是什么意思,我们可以复制出来看看是什么含义: <?php$id=1;$id='"' .$id. ...