介绍

Less 是 CSS 的预处理语言之一,为 CSS 增添了变量、Mixin、函数等特性,使CSS更易于维护扩展。

嵌套(Nesting)

.header {
.navgation: {
font-size: 30px;
}
}

编译结果:

.header .navgation: {
font-size: 30px;
}

&符号

&符号用于对父级选择器的引用

.demo {
&:hover {
color: red;
}
}

编译结果:

.demo:hover{
color: red;
}

一个&符号和两个&符号的区别:

一个&符号是对父级选择器的引用,并没有嵌套关系

两个&符号会增加一个demo的层级,即引用了选择器,又增加了嵌套关系

.demo {
&-title {
color: red;
}
}
.demo {
&&-title {
color: red;
}
}

编译结果:

.demo-title {
color: red;
}
.demo.demo-title {
color: red;
}

变量(Variables)

使用@操作符声明变量

@width: 100px;
@height: @width + 100px; #box {
width: @width;
height: @height;
}

编译结果:

#header {
width: 100px;
height: 200px;
}

混入(Mixins)

// 声明一个属性
.border-style{
border: 1px dashed red;
}
// 使用
.demo {
border-style()
}

编译结果:

.demo{
border: 1px dashed red;
}
参数化

可以加默认值,可以不加

// 声明
.border-style(@width: 10px, @type: dotted, @color: red){
border: @width @type @color;
}
//使用
.demo{
.border-style()
}

编译结果:

.demo{
border: 1px dashed red;
}
参数顺序

Mixins中的参数顺序可以不按照特定的顺序来传,可以按照参数名传参

.box-size(@width: 10px, @height: 10px) {
width: @width;
height: @height;
} .demo {
.box-size(@height: 20px);
}

编译结果

.demo {
width: 10px;
height: 20px;
}
!important关键词
.size {
width: 100px;
height: 100px;
}
.demo {
.size()!important;
}

编译结果:

.demo {
width: 100px!important;
height: 100px!important;
}
@argument

@argument 代表调用 Mixins 时传入的所有参数。可以同时处理所有参数

.box-shadow(@x: 0, @y: 0, @blur: 1px, @color: #000) {
-webkit-box-shadow: @arguments;
-moz-box-shadow: @arguments;
box-shadow: @arguments;
} div {
.box-shadow(2px, 5px)
}

编译结果:

div {
-webkit-box-shadow: 2px 5px 1px #000;
-moz-box-shadow: 2px 5px 1px #000;
box-shadow: 2px 5px 1px #000;
}

继承 (Extend)

Extend Less 语法中的一个伪类,可以继承其他样式类的全部样式

  1. Extend 是为了解决样式表中重复的样式,这一点与其它语言中的继承功能相似
  2. Extend 主要用于复用重复的样式类,可附加在选择器上或放置到样式集中
使用&:extend()实现继承
.button {
width: 100px;
height: 50px;
text-align: center;
}
.primary-button{
&:extend(.button);
background-color: #409eff;
}

编译结果:

.button,
.primary-button {
width: 100px;
height: 50px;
text-align: center;
} .primary-button {
background-color: #409eff;
}
继承多个样式类
.a {
color: red;
}
.b {
font-size: 16px;
} .c {
&:extend(.a, .b);
}

编译结果:

.a,
.c {
color: red;
}
.b,
.c {
font-size: 16px;
}
all关键字

不加all的情况下,只继承样式表的第一层,

加了all,可以理解为继承了样式表的所有,进行一个深度的继承

.a {
.b {
font-size: 16px;
}
}
.c{
&:extend(.a all);
}

以上样式是有嵌套结构的,

看下编译结果:

.a .b,
.c .b {
font-size: 16px;
}

接下来看下不加all的编译结果:

.a,
.c {
color: red;
}

对比两者:不加all.c不会继承.a下面嵌套的样式

减小css代码体积

平常我们遇到重复的代码可能会这样写,将.a的样式粘贴到.b中,然后代码成了下面这样:

.a{
color: #fff;
} .b{
color: #fff;
}

使用:extend()

.a, .b{
color: #fff;
}

继承和混入的区别

相同点:两者都可以将classA的样式引入到classB中

不同点:

  • 混入可以带参数调用,缺点是会有冗余代码
  • 继承不会有冗余代码

合并(Merge)

逗号分割

合并结果进行逗号分割

声明一个合并样式函数minxin,并且在需要合并的属性后加上 + ,然后在引入 minxin 后,在被合并的属性后也加上+
.mixin() {
box-shadow+: 0 0 10px 10px #333;
} div {
.mixin();
box-shadow+: 0 0 10px 10px red;
}

编译结果:

div {
box-shadow: 0 0 10px 10px #333, 0 0 10px 10px red;
}
空格分割

合并结果会进行空格分割

使用步骤同逗号分隔,将属性后的符号改为 +_ 即可。

.mixin(){
transform+_: scale(2);
}
div{
.mixin();
transform+_: rotate(15deg);
}

编译结果

div {
transform: scale(2) rotate(15deg);
}

映射(Maps)

// 声明一组map
#colors {
primary: #409eff;
success: #67c23a;
}
// 使用
.demo {
color: #colors[primary]
}

编译结果:

.demo {
color: #409eff;
}

转义字符(Escaping)

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

@min768: ~"(min-width: 768px)";

.demo {
width: 100px;
height: 100px;
background-color: aqua; @media @min768 {
background-color: red;
}
}

编译结果:

.demo {
width: 100px;
height: 100px;
background-color: aqua;
}
@media (min-width: 768px) {
.demo {
background-color: red;
}
}

less 3.5 之后可以简写为:

@min768: (min-width: 768px);

混合守卫(Mixin Guards)

根据条件进行判断

