1.初识less

less作为一门CSS扩展语言,也就是说CSS预处理器。(Leaner Style Sheets)简称less,它只不过是为css新增这些的功能,比如说:变量、函数、作用域等等。它的优点是:更具有维护性、扩展性等,可以降低了维护的成本,根据按这样的话,那么less可以让我们写更少的代码做更多的事情。

和css相比下,css的语法非常简单,而且对开发者来说要求比较低,比较合适小白者,但是遇到有些问题,比如没有这种变量、函数等等,的确还不如less的扩展性,需要写大量的代码,但是看眼中的确没有逻辑的代码,CSS冗余度是比较高的。不方便维护,不利于复用,而且没有计算的能力。

如果对css有基础的话,less很容易上手的。因为css和less区别不大的,反正可以通过编译生成浏览器能识别的css文件。

2.less使用

这个less使用不用复杂,就是新建一个后辍名为less文件即可,然后在less文件使用less语句,当写完less语句编译后就会自动生成多了一个后辍名为css文件即可。

3.less和css简单的语句区别

style.less

style.css

相比一下,还是感觉less语句的代码比较舒服,以上代码内容就是叫嵌套写法,这样的话大大减少了代码量,less代码看起来更加清晰。

4.less语法

4.1变量(variables)

4.1.1普通的变量

变量的定义方式为@,可以赋给变量!

语法:@变量名:值。

less:

// 1.普通的变量

@bgColor:white;

@Height:50rpx;

.contain{

background-color: @bgColor;

}

.row{

height:@Height;

margin-left:@Height;

}

编译后的css:

.contain {

background-color: white;

}

.row {

height: 50rpx;

margin-left: 50rpx;

}

注意:最好尽量用全局变量,避免无法复用!比如我写变量(Height)在contain{}里面,但却row{}里面的变量不存在,导致出错,这是叫局部变量。

4.1.2选择器和属性名

这个选择器和属性名可以均作为变量

语法:@选择器的名:属性名;

// 2.作为选择器和属性名

@Mycontain:width;

.@{Mycontain}{//选择器

height:300rpx;

@{Mycontain}:200rpx;//属性名

}

编译后的css:

.width {

height: 300rpx;

width: 200rpx;

}

4.1.3作为URL

使用时候,使用“ ”将变量的值扩起来,使用同样将变量以@{变量名}的方式使用;

语法:@变量:作路径;

less:

// 3.作为URL

@img-url:"../imgs/idnex";

img{

background-image: url("@{img-url}/shouye.png");

}

编译后的css:

img {

background-image: url("../imgs/idnex/shouye.png");

}

4.1.4延迟加载

什么是延迟加载?变量是延迟加载的,在使用前不一定要预先声明。

语法:@变量1:@变量2;

@变量2:9%;

less:

// 4.延迟加载

.lazy-eval{

width:@var;

}

@var:@a;

@a:9%;

编译后的css:

.lazy-eval {

width: 9%;

}

4.1.5定义多个相同名称的变量时

在定义一个变量两次时,只会使用最后定义的变量,less会从当前作用域向上搜索(比如就是从下往上搜索)。这个行为类似于CSS的定义中始终使用最后定义的属性值。

less:

.class{

@var:1;

@var:2;//选中的搜索

.brass{

@var:2;

three:@var;//结果为three:4;

@var:3;

@var:4;//选中的搜索

}

one:@var;//结果为one:2;

}

编译后的css:

.class {

one: 2;

}

.class .brass {

three: 4;

}

5.1混合(mixins)

5.1.1 普通混合

混合就是一种将一系列属性从一个规则引入(“混合”)到另一个规则集的方式。这个意思是在less中定义的选择器类可以直接放入其他选择器类里面,这种重复使用很强。

less:

//1.普通混合

.bor{

background-color: aqua;

width: 32rpx;

}

.poop{

color:white;

.bor;

}

.boom{

height:200rpx;

.bor;

}

编译后的css:

