一、介绍


Less (Leaner Style Sheets 简洁的样式表) 是一门向后兼容的 CSS 预处理语言,它扩展了CSS 语言。

less is more.

好处:

1、具有部分编程语言的功能,提高编码效率

2、提供模块化

3、结构清晰、易于拓展

4、完全兼容 css

缺点:

1、学习成本提高了些

2、让调试变的复杂起来(但其实有办法解决,不赘述了)


几种 css 预处理语言的诞生先后顺序:

  1. Sass 诞生于 2007 年,Ruby 编写,其语法功能都十分全面,可以说它完全把 CSS 变成了一门编程语言。另外在国内外都很受欢迎,并且它的项目团队很是强大,是一款十分优秀的预处理语言。
  2. Less 诞生于 2009 年,受 Sass 的影响创建的一个开源项目。 它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。
  3. Stylus 诞生于 2010 年,来自 Node.js 社区,语法功能也和 Sass 不相伯仲,是一门十分独特的创新型语言。

二、安装 & 使用


less 即可在客户端运行,也可在服务器端运行。

1、在 Node.js 环境 :

npm install -g less

> lessc styles.less styles.css

2、在浏览器环境 :

<link rel="stylesheet/less" type="text/css" href="styles.less" />

<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.10.0-beta/less.min.js" ></script>

若是 Webpack 的使用者,还需要配合 less-loader。

3、在线 less2css 工具

http://www.matools.com/less

google 上找了好几个类似的工具,只有这个支持一些最新的特性。

三、嵌套(Nesting)


1、基本嵌套

less:

.ant-card-meta {
.ant-card-meta-title {
    font-size: 12px
}
}

css:

.ant-card-meta .ant-card-meta-title {
  font-size: 12px;
}

2、媒体查询嵌套

less:

#main{
@media screen{
@media (max-width:768px){
width:100px;
}
}
@media tv {
width:2000px;
}
}

css:

@media screen and (max-width: 768px) {
#main {
width: 100px;
}
}
@media tv {
#main {
width: 2000px;
}
}

四、变量(Variables)


1、定义变量

例如:可以定义一些全局变量,如网页规范用色。(可提出为一个单独的文件)

less:

@PrimaryColor: blue;    # 网页主色
@SecondaryColor: lightblue;    # 网页副色

2、使用变量

定义的变量可放在选择器、属性、值上。

使用变量的形式分两种:

1、@{var}

2、@var

区别:

1、当选择器、属性时,都用@{var}

2、当值的时候,如果要当字符串类型,就用@{var},如果要原样输出,则直接用@var

但有时候我们想先把变量当成字符串,因为要拼接,拼好后再转成原样输出,则我们可以用~转义(Escaping)

(详细可看下面的例子)

less:

@mySelector: body;
@myProperty: background;
@color: blue; @{mySelector} {
color: @color;
@{myProperty}-color: ~"light@{color}";
@{myProperty}-image: url("../assert/@{color}.png");
}

css:

body {
background-color: red;
background-image: url('../assert/red.png');
}

3、&

& :代表的上一层选择器的名字。

注意:& 跟 变量 的区别是,他只能当选择器,不能当属性和值

less:

#header{
&{
margin:20px;
}
&:after{
content:"Less is more!";
}
&_content{
margin:20px;
}
}

css:

#header {
margin: 20px;
}
#header:after {
content: "Less is more!";
}
#header_content {
margin: 20px;
}

4、变量运算(Operations)

支持+-*/ (加减乘除)。

加减的算术运算符(乘除不会)在运算前会进行单位换算,通常以最左侧操作数的单位类型为准。

(1)可代替 css3 的 calc 函数。

less:

@base-font-size : 12px;
@base-font-size-2 : @base-font-size + 20px; .title {
font-size: @base-font-size-2;
}

css:

.title {
font-size: 32px;
}

(2)也可对颜色进行运算

background-color: #112244 + #111; // 结果是 #223355

5、变量作用域

一句话:就近原则,找不到就一直往父级找。不赘述了。

五、命名空间 & 混合(Mixins)& 继承(extends)


1、命名空间

// 1、会出现在 css 里
.border{
    border:solid 1px red;
} // 2、不会出现在 css 里
.border2(){
    border:solid 1px red;
}

2、基础混合

混合的对象是仅一个层级的选择器。

(1)无参数函数

less:

.border{      //或者.border(),但是会被保留进 css 里
border:solid 1px red;
}
#main{
.border(); //等价于.border
}

CSS:

.border {
border: solid 1px red;
}
#main {
border: solid 1px red;
}
(2)有参数(且有默认参数)方法

less:

.border(@a:10px,@b:50px,@c:30px,@color:#000){
border:solid 1px @color;
box-shadow: @arguments; //指代的是全部参数
} #wrap{
.border(0px,5px,30px,red);
}
#content{
.border(0px,5px);
}
#main{
.border();
}

CSS:

#wrap {
border: solid 1px red;
box-shadow: 0px 5px 30px red;
}
#content {
border: solid 1px #000;
box-shadow: 0px 5px 30px #000;
}
#main {
border: solid 1px #000;
box-shadow: 10px 50px 30px #000;
}
(3)方法的匹配模式

类似多态

(4)方法的条件筛选

可加入 if esle 判断

(5)数量不定的参数

形如 ...

3、高级混合

混合的对象是多个嵌套层级的选择器。

less:

