CSS预处理器-Less

目录

  • 一、什么是less
  • 二、基本使用
    • 2.1 基本语法
    • 2.2 变量插值
    • 2.3 延迟加载
    • 2.4 属性名变量
    • 2.5 嵌套
    • 2.6 父选择器
  • 三、混合
    • 3.1 普通混合
    • 3.2 带参数的混合
    • 3.3 命名参数
    • 3.4 @arguments 变量
    • 3.5 匹配模式
  • 四、运算
  • 五、继承
    • 5.1 继承格式
    • 5.2 继承all
  • 六、避免编译
  • 七、命名空间和访问符
  • 八、映射

一、什么是less

~~~~~~       Less(Leaner Style Sheets 精简样式表) 是一种动态样式语言,属于 css 预处理器的范畴,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展,Less 既可以在 客户端 上运行 ,也可以借助 Node.js 在服务端运行。
Less 编译工具:

  • Koala(opens new window)
  • vscode 的 Easy LESS 插件

二、基本使用

2.1 基本语法

  • 多行注释保留
  • 单行注释不被保留在编译生成的 CSS 中
  • @ 声明变量,作为普通属性值使用
/*
多行注释保留
*/
// 单行注释不被保留在编译生成的 CSS 中
@width:100px;
.outer{width: @width+100px;height: @width+100px;border: 1px solid red;.inner{margin: 0 auto;margin-top: 50px;width: 50px;height: 50px;background-color: orange;}
}

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" type="text/css" href="../css/01.css"/>
</head>
<body><div class="outer"><div class="inner"></div></div>
</body>
</html>

2.2 变量插值

  • 变量用于选择器名、属性名、URL、@import语句
/*
变量用于选择器名、属性名、URL、@import语句
*/
@selector:outer;
// 需要添加 {}
.@{selector}{height: 200px;width: 200px;background-color: orange;
}
@property: color;.widget {@{property}: #0ee;background-@{property}: #999;
}
@images: '../img';// Usage
body {color: #444;background: url('@{images}/white-sand.png');
}

@themes: '../../src/themes';// Usage
@import '@{themes}/tidal-wave.less';

2.3 延迟加载

当一个变量被声明多次,会取最后一次的值,并从当前作用域往外寻找变量。

//当一个变量被声明多次,会取最后一次的值,并从当前作用域往外寻找变量。
@var:0;
.outer{@var:1px;.inner{@var:2px;height: 200px;width: 200px;background-color: orange;border: @var solid black;@var:3px;}width: 300 * @var;height: 300 * @var;
}
.outer {width: 300px;height: 300px;
}
.outer .inner {height: 200px;width: 200px;background-color: orange;border: 3px solid black;
}

2.4 属性名变量

您可以很容易地将属性看作是使用$prop语法的变量

// 您可以很容易地将属性看作是使用$prop语法的变量
.outer{width: 200px;height: @width;border: 1px solid black;
}

2.5 嵌套

Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力

//Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力
.outer{width: 200px;height: 200px;border: 1px solid black;@width:50px;@height:50px;.inner1{width: @width;height: @height;background-color: orange;}.inner2{width: @width;height: @height;background-color: red;}
}

2.6 父选择器

在嵌套规则中, & 表示父选择器,常用于给现有选择器添加伪类。

//在嵌套规则中, &表示父选择器,常用于给现有选择器添加伪类。
// 如果没有 &,会被编译成后代选择器 .inner1 :hover。
.outer{width: 200px;height: 200px;border: 1px solid black;margin: 0 auto;position: relative;.inner1{width: 100px;height: 100px;background-color: orange;transition: 0.2s linear;position: absolute;top: 50px;left: 50px;&:hover{box-shadow: 0 0 20px black;}}
}

如果没有 &,会被编译成后代选择器 a :hover。

除此之外,& 还能用于生成重复类名:

//除此之外,& 还能用于生成重复类名:
.box{&-demo{width: 200px;height: 200px;background-color: red;}
}

三、混合

3.1 普通混合

混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方式,可理解为复制粘贴