.bor {

background-color: aqua;

width: 32rpx;

}

.poop {

color: white;

background-color: aqua;

width: 32rpx;

}

.boom {

height: 200rpx;

background-color: aqua;

width: 32rpx;

}

5.1.2不带输出的混合

如果你想要创建一个混合的类,但是我不想让它输出到css的样式并显示。

只要类的名字后面加上括号,就可以实现的,这样不会到css样式中显示!

less:

// 2.不带输出的混合

.mymix{

color:black;

}

.mymix-echa(){//css样式中不显示

background-color: white;

}

.dad{

width: 30rpx;

height:30rpx;

}

编译后的css:

.mymix {

color: black;

}

.dad {

width: 30rpx;

height: 30rpx;

}

在css样式中实现不显示.mymix-echa()类。

5.1.3带选择器的混合

这个带选择器,可以放入选择器。

语法:{&:选择器}

less:

//3.带选择器的混合

.father(){

&:hover{

background-color: white;

font-size:32px;

}

}

.child{//类名字后面多了:hover

.father;

}

.son{//类名字后面多了:hover

.father;

}

编译后的css:

.child:hover {

background-color: white;

font-size: 32px;

}

.son:hover {

background-color: white;

font-size: 32px;

}

5.1.4带参数的混合

带参数就是传递参数。

语法:类的名称(形参){}

less:

// 4.带参数的混合

.son(@width){

width:@width;

}

.dad{

.son(300px);//需要传一个参数进去

}

编译后的css:

.dad {

width: 300px;

}

那如果形参如何使用默认值呢?

形参是可以默认值,这样不需要传递参数,如下:

less:

//5.带参数的混合默认值

.son(@width:200px){

width:@width;

}

.dad{

.son();

}

编译后的css:

.dad {

width: 200px;

}

5.1.5带多个参数的混合

一个组合可以带多个参数,参数之间可以使用分号或者逗号来分割。

比如:.mini(形参1;形参2)这代表是分号;.mini(形参1,形参2)这代表是逗号。

但是建议尽量使用分号来分隔,因为这逗号可以编译为参数分割或者css为列表分割。

(1)如果两个参数,而且每个参数都是逗号分割的列表,最后到分号表示结束:.mini(1,2,3;something, ele);

less:

//6.带多个参数的混合

.mini(@color;@padding:xxx;@margin:2){

color-1:@color;

padding-2:@padding;

margin-3:@margin;

}

.div{

.mini(1,2,3;something, ele);

}

编译后的css:

.div {

color-1: 1, 2, 3;

padding-2: something, ele;

margin-3: 2;

}

分析:在less的.div{.mini(1,2,3;something,ele)}参数只有两个,那么就会传到形参1和形参2,但由于形参3有默认值,所以生成编译后css的结果(如上)。

(2)如果三个参数里面都是逗号来分割,就会传到各种参数:.mini(1,2,3)。

less:

//6.带多个参数的混合

.mini(@color;@padding:xxx;@margin:2){

color-1:@color;

padding-2:@padding;

margin-3:@margin;

}

.div1{

.mini(1,2,3);

}

编译后的css:

.div1 {

color-1: 1;

padding-2: 2;

margin-3: 3;

}

分析:由于参数都是三个,而且采用逗号进行分割,就会传到形参1,形参2,形参3,生成了编译后css的结果(如上)。

(3)如果参数里面有逗号,也有分号,那么会传到第一个参数,也就是说传到形参1:.mini(1,2,3;);

less:

//6.带多个参数的混合

.mini(@color;@padding:xxx;@margin:2){

color-1:@color;

padding-2:@padding;

margin-3:@margin;

}

.div2{

.mini(1,2,3;);

}

编译后的css:

.div2 {

color-1: 1, 2, 3;

padding-2: xxx;

margin-3: 2;

}

分析:多个参数里面有逗号,也有分号,整个多个参数的值就会传到形参1,而且形参2和形参3有默认值,生成了编译后css的结果(如上)。

