大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Sass和Less(预处理器)「建议收藏」,希望能够帮助大家进步!!!
Sass和Less(预处理器)
- 一、了解Sass和Less
- 二、Sass和Less 语法
- 2.1 注释
- 2.2 语法
- 赋值
- 插值
- 作用域
- 选择器嵌套、伪类嵌套、属性嵌套(Sass)
- 运算
- 函数
- 混合、命名空间(Less)、继承
- 合并、媒体查询
- 条件判断、循环
- 引入
一、了解Sass和Less
Sass 对自己的定位首先是一个预处理器。其最主要的竞争对手包括 LESS,一个基于 Node.js 的预处理器,因著名 CSS 框架 Bootstrap 的使用而声名鹊起。此外还有 Stylus ,一种对形式无所限制的 LESS 版本。它是一种无论你想怎么样使用,大都能顺利转换成 CSS 的程序语言。
Sass和Less都属于预处理器。Less文件以.less
结尾,Sass文件新版的以.scss
结尾,老版的以.sass
结尾。
Less文件和Sass文件都会生成css文件。
二、Sass和Less 语法
2.1 注释
在less文件中,单行注释不会再css文件中显示出来,多行注释就是css的注释方式,会在css文件中显示出来。
2.2 语法
赋值
在Less文件中,定义变量用@
。
在Sass文件中,定义变量用$
。
@number:123px;
$number:123px;
/* 普通变量声明:直接用 $ 声明 变量执行顺序是自上而下,当下面对变量重新赋值时,会用下面的新值 */
$width:200px;
$width:100px;
/* 默认变量:在后面添加 !default 变量在执行的时候,不会根据位置执行,执行不是默认变量的值 */
$width:230px;
$width:300px !default;
/* 全局变量和局部变量 在局部变量后添加 !global ,局部变量作用域为全局变量 */
$color:red; #div1{
color: $color; //使用全局变量,结果 red
// $color:orange; //局部变量,结果是 orange
$color:orange !global; //添加 !global 后,局部变量 变成全局变量,div2的值为 orange .box{
background-color: $color; //在本作用域下颜色是 orange
}
}
#div2{
background-color: $color;//
}
只听到从架构师办公室传来架构君的声音:
郑国游人未及家,洛阳行子空叹息。有谁来对上联或下联?
插值
在Less文件中定义一个值,插入进去用@{}
,将定义的值放入括号中
在Less中的编译和结果
特殊变量 #{} 在Sass中,用定义值后,用#{}进行插值和值一起写入括号中。
作用域
采用就近原则,在大括号里有已经创建的变量,优先使用大括号里面的变量值。
在Less文件中,在大括号内先取值,在定义,最后显示的都是大括号内的变量值
在Sass文件中,如果先取值,在定义新变量,定义新变量之前的会使用之前的值,定义新变量后的代码会取更改后的值。Sass作用域有顺序。
选择器嵌套、伪类嵌套、属性嵌套(Sass)
在Less和Sass中,可以对标签嵌套,在里面写各个层级写相应的样式,编译完成后,会自动写好对应的选择器。减少复杂的编译选择器代码。
伪类嵌套,需要在伪类的冒号前面加&
,不然会有空格。
属性嵌套只有在Sass中有,Less没有。
代码语言:javascript复制此代码由Java架构师必看网-架构君整理
/* 选择器嵌套 */
#div3{
width: 300px;
.name{
color: aqua;
}
a{
background: azure;
// & 父类元素选择器,添加伪类选择器
&:hover{
color: blue;
}
}
}
运算
在Less加减乘除都可以做。如果进行不同单位的计算,会按照第一个单位进行计算,只计算值。
在Sass中不同单位不能进行计算,默认/
是分割,不会像Less一样会认为是除号。
函数
Sass和Less有的函数可以通用,有的不行,需要去官网查询API。
round()取整,percentage()小数点换成百分数。
Sass可以自定义函数中,用function定义。Less中不能使用自定义函数
代码语言:javascript复制/* 函数 */
$colors:(light:white,dark:black); //map映射
//根据key获取值
@function color($key){
@if not map-has-key($colors,$key){
//警告@warn不会中断 sass 监听
@warn "在映射中没有#{$key}这个键";
//错误@error 会中断 sass 监听
@error "在映射中没有#{$key}这个键";
}
@return map-get($colors,$key);
}
//使用函数color
body{
background: color(light);
}
混合、命名空间(Less)、继承
混入在Less中使用。样式可以单独显示,也可以在其他的杨使用混入,如果不想选择器编译出来可以在样式后面加一个(),就不会编译出来,可以在括号中进行传参。
在Sass中混入,用@mixin
方法定义要混入的样式,用@include
将方法混入。就是编写代码块和使用代码块。
此代码由Java架构师必看网-架构君整理
/* 混合:@mixin 名称{} 引用混合: @include 名称 */
//无参混合
@mixin clear {
width: 100px;
}
#div4{
@include clear;
}
//有参混合
@mixin col($color:red,$border:1px solid black) {
background: $color;
border:$border ;
}
#div5{
@include col;
//传参
@include col(orange)
}
继承:
Less命名空间
用#名字()
创建,#名字 样式
调用
Less继承
直接在需要使用样式中,用&:extend()
调用。编译后会写成分组选择器,节省代码量,相比命名空间。
Sass继承
用@extend
直接调用样式,编译后也是和Less一样形成分组选择器。
合并、媒体查询
Less合并
在Less中对同一种属性的值进行合并,用
合并之后,编译的是用,
隔开,用 _
合并的值,编译后用空格隔开。
Sass合并
Sass合并在定义的函数中用小括号填入参数,用的是键值对
的方式,用map-values()
传入参数。
Less和Sass媒体查询
条件判断、循环
Less条件判断和循环
Sass循环
只有在Sass中有if-else,和for循环
引入
Less和Sass都可以用导入。Sacc导入scss或sass文件,Less导入less文件。
作用就是 将需要用的样式编写到一个文件中,其他需要本样式的直接引入,例如清除默认样式