CSS预编译器
1、理解
属于 css 的扩展语言、支持所有 css 的语法,然后新增语法。
比如:变量、css 导入、css 嵌套、函数等等。
种类很多:less、sass
前提条件:浏览器支持 css 文件、不支持 .less 或者 .scss 文件,所以需要对这些预编译语言提前编译为 css 。
2、sass 安装
根据不同的框架环境依赖的模块是不一样的。
bash
npm i sass/node-sass/dart-sass
# 或者直接在 vscode 中安装相应插件,编写完 scss 文件后,就会自动转换。
搜索相应关键字 sass
# vue 环境下使用 sass
第一步、安装环境时、选择 sass
第二步、在 style 标签上加上 lang="scss"
sass 语法
1、变量
可以把反复利用到的 css 值定义为变量,然后通过变量名来引用。
scss
// 定义:以 $ 开头,后面跟上变量名
$theme-color: #ff0;
// 使用
nav {
background: $theme-color;
}
footer {
border: 1px solid $theme-color;
}
// 通过 #{} 插值语句可以在选择器或者属性名中使用变量
$b: border;
p .#($b){
#($b)-left: 1px solid $theme-color;
}
2、导入
可以导入 scss 文件,也可以导入 css 文件。
scss
@import '文件名'; // 文件后缀如果是.scss 那么可以省略不写
// 例子
<style lang="scss">
@import './assets/scss/var';
</style>
3、css 嵌套
可以像标签嵌套那样进行套娃操作,从而避免重复编写。
scss
// scss 嵌套
.body{
width: 200px;
a{
color: red;
}
p{
color: pink;
}
}
// 编译后为
.body {
width: 200px;
}
.body a{
color: red;
}
.body p{
color: pink;
}
scss
// 父选择器标识符 &
a {
color: red;
&:hover {
color: green;
}
}
4、混合
当出现大段重复的代码时,此时就可以使用混合去实现大段样式的复用。
scss
// 定义混合 - 此段代码可以重复利用
@mixin center {
width: 800px;
margin-left: auto;
margin-right: auto;
}
// 使用 - 通过 @include 来标识
.center{
@include center;
background: pink;
}
scss
// 混合允许使用变量 - 类似混合是函数,函数也可以接受参数,并且参数可以有默认值
@mixin center($w) { // $w 就是参数
width: $w;
margin-left: auto;
margin-right: auto;
}
// 使用
.content {
@include center(1000px);
}
@mixin center($w:800px) { // 默认值
width: $w;
margin-left: auto;
margin-right: auto;
}
// 使用
.content {
@include center(); // 没有传值就是默认值
}
5、继承
一个选择器继承另外一个选择器。
scss
.error {
background: red;
color: #fff;
}
.seriousError {
@extend .error; // 通过 @extend 去继承另外一个选择器中所有的 css 代码
background: darkred;
}
6、运算
scss
p {
width: $w/2;
}
7、函数
scss
// 随机颜色
@function randomNum($max,$min:0) {
@return ($min + random($max));
}
8、颜色函数
9、流程控制
scss
@if
@for