Less 概览

news/2024/4/20 9:10:39/文章来源:https://blog.csdn.net/qq_41800366/article/details/127057584

文章目录

  • 1. 变量
  • 2. Mixins
  • 3. 嵌套
  • 4. @规则的嵌套和冒泡
  • 5. 运算符
  • 6. 转义
  • 7. 函数
  • 8. 命名空间和访问器
  • 9. Map
  • 10. 作用域
  • 11. 注释
  • 12. import

Less(Leaner Style Sheets)是 CSS 可向后兼容的扩展。因为 Less 和 CSS 很像,同时 Less 仅是对 CSS 进行一些便捷性的扩展,所以学习它很容易。

Less 到底为 CSS 添加了些什么?这里做快速的概述。

1. 变量

less 支持变量,变量用 @ 作为前缀进行声明,如下:

@width: 10px;
@height: @width + 10px;#header {width: @width;height: @height;
}

对应的 css 将是如下结果:

#header {width: 10px;height: 20px;
}

2. Mixins

Mixins 是一种将包含一组属性的 css 规则集的所有规则 ”混合“ 到另一个 css 规则集中。如下示例:

可以理解为一种复用规则集的方式

现有 .bordered 规则集:

.bordered {border-top: dotted 1px black;border-bottom: solid 2px black;
}

期望这个规则集能够直接在其它的规则集里面使用。很简单,只需要将规则集的类名直接放到对应的规则集里即可,如下:

除了类名,id 名也可以作为 mixins

#menu a {color: #111;.bordered();
}.post a {color: red;.bordered();
}

对应的 css 将是如下结果:

.bordered {border-top: dotted 1px black;border-bottom: solid 2px black;
}
#menu a {color: #111;border-top: dotted 1px black;border-bottom: solid 2px black;
}
.post a {color: red;border-top: dotted 1px black;border-bottom: solid 2px black;
}

可以看到,.bordered 对应的规则全部都混合到了对应的规则集中,很好的实现了复用规则集。

3. 嵌套

Less 支持使用嵌套来代替级联,假设我们有以下 CSS:

#header {color: black;
}
#header .navigation {font-size: 12px;
}
#header .logo {width: 300px;
}

可以看到,这里使用了两个后代选择器,重复的写了两遍 #header。在 Less 中,可以使用嵌套的方式来便捷的实现,上面的代码可以写成如下:

#header {color: black;.navigation {font-size: 12px;}.logo {width: 300px;}
}

这样代码不仅更简洁,同时还带有了层级结构,这个层级结构还能简介的表达出 HTML 的部分结构。

除此之外,嵌套之下,还可以使用 & 表示当前的父级选择器,例如:

.item {color: #fff;&--active {color: #ccc;}
}

此时的 & 代表 .item,因此生成的 css 如下

.item {color: #fff;
}
.item--active {color: #ccc;
}

4. @规则的嵌套和冒泡

什么是 @规则,其实就是诸如 @media @supports 一类的规则

@media 或 @supports 等规则同样支持嵌套,方式与选择器相同。

嵌套的@规则将提升到顶层,提升之后,在同一规则集中的其它规则的相对顺序将保持不变。 这在 Less 中称为冒泡。例如:

.component {width: 300px;@media (min-width: 768px) {width: 600px;@media  (min-resolution: 192dpi) {background-image: url(/img/retina2x.png);}}@media (min-width: 1280px) {width: 800px;}
}

生成的 css 如下,可以看到,所有的 @media 都提升到了顶层,同时,对应的顺序也是保持不变的。

.component {width: 300px;
}
@media (min-width: 768px) {.component {width: 600px;}
}
@media (min-width: 768px) and (min-resolution: 192dpi) {.component {background-image: url(/img/retina2x.png);}
}
@media (min-width: 1280px) {.component {width: 800px;}
}