5.1.6 arguments变量

arguments变量表示可变参数,意思是形参从先到后的顺序。注意:这个是参数值位置必须是一一对应。

less:

//7.arguments变量

.son3(@dd1:20px;@dd2:solid;@dd3:white){

border:@arguments;

}

.div4{

.son3();

}

编译后的css:

.div4 {

border: 20px solid white;

}

6.1匹配模式

当传值的时候定义一个字符,在使用那个一个字符,就调用规则集。

less:

// 8.匹配模式

.border(all,@w){

border-radius: @w;

}

.border{

.border(all,50%);

}

编译后的css:

.border {

border-radius: 50%;

}

7.1得到混合中的变量的返回值

就像调用函数一样的过程。

less:

//9.得到混合中变量的返回值

.ave(@x,@y){

@ave:(@x+@y);

}

.son{

.ave(20px,40px);

width:@ave;

}

编译后的css:

.son {

width: 60px;

}

分析代码过程:

1.首先把二个参数分别为20px和40px传到.ave(@x,@y);

2.在.ave{}里面获取了两个值并进行计算结果,然后给变量@ave;

3.在.son{}中调用了@ave的值;

4.最后生成了编译后css的结果width为60px。

8.1嵌套规则(nested-rules)

8.1.1普通的写法

less:

//10.嵌套规则

.contain{

.dad{

width:30px;

background-color: #fff;

.son{

border-radius: 40px;

}

}

.dad1{

height:300px;

background-color: black;

}

}

编译后的css:

.contain .dad {

width: 30px;

background-color: #fff;

}

.contain .dad .son {

border-radius: 40px;

}

.contain .dad1 {

height: 300px;

background-color: black;

}

less写法结构当然很清晰,后期有利于维护,非常简便。

8.1.2父元素选择器&

表示当前选择器的所有父选择器,使用&符引用选择器的名。

less:

//11.父元素选择器&

.bgcolor{

background: black;

a{

color:#fff;

&:hover{

color:blue;

}

}

}

编译后的css:

.bgcolor {

background: black;

}

.bgcolor a {

color: #fff;

}

.bgcolor a:hover {

color: blue;

}

或者也可以用这个

less:

.contain{

&>p{

color:red;

}

&+.contain{

background-color: black;

}

& div{

width: 300px;

}

}

编译后的css:

.contain > p {

color: red;

}

.contain + .contain {

background-color: black;

}

.contain div {

width: 300px;

}

8.1.3改变选择器的顺序&

如果将当前的选择器名字后面放在&,就会当前的选择器提到父级。

less:

// 12.改变选择器的顺序&

.contain{

h1&{

width:200px;

height:300px;

}

}

#son{

ul{

li{

.contain&{

height:100px;

background-color: #fff;

}

}

}

}

编译后的css:

h1.contain {

width: 200px;

height: 300px;

}

.contain#son ul li {

height: 100px;

background-color: #fff;

}

9.1运算(operations)

任何数值,颜色和变量都可以计算的,less当然会自动推断数值的单位,所以不必每一个值都加上单位。

less:

// 13.运算

.contain{

font-size:300px+200*2;

}

编译后的css:

.contain {

font-size: 700px;

}

10.1 命名空间

如果将一些变量或者混合块一起打包起来,这样可以支持复用性,也可以通过嵌套多层id或者class来实现。

使用#contain()来作为命名空间,而且是在css样式中不会显示#contain()命名空间。

less:

// 14.命名空间

//实例1

#contain(){//加(),表示css不输出

background-color: blue;

.dad{

width:300px;

&:hover{

height:200px;

}

}

.father{

width:100px;

height:200px;

}

}

//实例2

.tiweq(){

color:#fff;

height:200px;

.eitw{

width:100px;

border:200px;

}

}

//到css中显示

.contain1{

background-color: aqua;

#contain>.dad;

}

.contain2{

.tiweq>.eitw;

}

