Less&Sass
1.Less
1)Less简介
Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数,嵌套等功能,让 CSS 更易维护、方便制作主题、扩充。
官网
2)学习Less目的
提升开发效率,减少代码量。
注意:
浏览器不能直接识别Less,必须先编译成CSS。
3)安装Less
通过 npm (node.js 的包管理器),安装Less方法如下:
cnpm i -g less

查看安装是否成功:
lessc -v

tips:
git Bash Here 支持cmd的操作,可以通过右键进入 git Bash here 执行命令。
4)编译
①手动编译
编译:
lessc [less文件.less] [目录] [ 文件名.css]
编译并压缩:
lessc [less文件.less] [目录] [ 文件名.css] -x
②使用插件进行编译(推荐)
安装插件:Easy LESS
点击扩展设置进入 setting.json 配置文件

在setting.json中添加如下代码:
"less.compile": {
"compress": true,/*是否进行压缩处理*/
"sourceMap": false,/*是否生成map(映射文件)文件,如果为true则可以在控制台看到less行数*/
// "out": "${workspaceRoot}\\dist\\css\\",/* 设置编译后的输出路径 为当前项目目录下的dist下的css文件夹下*/
"out":"./dist/css/", /*输出当当前目录下的dist下的css文件夹内*/
// "out":true, /*true:表示编译后输出,输出到当前目录下*/
"outExt": ".css" /*设置编译后的文件的扩展名*/
}, 对less文件进行修改后会自动进行编译并覆盖原css文件。

**注意:**此处的输出目录一般是相对于当前vscode打开项目的作为根目录的,因此当当前项目在其它项目内被打开使,一般会出现输出路径错误。最好将此项目(此文件夹)单独打开。
③使用外部工具进行编译
安装考拉客户端编译工具。
将要编译的CSS文件夹拖放到 考拉中,然后进行编译。当改动less文件时,会自动进行编译。