5. 运算符

  1. 基础运算符

    支持 + - * / 运算符,支持对任何数字、颜色值或变量进行运算。

    同时,在使用 + -运算前,还会对数字所带的单位进行转换,如果支持转换,会将单位转换再进行运算,例如 1dm + 10cm + 100mm,得到的结果为 3dm,如果不支持转换,那么将直接对数字进行运算并将其单位设置为 px,例如 1cm + 2%,得到的结果为 3px

    // 单位可转换时,会将其转换后相加
    @conversion-1: 5cm + 10mm; // 结果为 6cm
    @conversion-2: 2 - 3cm - 5mm; // 结果为 -1.5cm// 单位不可转换时
    @incompatible-units: 2 + 5px - 3cm; // 结果为 4px// example with variables
    @base: 5%;
    @filler: @base * 2; // result is 10%
    @other: @base + @filler; // result is 15%
    

    / * 运算符不会进行单位转换,因为在大多数情况下转换是没有意义的 ,Less 将直接对数字进行操作,并将 “已明确声明的单位” 作用于结果,如下:

    @base: 2cm * 3mm; // 结果为 6cm
    

    还支持颜色值的算术运算:

    @color: (#224488 / 2); // 结果为 #112244
    background-color: #112244 + #111; // 结果为 #223355
    

    因为 #111 的完整表达为 #111111

    从 Less 4.0 开始,使用 / 运算符时需要添加括号,否者将不会进行运算。

    @color: #222 / 2; // 结果为 `#222 / 2`,不会进行运算
    background-color: (#FFFFFF / 16); // 结果为 #101010
    

    因为 #FFFFFF 为 HEX 值,FF / 16 就为 10

  2. calc() 表达式

    Less 支持 calc() 表达式,同时为了兼容 CSS,calc() 不会进行运算,但支持变量。

    @var: 50vh/2;
    width: calc(50% + (@var - 20px));  // 结果为 calc(50% + (25vh - 20px))
    

6. 转义

Less 支持直接使用字符串作为属性值或者变量值,仅需要用引号将字符串包裹起来并在前面加上 ~ ,如: ~"anything"~'anything',这样 anything 将原样使用。

@min768: ~"(min-width: 768px)";
.element {@media @min768 {font-size: 1.2rem;}
}

结果如下:

@media (min-width: 768px) {.element {font-size: 1.2rem;}
}

从 Less 3.5 开始,还可如下简写:

@min768: (min-width: 768px);
.element {@media @min768 {font-size: 1.2rem;}
}

从 Less 3.5 开始,许多之前需要 “引号” 的情况都不需要了。

7. 函数

Less 提供了大量的函数,可用于转换颜色、操作字符串和进行数学运算等。

可以直接在 Less 中使用,无需引入,如下使用,具体的函数作用不在这里进行说明,后续会有单独的章节:

@base: #f04615;
@width: 0.5;.class {width: percentage(@width); // returns `50%`color: saturate(@base, 5%);background-color: spin(lighten(@base, 25%), 8);
}

结果如下:

.class {width: 50%;color: #f6430f;background-color: #f8b38d;
}

8. 命名空间和访问器

有时,为了更好的组织、管理或者分发,可能希望对 mixin 规则集进行分组。 在 Less 中可以很简单地做到这一点。

例如,期望在 #bundle 下封装一些 mixin 和变量,以供复用或分发:

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

Now if we want to mixin the .button class in our #header a, we can do:

假设期望在 #header a 中混合 .button 这个规则集,可以直接调用 #bundle.button(),如下:

#header a {color: orange;#bundle.button();  // 也可以写成 #bundle > .button
}

如此,生成结果如下:

#header a {color: orange;display: block;border: 1px solid black;background-color: grey;
}
#header a:hover {background-color: white;
}

注意:如果不希望它 #bundle 出现在您的 CSS 输出中,请务必在命名空间后加上 (),即 #bundle()

9. Map

从 Less 3.5 开始,minxs 和规则集还支持使用映射,如下:

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

结果如下:

.button {color: blue;border: 1px solid green;
}

10. 作用域