.mixin1 (@width) when (@width > 100px) {
width: @width;
height: 200px;
} .mixin1 (@width) when (@width < 100px) {
width: @width;
height: 100px;
} div {
.mixin1(120px)
}

通过when关键字,进行条件判断。

编译结果:

div {
width: 120px;
height: 200px;
}
条件判断运算符

条件判断的运算符有这几个:>>==<=<

条件逻辑运算符

适用于判断条件两个及以上时

  • 使用逻辑运算符and进行关联,取并集:

类似中的&&

.minix (@width, @height) when (@width > 100) and (@height > 100) { ... }
  • 使用, 运算符模拟or,其中一个成立即可:

类似js中的||

.minix (@width) when (@width > 20%) , (@width < 80%) { ... }
  • 使用not关键字代表否定条件:

类似js中的!

.mixin3 (@width) when not (@b > 10%) { ... }

循环(Loops)

其他语言都是通过for关键字实现循环。但是less中并没有这种语法,二是通过自身调用,递归的方式实现循环

.create-columns(@l, @i: 1) when (@i <=@l) {
.column-@{i} {
width: (@i / @l * 100%);
}
.create-columns(@l, @i + 1)
} .create-columns(4);

编译结果:

.column-1 {
width: 25%;
}
.column-2 {
width: 50%;
}
.column-3 {
width: 75%;
}
.column-4 {
width: 100%;
}

less 常用方法的更多相关文章

  1. 前端开发:Javascript中的数组,常用方法解析

    前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...

  2. Jquery元素选取、常用方法

    一:常用的选择器:(李昌辉) 基本选择器 $("#myDiv") //匹配唯一的具有此id值的元素 $("div") //匹配指定名称的所有元素 $(" ...

  3. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  4. C# Webbrowser 常用方法及多线程调用

    设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...

  5. list,tuple,dict,set常用方法

    Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...

  6. 记录yii2-imagine几个常用方法

    记录yii2-imagine几个常用方法: //压缩 Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)->save(Yii::g ...

  7. DOM常用方法总结

    DOM(Document Object Model:文档对象模型)为javascript中的一部分,它为访问和修改html文档或xml文档提供了一些编程接口,DOM以对象的形式来描述文档中的内容,以树 ...

  8. JSP内置对象及常用方法

    jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...

  9. java中集合类中Collection接口中的Map接口的常用方法熟悉

    1:Map接口提供了将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.Map接口中同样提供了集合的常用方法. 2:由于Map集合中的元素是通过key,value,进行存储的,要 ...

  10. 解析Exception和C#处理Exception的常用方法总结

    在.NET中,异常是指成员没有完成它的名称宣称可以完成的行动.在异常的机制中,异常和某件事情的发生频率无关. 异常处理四要素包括:一个表示异常详细信息的类类型:一个向调用者引发异常类实例的成员:调用者 ...

随机推荐

  1. scala安装及配置

    window 上安装 Scala 1.Scala下载网址:https://www.scala-lang.org/download/ 2.下载后,双击 msi 文件,一步步安装即可,安装过程你可以使用默 ...

  2. 《华为云DTSE》期刊免费下载:10个案例读懂云上架构升级策略

    本文分享自华为云社区<<华为云DTSE>期刊第四期赋能云专刊,赋能云场景下DTSE服务各类开发者的案例分享>,作者:HuaweiCloudDeveloper. 把公司的开发者平 ...

  3. “全栈合一 智慧运维”智和网管平台SugarNMS V9版本发布

    以"管控万物 无所不能 无处不"在为产品创新理念,智和信通打造"全栈式"网络安全运维平台-智和网管平台SugarNMS.立足数字化.智能化.可视化.自动化,整合 ...

  4. union联合体的缺陷

    传统的 union 联合体在 C++ 中虽然提供了一种能够在相同的内存空间内存储多种不同类型的方式,但它也有一些显著的缺陷和限制.这些缺陷让 union 的使用不太安全,尤其是在复杂的程序中.以下是传 ...

  5. 可视化U-Net编码器每层的输出(在已经训练好的模型下展示,并不是初始训练阶段展示)

    想看一下对于一个训练好的模型,其每一层编码阶段的可视化输出是什么样子的.我以3Dircabd肝脏血管分割为例,训练好了一个U-Net模型.然后使用该模型在推理阶段使用,并可视化了每一层编码器. 分割结 ...

  6. ByConity与主流开源OLAP引擎(Clickhouse、Doris、Presto)性能对比分析

    引言: 随着数据量和数据复杂性的不断增加,越来越多的企业开始使用OLAP(联机分析处理)引擎来处理大规模数据并提供即时分析结果.在选择OLAP引擎时,性能是一个非常重要的因素. 因此,本文将使用TPC ...

  7. 04 Transformer 中的位置编码的 Pytorch 实现

    1:10 点赞 16:00 我爱你 你爱我 1401 class PositionalEncoding(nn.Module): def __init__(self, dim, dropout, max ...

  8. web端ant-design-vue-Anchor锚点组件使用小节(1)

    web端ant-design-vue-Anchor锚点组件使用小节.项目开发中如果要实现前端页面平滑滚动到指定的位置,Anchor组件是一个好的选择,灵活且平滑,能满足常见的项目需求.最近开发中幸运的 ...

  9. centos7LDAP服务搭建

    ladp服务搭建 用户名:cn=admin,dc=test,dc=com 密码:123456 1)软件安装yum install openldap openldap-clients openldap- ...

  10. .NET开发者福音:JetBrains官方宣布 Rider 非商用免费开放!

    前言 JetBrains官方前段时间宣布重磅消息,其两款知名IDE应用WebStorm和Rider现已面向社区开放,允许用户免费用于非商业用途.此举旨在支持学习.开源项目开发.内容创作及业余开发等活动 ...