5)Less中的注释和变量
①注释:
/* 注释 */ 可以被编译
// 注释 不会被编译
②变量
在Less中,可以使用变量,来统一设置一类可以重复使用的值。 使用@符号定义,语法如下:
@变量名: 变量值;注意:
变量与字符串拼接时,变量要用 @{变量名} 。
@imgUrl:"./imgs/1.png";
ul{
background:url("@{imgUrl}");
}6)混合mixin
①不带参数的混合用法
在less中定义一些通用的属性放在一个class中,然后再在另一个样式中调用它。
语法:
.类名{
/* css样式表; */
}
使用:
.类名;less
.overflowtxt{
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.flex-container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
li {
.overflowtxt;
.flex-container;
}css
.overflowtxt {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.flex-container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
li {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}②带参的混合用法
语法:
// 定义
.类名(@变量[:初始值]){
/* css代码块; */
}
//使用:
.类名(); // 使用默认值
.类名(实参); // 传参注意:.类名() {} 此部分代码不会被编译,而 .类名{} 这部分代码会被当做是对一个class的样式设置,将会被编译成css。
less:
.bd(@color:pink,@size:2px){ // 设置默认值
border:@size soild @color;
}
// 使用
li{
/* 使用默认值 */
.bd();
/* 只传递第二个参数 */
.bd(@size:5px);
/* 传递全部参数 */
.bd(blue,3px);
}css:
li {
/* 使用默认值 */
border: 2px soild pink;
/* 只传递第二个参数 */
border: 5px soild pink;
/* 传递全部参数 */
border: 3px soild blue;
}7)模式匹配
相当于定义相同的混合名称,根据分支的值决定执行那个分支,但是有一个公共的分支(任何一个分支都会调用)。 @_ 表示匹配所有,通常用于定义公共部分。
eg:传递不同的参数,画出同的三角形。
less:
// 公共CSS 匹配所有的
.tri(@_,@color,@size:10px){
width: 0;
height: 0;
display: block;
border:@size solid transparent;
}
/* 左三角形 */
.tri(l,@color,@size){
border-left-color: @color;
}
/* 右三角形 */
.tri(r,@color,@size){
border-right-color: @color;
}
/* 上三角形 */
.tri(t,@color,@size){
border-top-color: @color;
}
/* 下三角形 */
.tri(b,@color,@size){
border-bottom-color: @color;
}
// 调用
.triangle{
.tri(l,blue,5px)
}
.triangle{
.tri(r,aqua,20px)
} css:
.triangle {
width: 0;
height: 0;
border: 5px solid transparent;
border-left-color: blue;
}
.triangle {
width: 0;
height: 0;
border: 20px solid transparent;
border-right-color: aqua;
}8)运算符
运算符可以对角度,颜色,高度等变量进行运算。
在Less中可以使用 +、-、 *、 /、 进行算数运算。
注意:
- 变量和常量之间进行运算要加上空格,若参数进行了算数运算最好为其加上括号。
- 使用 / 时要加括号。
eg:对数值型变量进行计算
@w: 100px;
@num: 10px;
p {
width: @w*2.5;
}
.container1 {
margin: @num*2 @num*@w @num - 2;
}
.container2 {
margin: ((@num+5) * 2) @num*1.5 (@num - 5) (@num / 3);
// 注意:在写负号时要在运算符两侧加空格,乘号和加号不需要
// 若参数进行了算数运算最好为其加上括号
} eg:对颜色变量进行运算(直接对十六进制的颜色按位进行加减乘除 +溢出为f -溢出为0)
// 对颜色进行运算
@color1:#333;
@width:100px;
li{
width: @width + 100px; // 200px
width: @width * 1.3; // 130px
width: @width * (1/3); // 33.33333333px;
height: 30px;
list-style-type: none;
background-color: #eee;
margin-bottom: 10px;
// 直接对十六进制的颜色按位进行加减乘除 +溢出为f -溢出为0
&:nth-child(1){ //& 代表父级
background-color: @color1 + @color2;//#999999
}
&:nth-child(2){ //& 代表父级
background-color: @color2 - @color1;//#333333
}
&:nth-child(3){ //& 代表父级
background-color: @color1 - @color2; // 结果为负数时颜色为#000000
}
&:nth-child(4){ //& 代表父级
background-color: @color1 * 2; //#666666
}
&:nth-child(5){ //& 代表父级
background-color: @color1 / 2; //#eeeeee
}
&:nth-child(6){ //& 代表父级
background-color: @color2 * 2; //#cccccc
}
}9)嵌套规则
Less中的嵌套规则允许在一个选择器中嵌套另一个选择器,通过缩进一个空格来实现父子级关系。
父级选择器:使用 & 引用父选择器,通常在修改类或伪类应用于现有选择器时使用。
格式:
父级(父类){
属性:属性值;
.....
子级(子类){
属性:属性值;
......
&:hover{
属性:属性值;
.......
}
&:before{
属性:属性值;
.......
}
&:nth-of-child(n
}
.......
}
}header {
width: 1000px;
height: 44px;
display: flex; // 弹性布局
justify-content: space-around;
.logo {
width: 60px;
height: 44px;
background-color: #eee;
img {
width: 100%;
height: 100%;
}
}
.menu {
display: flex; // 弹性布局
justify-content: space-around;
position: relative;
& > * {
// .menu 下的全部子标签
list-style-type: none;
}
li {
font-size: 20px;
flex: 1 0 100px;
&:hover {
color: aqua;
&::before { // 使用为元素画三角形
content: ""; // 必须设置内容为空
width: 0;
height: 0; // 宽高0
border: 10px solid transparent; // 边框透明
border-top-color: black; // 上边框设置颜色,即三角形的颜色
display: block;
position: absolute; // 绝对定位,脱离文档流
top: -10px;
left: -30%;
}
}
&:first-child {
color: aqua;
text-decoration: underline; // 添加下划线
}
& + li + li {
// 匹配第二个li标签后的兄弟li标签
background-color: pink;
}
}
}
}10)作用域
作用域在编译时采用就近原则。首先会从作用域内查找变量或混合模块,如果没找到,则去父级作用域中查找,直到找到为止。(与JS用法相似)
// 全局作用域
@var: red;
header {
// 局部作用
@var: blue;
nav {
background-color: @var; //blue
}
}
section {
@var: pink;
border: 1px solid @var;//pink
}
footer {
color: @var; //red
}11)函数
①颜色函数
颜色会先被转化为HSLA(色相,饱和度,亮度,不透明度)色彩空间,然后在通道级别中操作。
取值范围:(h:0-360、s:0-100%、l:0-100%、a:0-1)
设置颜色:
//调整亮度
lighten(@color, 10%); 返回一个比@color浅10%的颜色
darken(@color, 10%); 返回一个比@color 深10%的颜色
//调整饱和度
saturate(@color, 10%); 返回一个比color饱和比高10%的颜色
desaturate(@color, 10%); 返回一个比color饱和比低10%的颜色
//调整不透明度
fade(@color, 50%); 返回一个@color颜色的50%透明度的颜色
//调整色调
spin(@color, 10); 返回一个比@color 色调大10度的颜色
spin(@color, -10); 返回一个比@color 色调小10度的颜色
//混合颜色
mix(@color1, @color2) 返回一个@color1和@color2混合的颜色eg:
@color: red;
li {
width: 200px;
height: 20px;
list-style-type: none;
&:nth-of-type(1) {
background-color: darken(@color, 10%);// 颜色加深10%
}
&:nth-of-type(2) {
background-color: darken(@color, 20%);// 颜色加深20%
}
&:nth-of-type(3) {
background-color: darken(@color, 30%);// 颜色加深30%
}
&:nth-of-type(4) {
background-color: darken(@color, 40%);// 颜色加深40%
}
&:nth-of-type(5) {
background-color: darken(@color, 50%);
}
&:nth-of-type(6) {
background-color: darken(@color, 60%);
}
&:nth-of-type(7) {
background-color: mix(red, blue);
}
} 提取颜色信息:
hue(@color); 返回@color//颜色的色调 返回:0-360
saturation(@color); //返回@color颜色的饱和度通道
lightNess(@color); //返回@color颜色的亮度通道②Math函数
round(x,y) //对x四舍五入,保留y个小数点
ceil(x) //向上取整
floor(x) //向下取整
percentage(x) //取百分数。eg:percentage(0.6)返回60%
min(a,b,c,d,e…); //取最小值
max(a,b,c,d,e…); //取最大值
sqrt(a); //计算数字的平方根
abs(a); //计算数字绝对值
pi() //返回Π
pow(a,b) //返回a的b次方
[a]sin(a); //计算[反]正弦
[a]cos(a); //计算[反]余弦
[a]tan(a); //计算[反]正切值③类型函数
isnumber(a); //判断是否是数字 是数字返回true,不是返回flase
isstring(a); //判断是否是字符串("string") 是字符串返回true,不是返回flase
iscolor(a); //判断是否是颜色,是返回true,不是返回flase
.....2.Sass
1)Sass简介
Sass(Syntactically Awesome StyleSheets)是一款专业的CSS扩展语言,它旨在增强CSS的功能,提高前端工程师的开发效率。 中文官网
- 变量和嵌套规则:Sass允许开发者使用变量和嵌套规则,这些特性使得样式表的编写更加灵活和方便。
- 混合(Mixins):通过混合,Sass可以复用代码块,减少重复代码,使样式表更加整洁。
- 导入功能:Sass支持将一个文件导入到另一个文件中,这样可以更好地组织和管理样式表。
2)Sass安装
①安装ruby
Sass是基于ruby的,所以要先安装ruby。