Less 中的作用域与 CSS 中的作用域非常相似。 使用变量或者 mixin 时,会先查找最近的作用域,则查找父作用域。

@var: red;#page {@var: white;#header {color: @var; // white}
}

与 CSS 自定义属性一样,mixin 和变量定义不用非得放在引用它们的行之前。 所以下面的 Less 代码和前面的例子是一样的:

其实个人觉得这样挺不好的,推荐还是放在顶行

@var: red;#page {#header {color: @var; // white}@var: white;
}

11. 注释

单行和多行注释都支持:

/* 多行* 注释 
*/
@var: red;// 单行注释
@var: white;

12. import

完美地支持 import, 支持导入 .less .css 文件,导入 Less 文件时,其中的所有变量都将直接可用。 当导入 Less 文件时, .less 文件扩展名可选。

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

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

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

相关文章

后台系统接入udesk在线客服(vue前端方式)

SDK最舒服的一点就是买来服务,直接Ctrl CV脚本进项目基本就能完成目标功能,要做的无非就是自定义属性的添加。 楼上项目组用的是java后端接入,我这儿是vue前端接入,做法略有不同。 简单点做就是复制上面script标签内代码到index.h…

关于SignalR的内容延续:1.协商协议 2.分布式部署

既然项目中用到了,那就搞搞清楚,搞不懂就死 : > 前置内容: 长轮询问题在ABP中的解决方案,SignalR_董厂长的博客-CSDN博客 “SingalR是对webSocekt的封装” ,这句话是片面的。 因为: SignalR支持多…

vue-----组件通信/传值

一 父子组件通信分为父给子传和子给父传 父给子传: 1.在子组件标签中写传入的值 2.在子组件内使用props接收父组件传递的值。 子给父传: 1.在子组件内部使用$emit发射自定义事件和传递给父组件的值 2.在父组件内声明自定义事件接受参数 二 兄弟组件…

真无线蓝牙耳机哪款音质最好?真无线蓝牙耳机音质排行榜

随着蓝牙技术的飞速发展,很多耳机的质量和质量都很好。喜欢音乐的人,往往会沉迷于这种美妙的感觉,也正是因为如此,他们才会对音质有更高的要求。除了音质之外,还有很多新的特性,例如主动降低噪音、声音操控…

全流程调度

目录 Azkaban 配置mysql 配置 Executor Server 配置Web Server Sqoop导出脚本 Azkaban 安装azkaban并改名 配置mysql 启动 [doudouhadoop102 ~]$ mysql -uroot -p123456登陆 MySQL,创建 Azkaban 数据库 mysql> create database azkaban;设置密码有效长度 …

一文入门Qt Quick

很高兴可以来到这一章,终于可以开始讲讲最近几年Qt的热门技术Quick这一块了。希望通过这个比较简短的例子可以带领有兴趣的朋友快速跨过Qt Quick的入门这道槛!以下内容为本人的著作,如需要转载,请声明原文链接 微信公众号「englyf」https://www.cnblogs.com/englyf/p/16733…

m基于matlab的光通信的信道估计,均衡,抑制papr误码率仿真,对比ZF,RLS,MMSE三种算法(包括matlab仿真录像)

目录 1.源码获取方式 2.算法描述 3.部分程序 4.部分仿真图预览 1.源码获取方式 使用版本matlab2013b 获取方式1: 点击下载链接(解压密码C123456): m基于matlab的光通信的信道估计,均衡,抑制papr误码…

libxml编译时问题解决记录

在对libxml进行模糊测试时,需要先将其拉去并进行编译,可参考此链接:magma本地编译 或者直接参考这个链接:magma编译libxml2 然而在编译的过程中,拉去完libxml2执行到这一句时报错如下: configure.ac:42: e…

Python骚操作,实现驾考自动答题,这就直接满分了?

Python骚操作来了~ 用Python来实现科目一/四自动答题,100分不要太简单! 最初是表弟最近想买车,但是驾照都没有,买什么车,只能先考驾照~ 看他在网页上练习题目慢吞吞的,我就看不下去了,直接给他…

《数据结构》队列及其经典面试题

前言 上一篇讲了栈和栈的经典面试题,链接如下: 栈与栈的经典面试题 其实栈和队列是一码事,都是对只能再线性表的一端进行插入和删除。 因此,其实栈和队列可以互相转换! 一、队列的特点 先进先出的数据结构&#…

Android系统安全 — 2.0-移动终端栈溢出的保护机制设置

简介 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险。例如 NX/DEP、 ASLR(PIE)、CANARY、FORTIFY、RELRO 等手段。 栈保护 1.NX/DEP Linux 和 Windows 平台都支持对非可执行代码的保护,在 Linux 平台中被称为…

【Mybatis框架】初识Mybatis

CSDN话题挑战赛第2期 参赛话题:学习笔记 MyBatis1、MyBatis简介1.1、MyBatis历史1.2、MyBatis特性2. 搭建MyBatis2.1 创建一个Maven项目2.2 在项目下新建我们的MyBatis项目2.3 引入依赖2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.…

AWS 中文入门开发教学 34- MySQL@RDS - 准备工作 - VPC子网,安全组,DB子网组,参数组,选项组

知识点 建立RDS MySQL前的准备工作实战演习 VPC子网,安全组,DB子网组,参数组,选项组 VPC子网 Name: deeplearnaws-db-1cCIDR: 172.16.21.0/24 安全组 Name: deeplearnaws-db-sg <- 可以直接使用之前创建的,但生产环境时应只保留3306端口 DB子网组 Name: deeplearnaws-db-su…

JavaScript学习Day008(jQuery操作)

DOM操作分类 DOM操作分为三类 DOM Core&#xff1a;任何一种支持DOM的编程语言都可以使用它&#xff0c;如getElementById() HTML-DOM&#xff1a;用于处理HTML文档&#xff0c;如document.forms CSS-DOM&#xff1a;用于操作CSS&#xff0c;如element.style.color"gree…

【NLP】第12章 检测客户情绪以做出预测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

JavaScript数组与对象

数组对象 「创建数组的两种方式」 1. 字面量方式var arr [1,"test",true];2. 实例化数组对象 new Array() var arr new Array(); 注意&#xff1a;上面代码中arr创建出的是一个空数组&#xff0c;如果需要使用构造函数Array创建非空数组&#xff0c;可以在创建数…

SpringCloud-19-Spring Cloud Hystrix介绍和服务端降级

8 Hystrix&#xff1a;Spring Cloud服务熔断与降级组件 8.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序往往由多个服务组成&#xff0c;这些服务之间相互依赖&#xff0c;依赖关系错综复杂&#xff0c;每个依赖关系在某些时候将不可避免的失败&#xff01; 若一个…

最优化理论与方法2

凸优化问题&#xff1a; 对于最优化问题P&#xff1a; min f(x1, x2 , …,xn) s.t. : gi ( x1 , x2 , … , xn) < 0 , i 1 , … , m hi ( x1 , x2 , … , xn) 0 ,i 1 , … , l 1 . 记可行域为S { x ∈ Rn | gi(x)<0 , i1,…,m , hi(x)0 , i 1 , … , l.} 2.当f(x…

交通流域关键词

关键词&#xff1a; ●交通拥堵&#xff1a;traffic jam 或 traffic congestion ●元胞传输模型&#xff1a;cellular transport model 或 cell transport model(细胞传输模型) ●元胞自动机&#xff1a;cellular automata ●VSL(可变速度限制)&#xff1a;variable speed …

Python3 安装软件出现 cl.exe failed with exit status 2 错误

最近因项目需要&#xff0c;开始深入接触python。遇到的一些环境问题&#xff0c;分享下。 requirements.txt中包含一系列所需组件&#xff0c;部分组件安装会报cl.ext错误。 如错误问题&#xff1a;Python3 安装pycrypto 2.6.1 出现 cl.exe failed with exit status 2 错误 …