Sass基础使用技巧

136 阅读2分钟

sass基础使用技巧

嵌套

最常用的技巧,例如

<div class='container'>
    <span class='content' />
</div> 

那么我们编写scss文件时可以:

.container{
    width:500px;
    span {
    height:200px;
    }
}

&父级选择器嵌套

.container{
    width:500px;
    &:hover{    //相当于.container:hover{},但是不用额外在外层写
    color:#fff
    }

}

//不用&选择器的写法
.container{
    width:500px;
}
.container:hover{    
    color:#fff
    }

属性嵌套

相同属性可以集中一起写,例如:

.container { 
font: {
family: Aria; 
size: 3em; 
weight: bold; } }

//相当于
.funky { 
font-family: Aria; 
font-size: 3em; 
font-weight: bold; }

嵌套标识符> + ~

">" 指元素中嵌套的所匹配的元素

// .container > .content

<div classname='container'>
    <span class='content' /> //匹配
    <span class='content' /> //匹配
    <span class='body' /> //不匹配
</div> 

"+"指下方紧邻的匹配元素

// .a + .b
<img class='b' />
<img class='a' />
<img class='b' /> //匹配
<img class='b' /> 

"~"指下方所有匹配元素

// .a ~ .b
<img class='b' />
<img class='a' />
<img class='b' /> //匹配
<img class='b' /> //匹配

变量

sass允许用变量$来存储重复使用的css数值,通常在scss文件顶部声明,例如:

$primary-color:#66ccff

body{
    .container{
    background-color:$primary-color
    }

}

注:如果在类名当中定义变量,那么只能在该类名中使用

插值语句#{}

可以通过插值语句任意调用想要使用的插值 区别于变量:避免sass运行运算表达式

$container: body;
$ba:background

#{container} {
 #{ba}-color:yellow
}

!default

在变量结尾添加!default,可以让一个没有使用!default声明赋值的变量赋值。 变量已经被赋值,不会被重新赋值; 变量没有被赋值,会被重新赋值

Mixins

可以让我们定义一组css规则,并且能够让我们在需要的地方重用这些规则,有些类似react当中我们自己封装的组件,用mixins写好之后,在调用的时候只需要传递相应的参数就可以显示,这有利于减少代码量,使得样式编写组件化,例如:

@mixin theme($theme: DarkGray) {
  background: $theme;
  box-shadow: 0 0 1px rgba($theme, .25);
  color: #fff;
}
//这里定义了一组名为theme的样式,可以传入$theme变量
作为backgroundbox-shadow的颜色

//直接利用@include引用theme,并根据需要修改$theme
.info {
  @include theme;
}
.alert {
  @include theme($theme: DarkRed);
}
.success {
  @include theme($theme: DarkGreen);
}

文件模块化

在scss文件中,可以利用类似import语法如@use引入其他文件的变量,mixins和函数

// _base.scss
$primary-color:#66ccff

body{
    .container{
    background-color:$primary-color
    }

}

//style,scss
@use 'base';
//或者
@import 'base'

.filter{
    color:base.$primary-color
}

注意:

  • 一定记得要在句子末尾加上分号

  • 导入sass文件时可以省略文件的后缀名.scss

  • 如果想导入css.文件,那么后缀名.css就不可删除

继承

利用%为前缀编写变量,如果有样式@extend该变量,则继承并显示该变量的内容,需要注意的是,只有被@extend的%变量才会显示:

//message-shared被以下的类样式继承了
%message-shared {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

//equal-heights没有被继承
%equal-heights {
  display: flex;
  flex-wrap: wrap;
}

.message {
  @extend %message-shared;
}

.success {
  @extend %message-shared;
  border-color: green;//继承后也可以额外添加样式
}

.error {
  @extend %message-shared;
  border-color: red;
}

.warning {
  @extend %message-shared;
  border-color: yellow;
}

计算

可以引用sass中的math,在scss文件中进行计算,例如

@use "sass:math"
 
    //将px转换为百分比
.container{
    width: math.div(600px * 960px) * 100%
        
}

我们也可以在一个scss文件中定义变量并计算,并在vite中配置全部scss文件,就可以使用里面的变量啦。