//混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方式,可理解为复制粘贴。
.test{width: 100px;height: 100px;background-color: orange;
}
.outer{width: 200px;height: 200px;border: 1px solid black;.inner1{.test()}
}
.test {width: 100px;height: 100px;background-color: orange;
}
.outer {width: 200px;height: 200px;border: 1px solid black;
}
.outer .inner1 {width: 100px;height: 100px;background-color: orange;
}

3.2 带参数的混合

  1. 混合带参数,参数需要按顺序传递
    //1.混合带参数,参数需要按顺序传递
    .border1(@width,@style,@color){border: @width @style @color;
    }
    .outer{width: 200px;height: 200px;.border1(1px,solid,black);
    }
    
    .outer {width: 200px;height: 200px;border: 1px solid black;
    }
    
  2. 混合带参数并有默认值
    需注意的是,就算有默认值,也要按顺序传递
//2.混合带参数并有默认值
.border2(@width:2px,@style,@color:red){border: @width @style @color;
}
.outer{.inner1{width: 100px;height: 100px;.border2(1px,solid);}
}

3.3 命名参数

可以在向混合传参是指定参数名称,从而不需要按顺序传入

//可以在向混合传参时指定参数名称,从而不需要按顺序传入
.border1(@width:2px,@style,@color){border: @width @style @color;
}
.outer{width: 200px;height: 200px;.border1(@style:solid,@color:black);
}

3.4 @arguments 变量

@arguments 变量包含了传入的所有参数

//@arguments 变量包含了传入的所有参数
.box-shadow(@x: 0, @y: 0, @blur:20px, @color: #000){box-shadow: @arguments;
}
.outer{height: 200px;width: 200px;border: 1px solid black;.box-shadow(0,0,@color:red);
}

3.5 匹配模式

在多个相同的混合中(参数个数必须相同),匹配特定的混合。

.mixin(dark, @color) {color: darken(@color, 10%);
}
.mixin(light, @color) {color: lighten(@color, 10%);
}
// @_ 表示匹配所有
.mixin(@_, @color) {display: block;
}@switch: light;.class {.mixin(@switch, #888);
}

.class {color: #a2a2a2;display: block;
}

四、运算

计算结果以操作数最左侧的单位类型为准

//计算结果以操作数最左侧的单位类型为准
@conversion-1: 5cm + 10mm; // 6cm
@conversion-2: 2 - 3cm - 5mm; // -1.5cm
@conversion-3: 3.1 * 2cm; // 6.2cm
@conversion-4: 4px / 2; // 4px / 2// conversion is impossible
@incompatible-units: 1cm - 1px; // 0.97354167cm// example with variables
@base: 5%;
@filler: @base * 2; // 10%
@other: @base + @filler; // 15%@color: #224488 / 2; // #112244body{background-color: #112244 + #111; // #223355
}

五、继承

5.1 继承格式

继承可让多个选择器应用同一组属性,最终编译为并集选择器
其性能比混合高,但灵活性比混合低

/*
继承可让多个选择器应用同一组属性,最终编译为并集选择器
其性能比混合高,但灵活性比混合低
*/
.inner1{&:extend(.inner);background-color: orange;
}
.inner{width: 50px;height: 50px;
}
.inner1 {background-color: orange;
}
.inner,
.inner1 {width: 50px;height: 50px;
}

5.2 继承all

可理解为把 all 前的选择器出现的地方全都替换为 extend 前的选择器
即把 .test 替换为 .replacement 生成一个新的选择器应用样式,且不破坏原有的选择器

/*
可理解为把 all 前的选择器出现的地方全都替换为 extend 前的选择器
即把 .test 替换为 .replacement 生成一个新的选择器应用样式,且不破坏原有的选择器
*/
.box.inner1{width: 200px;height: 200px;background-color: orange;
}
.inner2:extend(.inner1 all){}
.box.inner1,
.box.inner2 {width: 200px;height: 200px;background-color: orange;
}

六、避免编译

通过加引号可以避免 Less 编译,直接把内容输出到 CSS 中

//通过加引号可以避免 Less 编译,直接把内容输出到 CSS 中
.outer{width: '200px + 100px';height: 200px;background-color: orange;
}
.outer {width: '200px + 100px';height: 200px;background-color: orange;
}

七、命名空间和访问符