编译后的css:

.contain1 {

background-color: aqua;

width: 300px;

}

.contain1:hover {

height: 200px;

}

.contain2 {

width: 100px;

border: 200px;

}

分析:如果在命名空间中想获取的某样式中,比如想要获取dad{..}模块里面数据的话,那么写#contain>.dad即可,然后到css中就会显示你需要的数据;

另外,最省略就是“>”写法。只要你不写“>”,一样都可以获取数据。

less:

// 14.命名空间

.tiweq(){

color:#fff;

height:200px;

.eitw{

width:100px;

border:200px;

}

}

.cotain3{

.tiweq .eitw;

}

编译后css:

.cotain3 {

width: 100px;

border: 200px;

}

11.1作用域

less中的作用域与编程语言中的作用域概念非常类似。首先会在局部查找变量和混合,如果没找到,编辑器就会在父作用域中查找,以此类推。

less:

//15.作用域

@clolor:#ffffff;

.contain{

width: 50px;

a{

color: @clolor;

}

@clolor:blue;

}

编译后的css:

.contain {

width: 50px;

}

.contain a {

color: blue;

}

12.1引入(importing)

可以引入一个或多个.less文件,然后这个文件中的所有变量都可以在当前的less项目中使用!比如我有一个main.less文件,而且里面有变量,所以想引入这个main.less文件并使用它的变量。

main.less

@baby:300px;

index.less

//16.引入

@import "../main";//引入main.less文件

.contain-qq{

width:@baby;

}

index.css

.contain-qq {

width: 300px;

}

另外可带参数:

//@import "main.less";

//@import (reference) "main.less"; //引用LESS文件,但是不输出

//@import (inline) "main.less"; //引用LESS文件,但是不进行操作

//@import (once) "main.less"; //引用LESS文件,但是进行加工,只能使用一次

//@import (less) "index.css"; //无论是什么格式的文件,都把它作为LESS文件操作

//@import (css) "main.less"; //无论是什么格式的文件,都把它作为CSS文件操作

@import (multiple) "../main.less"; //multiple,允许引入多次相同文件名的文件

@import (multiple) "../main.less"; //multiple,允许引入多次相同文件名的文件

13.1函数库(function)

这个函数库里面很多各种函数,而且内容有点多,有空会补上Less函数库。

金句:不只是学习一门语言,而且要多练习多敲代码,这样才有进步的效果。

欢迎各位大佬评论、点赞和收藏!Thanks