.border() {
color: blue;
.son {
color: red;
.children {
color: yellow;
}
}
}
#main {
.border.son ; //等价于 .border > .son
}

css:

#main {
color: red;
}
#main .children {
color: yellow;
}

4、继承

跟 mixins 功用差不多,可以放在一起比较。

但继承的好处是:减少代码的重复性

5、拓展 - 继承(extend)和混入(mixin)的区别 ?

继承分为:

1、单一继承:

2、多重继承:

  • 规格继承 - 例如 java 的 interface

  • 实现继承 - 例如 ruby 的 mixin

所以,继承强调 I am,Mixin 强调 I can

六、映射(Maps)


映射相当于在命名空间(包括嵌套)里,取某个属性对应的值。

less:

.border() {
color: blue;
border: 1px solid blue;
}
#main {
border: .border[border];
}

css:

#main {
border: 1px solid blue;
}

七、函数(Functions)


Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。这些函数在Less 函数手册中有详细介绍。

八、注释(Comments)


块注释和行注释都可以使用。

九、导入(Importing)


@import "library"; // library.less
@import "typo.css";

拓展:循环导入的情况

这里讨论一个很少会遇到的情况,就是循环导入。

假设有 a.lessb.less ,相互 import,会发生什么?

(1)情况一
# a.less

@import "b";
.test {
color: blue;
} # b.less @import "a";
.test {
color: red;
}

执行 lessc a.less a.css 的结果:

.test {
color: red;
}
.test {
color: blue;
}
(2)情况二
# a.less

.test {
color: blue;
}
@import "b"; # b.less .test {
color: red;
}
@import "a";

执行 lessc a.less a.css 的结果:

.test {
color: blue;
}
.test {
color: red;
}
(3)结论

可以看出 @import 的位置不同,会导致结果也不同。

而且 less 会避免循环导入进入死循环的可能。

十、循环 & 条件判断


下面看一个例子,需求是生成递增的字体大小。

这里其实用到了好几个知识点:变量(及变量运算),命名空间、函数(带参数)、条件判断,最终实现了循环的功能。

less:

@base-fontsize-forloop : 10px;
@out_prex : #out;
.loop(@n) when (@n > 0) {
@{out_prex}-@{n} {
font-size: @base-fontsize-forloop * (@n / 1);
}
//循环调用自身
.loop((@n - 1));
}
.loop(5);

css:

#out-5 {
font-size: 50px;
}
#out-4 {
font-size: 40px;
}
#out-3 {
font-size: 30px;
}
#out-2 {
font-size: 20px;
}
#out-1 {
font-size: 10px;
}

拓展


1、CSS 预处理器 和 CSS 后处理器

共同点:CSS 预处理器CSS 后处理器 都属于 CSS 处理器。

不同点:CSS 预处理器使用特殊的语法来标记需要转换的地方,而 CSS 后处理器可以解析转换标准的 CSS,并不需要任何特殊的语法。

CSS 后处理器的代表就是 PostCSS,PostCSS 是一个平台,其中最常用到的插件就是 autoprefixer


参考资料

官方中文文档

学习Less-看这篇就够了

less 学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. usermod命令、用户密码管理、mkpasswd命令 使用介绍

    第3周第2次课(4月3日) 课程内容:3.4 usermod命令3.5 用户密码管理3.6 mkpasswd命令 3.4 usermod命令 usermod可以修改用户的UID和GID 命令使用格式: ...

  2. (python)查看糗事百科文字 点赞 作者 等级 评论

    import requestsimport reheaders = { 'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; ...

  3. php 图片指定留白叠加缩放

    遇到这样一个需求:原图大小不一,而且留白也大小不一,需要将原图切出来一个核心图,然后将图片左右留白,组成一个其他尺寸的图片.换句话说,原图在新图片中的位置是可以控制的. 这里思路是:先创建一个规定大小 ...

  4. 2019-2020-1 20199304《Linux内核原理与分析》第七周作业

    进程的描述和进程的创建 1.进程描述 1.1操作系统的三大管理功能以及对应的抽象概念: 进程管理 内存管理 文件系统 1.2Linux进程的状态: (1)Linux中进程的状态细分可以分为七种: R运 ...

  5. Composer安装和使用

    Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "packages" ...

  6. 技术谈 | SDN 和 NFV 之间的爱与恨

    部分开发者经常混淆 SDN 和 NFV,无法看清他们的关系.今天,小编搬出华为技术专家的一篇大稿,给大家掰扯掰扯:SDN 和 NFV 究竟是什么关系. ----文/闫长江 什么是 SDN 回到基本的概 ...

  7. [Abp vNext 源码分析] - 13. 本地事件总线与分布式事件总线 (Rabbit MQ)

    一.简要介绍 ABP vNext 封装了两种事件总线结构,第一种是 ABP vNext 自己实现的本地事件总线,这种事件总线无法跨项目发布和订阅.第二种则是分布式事件总线,ABP vNext 自己封装 ...

  8. Docker系列之常用命令操作手册

    目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...

  9. luogu P3805 【模板】manacher算法

    题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入格式 一行小写英文字符a,b,c...y,z组成的字符串S 输出格式 一个整数表示 ...

  10. 2020年深度学习DeepLearning技术实战班

    深度学习DeepLearning核心技术实战2020年01月03日-06日 北京一.深度学习基础和基本思想二.深度学习基本框架结构 1,Tensorflow2,Caffe3,PyTorch4,MXNe ...