Skip to content

变量

$ 开头,用来存放在样式表重复使用的信息

库通常使用 !default 变量来允许用户配置库的 CSS

操作结果说明
$var: "A"; $var: "B"$var = "B"直接覆盖原值
$var: "A"; $var: "B" !default$var = "A"保留原值(默认值不生效)
$var: null; $var: "B" !default$var = "B"null 视为未定义,应用默认值
_library.scss
$black: #000 !default;
$border-radius: 0.25rem !default;
$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default;

code {
  border-radius: $border-radius;
  box-shadow: $box-shadow;
}
style.scss
@use 'library' with (
  $black: #222,
  $border-radius: 0.1rem
);
res.css
code {
  border-radius: 0.1rem;
  box-shadow: 0 0.5rem 1rem rgba(34, 34, 34, 0.15);
}

插值

#{}, 插值始终返回未加引号的 字符串

scss
@mixin corner-icon($name, $top-or-bottom, $left-or-right) {
  .icon-#{$name} {
    background-image: url("/icons/#{$name}.svg");
    position: absolute;
    #{$top-or-bottom}: 0;
    #{$left-or-right}: 0;
  }
}

@include corner-icon("mail", top, left);

模块

不必将所有 Sass 文件都写在一个文件中。您可以使用@use规则将其拆分成任意大小。此规则会将另一个 Sass 文件加载为 module,这意味着您可以在 Sass 文件中使用基于文件名的命名空间来引用其变量、mixins和 函数. 无需包含文件扩展名

css
// _base.scss
$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}
css
// styles.scss
@use 'base';

.inverse {
  background-color: base.$primary-color;
  color: white;
}

mixin

使用 @mixin 定义, 使用方式 @mixin <name> { ... } or @mixin name(<arguments...>) { ... }

使用上 @include <name> or @include <name>(<arguments...>)

接收的参数不仅可以当成 value 使用也可以使用插值充当 key

也允许默认值 @mixin replace-text($image, $x: 50%, $y: 50%)

传递参数时可以按顺序传递也可以按名称传递,语法与默认参数是一致的 @include square(100px, $radius: 4px);

除了接受参数之外,mixin 还可以接受一整块样式,即内容块。mixin 可以通过在其主体中包含 @content 规则来声明它接受的内容块

@extend

@extend 允许你将一个选择器的 CSS 属性​​共享​​给另一个选择器,避免重复代码

多个类(如 .error、.warning、.success)需要共用相同的基样式(如字体、边距)。

scss
// 定义占位符类(%开头不会被直接编译)
%message-shared {
 border: 1px solid #ccc;
 padding: 10px;
 color: #333;
}

// 通过 @extend 继承占位符类
.error {
 @extend %message-shared;
 border-color: red;
}

.success {
 @extend %message-shared;
 border-color: green;
}
css
.message-shared, .error { /* .message-shared 可能并不需要 */
  border: 1px solid #ccc;
  padding: 10px;
}
.error {
  border-color: red;
}

变量的数据类型

map

查找
@use "sass:map";
$font-weights:() !default
$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.get($font-weights, "medium"); // 500
@debug map.get($font-weights, "extra-bold"); // null
循环
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f");

@each $name, $glyph in $icons {
  .icon-#{$name}:before {
    display: inline-block;
    font-family: "Icon Font";
    content: $glyph;
  }
}
设置
@use "sass:map";

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.set($font-weights, "extra-bold", 900);
// ("regular": 400, "medium": 500, "bold": 700, "extra-bold": 900)
@debug map.set($font-weights, "bold", 900);
// ("regular": 400, "medium": 500, "bold": 900)

Last updated: