Less基础

1. Less入门

1.1 有了 CSS,为什么还需要 Less

  • CSS基本上是设计师的工具,不是程序员的工具。在程序员的眼里,CSS是很头痛的事情,它并不像其它程序语言,比如说PHP、Javascript等等,有自己的变量、常量、条件语句以及一些编程语法,只是一行行单纯的属性描述,写起来相当的费事,而且代码难易组织和维护。

很自然的,有人就开始在想,能不能给CSS像其他程序语言一样,加入一些编程元素,让CSS能 像其他程序语言一样可以做一些预定的处理。这样一来,就有了“CSS预处语言(CSS Preprocessor)”。

  • CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。通俗的说,CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题,例如你可以在CSS中使用变量、简单的逻辑程序、函数等等在编程语言中的一些基本特性,可以让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。

  • CSS预处理器技术已经非常的成熟,而且也涌现出了很多种不同的CSS预处理器语言,比如说:Sass(SCSS)、Less、Stylus、Turbine、Swithch CSS、CSS Cacheer、DT CSS等。如此之多的CSS预处理器,那么“我应该选择哪种CSS预处理器?”也相应成了最近网上的一大热门话题,在Linkedin、Twitter、CSS-Trick、知呼以及各大技术论坛上,很多人为此争论不休。相比过计我们对是否应该使用CSS预处理器的话题而言,这已经是很大的进步了。

到目前为止,在众多优秀的CSS预处理器语言中就属Sass、Less和Stylus最优秀,讨论的也多,对比的也多。相信前端开发工程师会做出自己的选择——我要选择哪款CSS预处理器语言。

1.2 什么是 Less

LESS CSS 是一种动态样式语言,属于 CSS 预处理语言的一种,它使用类似 CSS的语法,为 CSS 的赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS 的编写和维护。

LESS CSS 可以在多种语言、环境中使用,包括浏览器端、桌面客户端、服务端。 说明:本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。

1.3 如何使用Less

1.3.1 命令行

  1. 安装Less

$ npm install -g less
  1. 编译Less文件,输出到指定文件:

$ lessc styles.less styles.css

1.3.2 使用编辑器插件自动编译less文件

vscode中less插件的安装:

扩展中直接搜索easy less安装即可。

1.3.3 在浏览器环境中使用 Less

<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="https://cdn.jsdelivr.net/npm/less@4"></script>

2. Less 初体验

Less 快速入门 | Less.js 中文文档 - Less 中文网

  1. 从官网下载一份 less.js (less.min.js ), 将 less.js(less.min.js)放到 js 目录中

  2. 自己写一个简单的示例 less 文件,命名为:style.less, 内容如下:

    @color:red;
    #header {color: @color;
    }
    h2 {color: @color;
    }

  3. index.html 内容如下:

    <html><head><link rel="stylesheet/less" type="text/css" href="less/style.less"><script src="js/less.min.js" type="text/javascript"></script></head><body><div id="header">这是网页的头部</div><h2>这是标题部分</h2></body>
    </html>

3. Less基础语法

Less(Leaner Style Sheets)一种 CSS 扩展, 不仅向后兼容 CSS语法,它还为现有的 CSS 语法新增了额外的特性。下面我们就来讲述如何使用Less的基础语法。

3.1 注释(Comments)

行注释和块注释:

/* 多行注释-快捷键:shift+alt+a
@var: white;
@var: red;*/
​
​
// 单行注释
// @var: white;
// @var: red;
多行注释会被解释到css文件中,单行注释则不会

3.2 变量(Variables)

3.2.1 变量

变量基本上是每个语言脚本上都会涉及的一个小小知识点,是学好语言脚本的必经之路。LESS 中也可以设置变量,然后通过变量可以改变整个网站的设计风格。良好的掌握 LESS 中变量的用法,是 LESS 的基础。

3.2.2 变量语法

使用方法就是在“@”后添加变量名称然后变量值用冒号“:”链接。

@nice-blue: #5B83AD;
​
#header {color: @light-blue;
}

输出结果:

#header {color: #6c94be;
}

3.2.3 变量的作用域

如果对同一个变量定义两次的话,在当前作用域中最后一次定义的将被使用。这与 CSS 的机制类似,最后一次定义的值会成为这个属性的值。

若定义在嵌套之中,那么这个变量就只能服务于这个嵌套之内的属性了。变量也是没有顺序可言的,只要页面里有,都会按顺序覆盖,按顺序加载。

3.2.4 字符串插值

变量可以用像 @{name} 这样的结构,以类似 ruby 和 php 的方式嵌入到字符串中。

3.3 混合(Mixins)

混合是一种将一组属性从一个规则集引入(混入)到另一个规则集中的方式。 假设我们有以下样式:

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

我们希望在其他规则集内部使用上面这些属性,那么,我们只需要访问我们想要的属性所在类的名称即可,就像下面这样:

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

编译后,.bordered规则集中的属性就会同时出现在#menu a.post a规则集中了(注意,也可以将ID选择器作为混入对象)。

#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;
}

3.4 嵌套(Nesting)

Less给我们提供了嵌套的功能,用来代替级联选择器。假设我们有以下CSS:

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

在 Less 中,我们可以使用下面这种方式编写:

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

这样的代码更简洁, 它模仿了 HTML 的结构。

使用这种方法照样可以在 mixins 中包含伪类(pseudo-selectors)。下面是一个经典的 clearfix 代码,在这里使用 mixins 重写了(& 表示当前选择器的父选择器):

.clearfix {display: block;zoom: 1;
​&:after {content: " ";display: block;font-size: 0;height: 0;clear: both;visibility: hidden;}
}

嵌套指令和冒泡

@media@supports这样的指令可以像选择器一样嵌套。最终指令会被提升到外部,与同一个规则集中的其他元素的相对顺序保持不变。这被称为冒泡。

.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;}
}

编译输出:

.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;}
}

3.5 运算(Operations)

算术运算符可以操作任何数字,颜色,或变量。在进行加、减或比较之前会先将它们的转换成相同的单位。计算结果的单位和左边操作数保持一致。如果单位之间不能转换,或没有意义,则单位会被忽略。不能转换的例子如:px转换成cm或rad转换成%。

// 数字被传换成相同的单位
@conversion-1: 5cm + 10mm; // 6cm
@conversion-2: 2 - 3cm - 5mm; // -1.5cm
​
// 不能转换
@incompatible-units: 2 + 5px - 3cm; // result is 4px
​
// 变量参与运算
@base: 5%;
@filler: @base * 2; // 10%
@other: @base + @filler; // 15%

*/ 操作不会进行单位转换。大多数情况下没有意义,比如,长度乘以长度得面积,而CSS不支持指定面积。

@base: 2cm * 3mm; // result is 6cm

你也可以计算颜色值:

@color: #224488 / 2;  // #112244
background-color: #112244 + #111;  // #223355

然而,你可能会发现Less的颜色函数(专门处理颜色的函数)会更有用。

3.6 转义(Escaping)

转义允许您使用任何任意字符串作为属性或变量值。在~"anything"中的任何东西都是按照原样使用的,除了插值以外没有任何变化。

@min768: ~"(min-width: 768px)";  // 或者 ~'(min-width: 768px)'
​
.element {@media @min768 {font-size: 18px;}
}

编译输出:

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

3.7 函数(Functions)

Less 提供了许多用于转换颜色,处理字符串和进行算术运算的函数。他们在函数参考一节有详细的的介绍。

这些函数使用起来非常简单。在下面的例子中我们使用 percentage 将 0.5 转换为 50%,然后将基础颜色值的饱和度增加了 5%,最后将背景颜色的亮度增加了 25% 之后又将色相值增加 8:

@base: #f04615;
@width: 0.5;
​
.class {width: percentage(@width); // 返回 `50%`color: saturate(@base, 5%);
}

3.8 命名空间和访问器(namespace selectors)

有时候,为了更好地组织代码,你可能会想要将 mixins 进行分组,或包裹起来。在 Less 中做到这一点非常直观,假设你想在 #bundle 下捆绑一些 mixins 和变量,以便稍候复用或者编译输出:

#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
}

注意:如果你不想让命名空间中的代码编译输出到你的CSS中,比如,#bundle .tab,那么在命名空间之后添加一个括号()就可以了。

命名空间中声明的变量,在空间外部是不可用的。但是你可以使用上面的语法引用空间中的 mixins(#bundle > .mixin-name)。因此,你不能这么做:#bundle > @variable-name

3.9 映射(Maps)

从 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;
}

3.10 作用域(Scope)

Less 中的作用域与编程语言中的作用域概念非常相似。首先会在局部查找变量和 mixins,如果没找到,编译器就会在父作用域中查找,依次类推。

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

变量和 mixins 在使用之前不必先定义。因此下面的代码与前面的例子等价:

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

3.11 导入(Importing)

导入工作和预想的一样。你可以导入一个.less文件,然后这个文件中的所有变量都可以使用了。如果导入的是.less文件,则文件的扩展名是可选的。

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

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

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

相关文章

高性能网络SIG月度动态:自研 IPPROTO_SMC 贡献 Linux 社区,virtio 增加多项优化

高性能网络 SIG&#xff08;Special Interest Group&#xff09; &#xff1a;在这个万物互联的时代&#xff0c;云上的网络通信效率对各种服务至关重要&#xff0c;高性能网络兴趣组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术&#xff0c;结合软硬件一体化的思想&#xf…

【每天学会一个渗透测试工具】Nessus安装及使用指南

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 其他扫描工具&#xff1a; AWVS和Xray&#xff1a;应用漏洞扫描工具 fscan&#xff1a;虽然能扫主机&#xff0c;但比较老了…

01- ES6语法

1.ES6相关概念 1.1 什么是ES6 1.1.1 简介 ES6&#xff0c; 全称 ECMAScript 6.0 &#xff0c;是 JavaScript 的下一个版本标准&#xff0c;2015.06 发版。 ES6 主要是为了解决 ES5 的先天不足&#xff0c;比如 JavaScript 里并没有类的概念&#xff0c;但是目前浏览器的 Ja…

Linux、Windows安全加固

为了减少系统被黑客入侵&#xff0c;对操作系统的安全加固是网络安全和主机安全必不可少的一部分。 一、Linux安全加固 1.不使用默认的ssh端口&#xff0c;修改默认ssh22端口号 sudo vim /etc/ssh/ssh_config 去掉#注释&#xff0c;修改端口号并保存 2.关闭不必要的系统服务…

日常学习记录

1、力扣sql 15题 2、八股 回顾java基础 3、sql网课还差一节

pip install 安装 torch cuda 11.8 cu118

默认安装&#xff0c;速度比较慢 pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 百度了一下&#xff0c;有推荐这么改的&#xff0c;速度还是慢&#xff0c;因为还是转到官网 pytorch.org pip install torch torchvisi…

数据库设计规范总结

数据库设计规范总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 数据库设计规范是指在设计数据库时应该遵循的一系列规则和标准&#xff0c;旨在提高数据库…

【ajax基础03】常用ajax请求方法和数据提交以及axios错误处理

一&#xff1a;请求方法 什么是请求方法&#xff1a; 浏览器对服务器资源&#xff0c;要执行的操作 常见请求方法如下 二&#xff1a;axios中应用 语法格式&#xff1a; method:为请求方法&#xff0c;默认情况下为get&#xff08;获取数据&#xff09; data&#xff1a;…

技术革新| 卓翼飞思受邀出席2024士兵智能装备与技术学术大会

6月14日&#xff0c;由中国兵器装备集团智元研究院/智元国家重点实验室、中国兵工学会主办的 “2024士兵智能装备与技术学术大会” 在杭州隆重召开。卓翼智能应邀出席本次大会&#xff0c;并发表了题为《新概念飞行器及多智能体集群仿真系统研究》的演讲报告。 本次大会以“智能…

Centos8.5安装mysql8.0

1.检查是否有安装mysql数据库&#xff08;如果有mysql或者mariadb数据库&#xff0c;则卸载&#xff09; [rootmyhost ~]# rpm -qa |grep mysql [rootmyhost ~]# rpm -qa | grep mariadb [rootmyhost ~]# ll /etc/my.cnf ls: 无法访问/etc/my.cnf: No such file or directory…

