看完我的笔记不懂也会懂----less
Less学习
语法篇
注释
//注释
这样的注释内容不会被编译到CSS文件中
/*注释*/
这样的注释内容会被编译到CSS文件中
变量
- 定义变量使用@开头
- 当定义变量用作CSS值: 直接@变量名
- 当定义变量用作CSS属性名、选择器或编译前进行运算: 需要使用语法: @{变量名}
- 变量的延迟加载 :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中的嵌套规则
后代关系
#father{.son{}}
``` less
#father{
.son{
color: red;
}
} /*以上等同于CSS*/
#father .son{
color: red;
}
伪元素、伪类
#box1{&:hover{}}
``` less
#box1{
&:hover{
color: red;
}
} /*以上等同于CSS*/
#box1:hover{
color: red;
}
less中的混合
混合就是将一套规则运用到另一个选择器中
普通混合
/*混合规则*/
.mix{ //这个less混合(样式)会作为类出现在CSS中
width: 100px;
height: 100px;
background: #bfa;
} .box1{
.mix;
} .box2{
.mix;
}
不带参数混合(命名空间和访问符)
/*混合规则*/
.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;
}
带参数混合
/*混合规则*/
.mix(@w){ //这个less混合(样式)不会出现在CSS中
width: @w;
height: 100px;
background: yellowgreen;
} .box1{
.mix(100px);
} .box2{
.mix(100px);
}
带多个参数混合
@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);
}
参数带默认值混合
/*混合规则*/
.mix(@w:20px){ //这个less混合(样式)不会出现在CSS中
width: @w;
height: 200px;
background: greenyellow;
} .box1{
.mix(100px); //修改 @w(width) 默认值
} .box2{
.mix(); //不会报错,因为有默认值
}
多个参数带默认值混合
/*混合规则*/
.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); //报错 变量是顺序传入的(关键字参数可以解决)
}
关键字参数
/*混合规则*/
.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); //使用关键字不会报错
}
匹配模式
@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;
}
匹配模式(改进)
改进:让混合调用时不需要再调用共有规则[ .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;
}
@arguments变量
> 类似于JS中的参数伪数组
/*共有规则*/
.box1(@1,@2,@3){
border: @arguments;
}
.myClass{
.box1(1px,solid,black);
}
//上述less代码等同于CSS如下:
.myClass{
border: 1px solid black;
}
less的运算
less的四则运算( 加减乘除 )可以对 任何的数字、颜色、变量进行运算,
- 单位以最左侧的单位类型为准
.test{
width: 10em + 2px;
}
//编译结果
.test{
width: 12em;
}
- 如果单位换算无效或失去意义,则忽略单位。无效的单位换算例如: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的更多相关文章
- 看完我的笔记不懂也会懂----bootstrap
目录 Bootstrap笔记 知识点扫盲 容器 栅格系统 源码分析部分 外部容器 栅格系统(盒模型)设计的精妙之处 Bootstrap笔记 写在开始: 由于我对AngulaJS的学习只是一个最浅显的过 ...
- 看完我的笔记不懂也会懂----AngulaJS
目录 Angular.js学习笔记 ng-app(指令) ng-model ng-init angular之表达式 双向数据绑定 数据流向的总结 作用域对象 控制器对象 依赖对象与依赖注入 命令式与声 ...
- 看完我的笔记不懂也会懂----git
Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...
- 看完我的笔记不懂也会懂----Node.js
Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...
- 看完我的笔记不懂也会懂----javascript模块化
JavaScript模块化 模块化引子 模块化的历史进化 模块化规范 CommonJS规范 Node.js(服务器端) 下项目的结构分析 browerify(浏览器端) 下项目的结构分析 AMD规范 ...
- 看完我的笔记不懂也会懂----MongoDB
MongoDb数据库学习 - 数据库的分类 - 数据库基本概念 - MongoDB常用指令 - MongoDB的CURD - sort({key:*[1,-1]}).limit(num).skip(n ...
- 看完我的笔记不懂也会懂----MarkDown使用指南
目录 语法 [TOC] 自动生成目录 1. 标题 2. 文本强调 3. 列表 4. 图片 5. 超链接 6. 文本引用 7. 分割线 8. 代码 9. 任务列表 (MPE专属) 10. 表格 11. ...
- 看完我的笔记不懂也会懂----ECMAscript 567
目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...
- 看完我的笔记不懂也会懂----Ajax
Ajax(Asynchronous JavaScript And XML) - 本次学习所用到的插件 - XML - JSON - 关于AJAX - HTTP协议 - AJAX重点之XMLHttpRe ...
随机推荐
- 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...
- windows10上下载远程控制软件之后导致windows10亮度调节功能不能使用
出现了通用即插即用监视器就可以了
- C++11 Java基本数据类型以及转换
写在前面: 母语是Java,后来学了C++11,这两个语言的基本数据类型隐式转换不太一样,有点晕,整理一下 整理自网络和书籍,标明出处 C++ 基本数据类型 --http://www.cnblogs. ...
- Codeforces Round #667 (Div. 3) E. Two Platforms (双指针)
题意:有\(n\)个点往下落,你可以在最下面放两个长度为\(k\)的板子,问做多能接到多少个点. 题解:这题给纵坐标\(y\)完全没有用,我们先对横坐标\(x\)排序,然后从左边开始枚举,用\(l[i ...
- win7 & centos7 双系统安装方法
1.准备 1)Centos7镜像 官方:https://www.centos.org/ 阿里镜像:http://mirrors.aliyun.com/centos/ 2)安装windows7系统的电脑 ...
- JVM你了解?
1.谈谈你对JAVA的理解 平台无关性(一次编译,到处运行) GC(不必手动释放堆内存) 语言特性(泛型.lambda) 面向对象(继承,封装,多态) 类库 异常处理 2.平台无关性怎么实现
- hutool学习总结
1. 为什么要学习Hutool的使用 Hutool官网 中文写的已经很清楚了 Hutool是一款强力的工具类.封装了工作开发中一些常见的功能操作.避免重复造轮子,使用它大大提高的开发效率. 2. Hu ...
- VMX - block by NMI和 NMI unblockinig due to IRET 之间的关系
相关SDM章节: 27.2.3- Information About NMI Unblocking Due to IRET 最近收到同事发来的一个问题,即: VMCS 中的 Guest Interru ...
- CF1465-C. Peaceful Rooks
CF1465-C. Peaceful Rooks 预备小知识: Rook(国际象棋中的车). 国际象棋中的棋子.每人有2个,他只能直走,不能斜走,除王车易位外不能越子. -- 来自<百度百科&g ...
- Sublime text 3 中 Package Control安装
安装前 ctrl+shift+p 在命令板中输入PC,如下图表示没安装: 使用ctrl+~调出sublime软件的控制台命令窗口:粘贴运行 import urllib.request,os,hash ...