打开开始菜单,看到新安装内容

测试ruby是否安装成功
②安装Sass
在线安装:
在Start Command Prompt with Ruby 中输入:gem i sass
③使用node安装
如果使用ruby安装失败 可以使用cnpm进行安装
cnpm i -g sass
sass --version 查看版本

3)Sass编译
①手动编译
单文件转换命令:
在文件目录下cmd输入 sass d:\test.sass:d:\test.css 或sass d:\test.scss:d:\test.css
被编译文件为:d盘下的test.sass/scss 编译输出到d盘下的test.css文件内
②使用插件编译
安装Easy Sass 插件
在setting.json中设置


**注意:**此处的输出目录一般是相对于当前vscode打开项目的作为根目录的,因此当当前项目在其它项目内被打开使,一般会出现输出路径错误。最好将此项目(此文件夹)单独打开。
4)Sass与less的区别
Sass和Less是两种常用的CSS预处理器,它们都可以提供更灵活和强大的CSS开发功能。相同之处:Sass和Less都扩展了CSS的功能,引入了变量、混入(Mixins)、嵌套规则等高级特性。
下面是Sass和Less之间的几个区别:
- 变量声明的符号不同:Sass使用美元符号($)来声明变量,而Less使用符号(@)。
- 运行环境:Less在JS上运行。而Sass需要通过Ruby环境来编译成CSS文件,需要安装Ruby和Sass的编译工具。
- 功能:Sass相对于Less功能更强大。Sass支持条件语句(if-else)和循环语句(for),可以更灵活地控制样式的生成。而Less不支持条件语句和循环语句,功能相对较少。
- 处理机制:Sass最初是基于Ruby的,通常在服务端进行处理,而Less是基于JavaScript的,可以在客户端或服务端处理。
- 语法风格:Sass最初使用的是缩进式语法,后来发展出了SCSS语法,它与Less的语法都类似于传统的CSS,但Sass的缩进式语法更加简洁直观,可以减少代码的冗余和括号的嵌套。Less的语法则更接近于标准的CSS,这使得从CSS过渡到Less相对容易。
综上所述,Sass相对于Less功能更强大,但使用起来相对复杂一些。而Less相对简单易用,更适合初学者或者对功能要求不高的项目。
5)sass
Sass的老式写法主要指的是其最初的语法风格,也被称为“缩进式”或“简洁式”语法。
这种语法风格的特点是通过缩进来表示CSS规则的层次结构,而不需要使用大括号和分号。这使得代码看起来更加简洁、清晰,并且减少了冗余。
eg:
$color: red
$size: 10px
body
background-color: $color
font-size: $sizebody {
background-color: red;
font-size: 10px;
} Sass语法的特点是内部没有标点符号和花括号(容易出错),全部都由缩进控制。文件以”.sass”结尾。
6)SCSS
SCSS 是 Sass 的新语法格式,从外形上来判断他和 CSS 长得几乎是一模一 样,代码都包裹在一对大括号里,并且末尾结束处都有一个分号。其文件名格式常常以“.scss”为扩展名。
eg:
$color: blue;
$size: 10px;
body{
background-color: $color;
font-size: $size * 2;
p{
font-size: $size;
}
}body {
background-color: blue;
font-size: 20px;
}
body p {
font-size: 10px;
} 文件以”.scss”结尾,支持新语法。(特别注意“.sass”只支持老语法,新语法必须”.scss”结尾)。
7)Sass与SCSS的区别
Sass和SCSS实际上是同一种CSS预处理器,只是语法风格不同。
- 文件扩展名不同。Sass使用“.sass”作为文件扩展名,而SCSS使用“.scss”作为文件扩展名。
- 语法书写方式不同。Sass采用严格的缩进风格,不使用分号、大括号等符号,使得代码看起来更加简洁。相比之下,SCSS的语法与CSS更为接近,它允许使用大括号和分号,这使得从CSS过渡到SCSS相对容易。
总的来说,Sass和SCSS在核心功能上是相同的,它们都是为了增强CSS的能力而设计的预处理器。开发者可以根据个人喜好和项目需求选择适合自己的语法风格。