mumu 模拟器如何模拟指纹识别?

最近在帮朋友解决一些任务时&#xff0c;有些比较复杂的任务需要批量使用模拟器&#xff0c;但是模拟器存在一个缺点&#xff0c;就是缺少很多物理功能&#xff0c;比如说陀螺仪、温度传感器和生物识别模块等等&#xff0c;但是有些任务是需要这些功能的。没有办法&#xff0c;…

大模型日报2024-06-18

大模型日报 2024-06-18 大模型资讯 大模型产品 Olvy 3.0&#xff1a;AI加速客户反馈分析 摘要: Olvy 3.0推出AI自动监听和智能标签功能&#xff0c;通过Google Meet集成轻松提取洞察&#xff0c;贴近客户&#xff0c;激发同理心。 PlantIdentify-免费植物识别应用 摘要: PlantI…

Vue3、Element Plus使用v-for循环el-form表单进行校验

在开发中遇到了这样一个需求 有一个form是通过v-for生成出来的&#xff0c;并且数量不确定&#xff0c;每个表单中的字段都需要做校验&#xff0c;就将自己的解决方法记录了下来。 完整代码如下 <template><div class"for-form"><el-button type&quo…

不容小觑的“白纸黑字”:银行重空凭证的风险与防控

一、定义与重要性 定义&#xff1a; 银行重空凭证&#xff0c;也称为重要空白凭证&#xff0c;是银行专业术语&#xff0c;指银行印制的无面额、经银行或单位填写金额并签章后&#xff0c;即具有支取款项效力的空白凭证。 重要性&#xff1a; 它是银行资金支付的重要工具&a…

秋招突击——6/16——复习{(单调队列优化DP)——最大子序和,背包模型——宠物小精灵收服问题}——新作{二叉树的后序遍历}

文章目录 引言复习&#xff08;单调队列优化DP&#xff09;——最大子序和单调队列的基本实现思路——求可移动窗口中的最值总结 背包模型——宠物小精灵收服问题思路分析参考思路分析 新作二叉树的后续遍历加指针调换 总结 引言 复习 &#xff08;单调队列优化DP&#xff09…

华翰传媒集团横店影视基地盛大开业,汇剧视界APP震撼发布

2024年6月1日上午&#xff0c;横店影视华翰传媒集团携手腾烨影视隆、明艺影视重举办了横店影视基地的开业庆典。这一盛事不仅标志着华翰传媒集团在影视行业发展的重要里程碑&#xff0c;更彰显了其深耕影视产业、致力于打造高质量影视内容的决心与目标。 活动盛况空前&#xff…

企业中面试算法岗时会问什么pytorch问题?看这篇就够了!

如果要面试深度学习相关的岗位&#xff0c;JD上一般会明确要求要熟悉pytorch或tensorflow框架&#xff0c;那么会一般问什么相关问题呢&#xff1f; 文章目录 一. 基础知识与概念1.1 PyTorch与TensorFlow的主要区别是什么&#xff1f; 1.2 解释一下PyTorch中的Tensor是什么&…

虹软ArcSoft—真正离线免费的人脸识别SDK

虹软ArcSoft—真正离线免费的人脸识别SDK 高级功能收费 还是很好滴 人证核验功能是C/C的SDK&#xff0c;需要封装为C#&#xff0c;然后暴露为Restful API使用

Linux 网络总是断开问题

环境&#xff1a;华为欧拉 OpenEuler 24 LTS 版本 现象&#xff1a;配置网络后可以连接&#xff0c;但是使用一段时间后自动断开。 问题解决&#xff1a; 系统的 NetworkManager 与 network.service 冲突导致。 1. 关闭并禁用 NetworkManager systemctl stop NetworkManag…

Ardupilot开源代码之ExpressLRS性能实测方法

Ardupilot开源代码之ExpressLRS性能实测方法 1. 源由2. 测试效果3. 测试配置4. 总结5. 参考资料6. 补充 1. 源由 之前一直在讨论ExpressLRS性能的问题&#xff0c;有理论、模拟、实测。 始终缺乏完整的同一次测试的测试数据集&#xff0c;本章节将介绍如何在Ardupilot上进行获…