dw main.less php,less基础详解 - Python测试和开发 - OSCHINA - 中文开源技术交流社区相关推荐

  1. java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...

    java基础(2)--运算符详解 自增自减规则 自增自减就是常用的 a = a++ 或者 a = ++a;前者是后缀式,先把a赋值给a,再加一:后者是后缀式,先加一,在赋值给a;而且a++,++a并不 ...

  2. 高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...

    1)如何设计如何扩展 2)什么是高并发 (1)任务:完成某个功能的一个一个目标任务,服务器程序也是不例外的. (2)CPU核心:完成具体任务的,是CPU核心 + 周围的外设(读写磁盘IO.网络IO) ...

  3. java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区

    一.用法 javap [ 选项 ] classes 二.描述 javap命令反汇编一个或多个类文件.它的输出由使用的选项决定.如果没有使用选项,javap命令将打印输出传递给它的类的包, protec ...

  4. python写等腰三角形的性质_杨辉三角—知识点详解 - osc_8cfq8uoa的个人空间 - OSCHINA - 中文开源技术交流社区...

    杨辉三角 杨辉三角(欧洲叫帕斯卡三角)是一个很奇妙的东西,它是我国数学家杨辉在1261年发现的,欧洲的帕斯卡于1654年发现,比我国的巨佬数学家杨辉晚了393年.(在此show一下我的爱国情怀) 铺垫 ...

  5. linux7的mcelog在哪,mcelog用法详解 - osc_bgoqj0sj的个人空间 - OSCHINA - 中文开源技术交流社区...

    手动启动mcelog方法: # mcelog --daemon Run mcelog in daemon mode, waiting for errors from the kernel. 后台服务启 ...

  6. java中0l 1_Java基础笔记1 - osc_0ltyoebk的个人空间 - OSCHINA - 中文开源技术交流社区...

    java 1.一元运算符:只需要一个数据就可以进行的运算符.例如 取反 ! 自增 ++ 自减-- 2.二元 运算符 :需要两个数据才可以进行操作的运算符,例如: 加法 + ,赋值 = 3.三元运算符 ...

  7. oracle虚读,oracle基础 - 若虚夜的个人空间 - OSCHINA - 中文开源技术交流社区

    ##新建表空间 CREATE TABLESPACE 表空间名 LOGGING DATAFILE 'F:\app\Administrator\oradata\swyc.DBF' SIZE 1024M A ...

  8. jdk8銝要onematch_JDK8新特性详解 - 纯粹而又极致的光--木九天 - OSCHINA - 中文开源技术交流社区...

    简介:JDK8的主要新特性六个:Lambda.Stream.Date.新注解.函数编程.并发,前两者主要用于集合中. JDK8函数编程详解(本篇博客就不介绍了,太多了) 1.Lambda演变过程 @D ...

  9. C语言自动类型转换和强制类型转换详解,C语言强制类型转换 - 地狱的烈火的个人页面 - OSCHINA - 中文开源技术交流社区...

    C语言中的类型转换 C语言中的类型转换有两种,自动与强制. 它们都有几种情况,如不同长度的转换:不同类型的转换:还有无符号与有符号数之间的转换.关键是两点,即长度不同时如何转换,在有无符号数参与时如何 ...

最新文章

  1. 初中计算机指导教师意见,初中信息技术教学计划(推荐3篇)
  2. 《零基础看得懂的C语言入门教程 》——(六)轻轻松松了解C语言的逻辑运算
  3. golang,接口的demo01
  4. ubuntu使用git时,终端不显示git分支。
  5. matlab条形指纹拼接,matlab实现的两幅指纹图像的拼接
  6. deepin linux下解决Qt搜狗输入法无法输入中文
  7. FRR BGP 协议分析 3 --- FSM 状态机
  8. 为什么古代皇帝总是治不了腐败?因为拿得越多、越安全
  9. 阿里云天池实验室【Python入门系列】用Pandas揭秘美国选民的总统喜好
  10. 网络子系统33_网桥设备的配置更新
  11. 小米电脑如何把计算机放桌面上,小米电脑怎么把此电脑放到桌面上
  12. 论文阅读|用于不同问题的MADDPG算法框架系列论文汇总
  13. echarts饼图显示比例
  14. [电影]推荐《启示》--完美的玛雅文化背景
  15. 计算机导论部分知识整理
  16. 关于φ与Φ函数与序列中分数个数的讨论
  17. java aes 工具类_Java中的AES加解密工具类:AESUtils
  18. C语言数据结构 (清华大学出版社【严蔚敏版】参考)
  19. 修改tomcat端口号并部署项目
  20. 实验五、异常处理与I/O操作

热门文章

  1. Linux文件管理和xfs文件系统的备份恢复
  2. PROFIBUS光纤模块在污水处理系统中的应用
  3. 自建动态域名服务器,自建简单又实用的动态域名管理系统
  4. DVBT电视卡测试工具BDASample10 v1.1.08.26
  5. 解决Windows 7光驱不读盘,自动弹出的问题
  6. mysql数据备份合理计划_计划备份mysql数据库
  7. Arduino单片机出租车计价器起步价白天黑夜区分LCD1602光电测速
  8. 文章伪原创怎么做(什么是伪原创)
  9. 基于matlab蓝牙跳频系统,基于Matlab软件的蓝牙跳频改进算法
  10. 诺基亚打造智能机双平台 降低微软影响