有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(mixins)进行分组。你可以用 Less 更直观地实现这一需求。假设你希望将一些混合(mixins)和变量置于 #bundle 之下,为了以后方便重用或分发:

#bundle() {.button {display: block;border: 1px solid black;background-color: grey;&:hover {background-color: white;}}.tab { ... }.citation { ... }
}

现在,如果我们希望把 .button 类混合到 #header a 中,我们可以这样做:

#header a {color: orange;#bundle.button();  // 还可以书写为 #bundle > .button 形式
}

八、映射

从 Less 3.5 版本开始,你还可以将混合(mixins)和规则集(rulesets)作为一组值的映射(map)使用。

#colors() {primary: blue;secondary: green;
}.button {color: #colors[primary];border: 1px solid #colors[secondary];
}
.button {color: blue;border: 1px solid green;
}

learn more

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/53854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MathType7MAC中文版数学公式编辑器下载安装教程

如今许多之前需要手写的内容都可以在计算机中完成了。以前我们可以通过word输入一些简单的数学公式&#xff0c;但现在通过数学公式编辑器便可以完成几乎所有数学公式的写作。许多简单的数学公式&#xff0c;我们可以使用输入法一个个找到特殊符号并输入&#xff0c;但是对于高…

JavaScript——为什么静态方法不能调用非静态方法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

【Java并发】聊聊对象内存布局和syn锁升级过程

对象存储解析&#xff1a;一个空Object对象到底占据多少内存&#xff1f; 对象内存布局 Mark Word占用8字节&#xff0c;类型指针占用8个字节&#xff0c;对象头占用16个字节。 好了&#xff0c;我们来看一下一个Object对占用多少空间&#xff0c; 因为java默认是开启压缩…

C语言:指针和数组(看完拿捏指针和数组)

目录 数组名的理解&#xff1a; 一维数组&#xff1a; 解析&#xff1a; 字符数组&#xff1a; 解析&#xff1a; 解析&#xff1a; 字符串数组&#xff1a; 解析&#xff1a; 解析&#xff1a; 一级指针&#xff1a; 解析&#xff1a; 解析&#xff1a; 二维数组&a…

iOS导航栏闪屏以及statusBar背景色的更改

1.如果导航栏有卡顿或者闪屏效果出现&#xff0c;多半是因为导航栏背景为透明色所致&#xff0c;可以给导航栏设置主题色&#xff0c;比如已白色为例 self.navigationController.navigationBar.backgroundColor [UIColor whiteColor]; 2.但是即使上述设置后&#xff0c;依然发…

关于cesium中tif文件处理加载在三维地图中得方式

项目场景&#xff1a; 在Gis项目关于tif影像数据是不能直接在地图上面加载,只能通过后端进行处理,或者前端进行处理之后才能叠加到地图上面! 处理方式 1.安装geotiff插件 npm install geotiff -g2.利用插件处理tif文件 import GeoTIFF, { fromBlob, fromUrl, fromArrayBuff…

学习ts(七)泛型

定义 泛型允许我们在强类型程序设计语言中编写代码时使用一些以后才指定的类型&#xff0c;在实例化时作为参数指明这些类型。在ts中&#xff0c;定义函数、接口或类的时候&#xff0c;不预先定义好具体的类型&#xff0c;而在使用的时候在指定类型的一种特性。 例子&#xff…

MinDoc:针对IT团队的文档、笔记系统

作为一名IT从业者&#xff0c;无论是在公司团队中&#xff0c;还是在平时自己写一些笔记、博客等文档&#xff0c;我都习惯使用markdown来进行书写。在使用过许多支持markdown语法的系统或软件&#xff08;如Typora、未知、我来、思源、觅道等&#xff09;后&#xff0c;我总觉…

Adobe After Effects软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Adobe After Effects是一款由Adobe公司开发的数字视觉效果和动态影像处理软件&#xff0c;它被广泛应用于电影、电视、广告、游戏等领域。After Effects可以与其他Adobe软件如Photoshop、Illustrator、Premiere等无缝结合&#…

neo4jd3拓扑节点显示为节点标签(自定义节点显示)

需求描述&#xff1a;如下图所示&#xff0c;我的拓扑图中有需要不同类型的标签节点&#xff0c;我希望每个节点中显示的是节点的标签 在官方示例中&#xff0c;我们可以看到&#xff0c;节点里面是可以显示图标的&#xff0c;现在我们想将下面的图标换成我们自定义的内容 那…

什么是NetDevOps

NetDevOps 是一种新兴的方法&#xff0c;它结合了 NetOps 和 DevOps 的流程&#xff0c;即将网络自动化集成到开发过程中。NetDevOps 的目标是将虚拟化、自动化和 API 集成到网络基础架构中&#xff0c;并实现开发和运营团队之间的无缝协作。 开发运营&#xff08;DevOps&…

SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

在上一篇文章讲述zuul的时候&#xff0c;已经提到过&#xff0c;使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。 一、简介 在分布式系统中&#xff0c;由于服务数量巨多&#xff0c;为了方便服务配置文件统一管理&#xff0c;实时更新&#xff0c;所以需…

kafka常用命名

kafka服务启动 $KAFKA_HOME/bin/kafka-server-start.sh -daemon config/server.properties 创建Topic $KAFKA_HOME/bin/kafka-topics.sh --create --topic test0--zookeeper 127.0.0.1:2181 --config max.message.bytes12800000 --config flush.messages1 --partitions 5 …

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮

目录 0.1 效果展示 0.2 实现步骤 1 数据准备 2 属性查询 2.1 射线检测 2.2 获取FeatureID 2.3 属性查询 2.4 属性显示 3 单体高亮 3.1 构建材质参数集 3.2 材质参数设置 3.3 添加Cesium Encode Metadata插件 3.4 从纹理中取出特定FeatureId属性信息 3.5 创建…

UE4 材质学习笔记

CheapContrast与CheapContrast_RGB都是提升对比度的&#xff0c;一个是一维输入&#xff0c;一个是三维输入&#xff0c;让亮的地方更亮&#xff0c;暗的地方更暗&#xff0c;不像power虽然也是提升对比度&#xff0c;但是使用过后的结果都是变暗或者最多不变&#xff08;值为1…

Fedora Linux 的家族(三):实验室

导读本文将对 Fedora Linux 实验室版本进行更详细的介绍。 根据个人需求&#xff0c;每个人使用计算机的方式都不同。你可能是一位设计师&#xff0c;需要在计算机上安装各种设计软件。或者你可能是一位游戏玩家&#xff0c;所以需要一个支持你喜欢的游戏的操作系统。有时候我们…

骨传导耳机哪款比较好,几款骨传导耳机品牌推荐

相对于传统耳机&#xff0c;骨传导耳机的佩戴方式更加舒适。传统耳机需要插入耳道&#xff0c;可能会造成不适甚至痛感&#xff0c;而骨传导耳机则不需要直接接触耳朵&#xff0c;大大提高了佩戴的舒适度。并且骨传导耳机可以实现外界环境的感知。传统耳机会将耳朵与外界隔绝&a…

国际版阿里云/腾讯云CDN装备运用教程:加快网站拜访速度

阿里云CDN装备运用教程&#xff1a;加快网站拜访速度 本文旨在为读者供给一个关于阿里云CDN的简要教程。咱们将介绍阿里云CDN的基本概念、资源加快过程、同步资源设置以及与阿里云OSS目标存储的结合。期望经过这篇教程&#xff0c;读者能够更好地了解和利用阿里云CDN服务&…

centos7设置静态IP地址

安装完成系统后&#xff0c;接下来就是配置静态IP地址&#xff0c;如下&#xff1a; 进入编辑模式vim /etc/sysconfig/network-scripts/ifcfg-ens33 文件名不一定是ifcfg-ens33&#xff0c;到/etc/sysconfig/network-scripts下面找下是哪个文件 修改 &#xff1a; BOOTPROTO…

在驱动中创建sysfs接口、procfs接口、debugfs接口

前言 在一些linux开发板中&#xff0c;经常可以看到通过echo的方式来直接控制硬件或者修改驱动&#xff0c;例如&#xff1a; //灯灭 echo 0 >/sys/class/leds/firefly:blue:power/brightness //灯亮 echo 1 >/sys/class/leds/firefly:blue:power/brightness 这是怎么…