@forward

@forward 規則會載入 Sass 樣式表,並使其Mixin函式變數在您的樣式表使用@use 規則載入時可用。它讓您可以跨多個檔案組織 Sass 程式庫,同時允許使用者載入單個入口點檔案。

此規則寫成 @forward "<url>"。它會像 @use 一樣載入指定網址的模組,但它會讓已載入模組的公開成員對您的模組使用者可用,就像它們直接在您的模組中定義一樣。不過,這些成員在您的模組中不可用——如果您也想要這樣做,您還需要編寫 @use 規則。別擔心,它只會載入模組一次!

如果您同時在同一個檔案中為同一個模組編寫 @forward@use,最好先編寫 @forward。這樣,如果您的使用者想要設定轉發的模組,該設定將會在您的 @use 在沒有任何設定的情況下載入它之前套用到 @forward

💡 有趣小知識

@forward 規則在處理模組的 CSS 時,作用就像 @use 一樣。來自轉發模組的樣式將會包含在編譯的 CSS 輸出中,並且具有 @forward 的模組可以延伸它,即使它沒有被 @use

SCSS 語法

// src/_list.scss
@mixin list-reset {
  margin: 0;
  padding: 0;
  list-style: none;
}
// bootstrap.scss
@forward "src/list";
// styles.scss
@use "bootstrap";

li {
  @include bootstrap.list-reset;
}

Sass 語法

// src/_list.sass
@mixin list-reset
  margin: 0
  padding: 0
  list-style: none

// bootstrap.sass
@forward "src/list"
// styles.sass
@use "bootstrap"

li
  @include bootstrap.list-reset

CSS 輸出

li {
  margin: 0;
  padding: 0;
  list-style: none;
}













新增前綴新增前綴 永久連結

因為模組成員通常會與命名空間一起使用,簡短的名稱通常是最易讀的選項。但是這些名稱在定義它們的模組之外可能沒有意義,所以@forward可以選擇為它轉發的所有成員新增額外的前綴。

寫法是 @forward "<url>" as <prefix>-*,它會將指定的前綴加到模組轉發的每個 mixin、函數和變數名稱的開頭。例如,如果模組定義了一個名為reset的成員,並將其as list-*轉發,則下游樣式表將其稱為list-reset

SCSS 語法

// src/_list.scss
@mixin reset {
  margin: 0;
  padding: 0;
  list-style: none;
}
// bootstrap.scss
@forward "src/list" as list-*;
// styles.scss
@use "bootstrap";

li {
  @include bootstrap.list-reset;
}

Sass 語法

// src/_list.sass
@mixin reset
  margin: 0
  padding: 0
  list-style: none

// bootstrap.sass
@forward "src/list" as list-*
// styles.sass
@use "bootstrap"

li
  @include bootstrap.list-reset

CSS 輸出

li {
  margin: 0;
  padding: 0;
  list-style: none;
}













控制可見性控制可見性 永久連結

有時,您並不想轉發模組中的*每個*成員。您可能希望將某些成員設為私有,以便只有您的套件可以使用它們,或者您可能希望要求使用者以不同的方式載入某些成員。您可以透過撰寫 @forward "<url>" hide <members...>@forward "<url>" show <members...> 來精確控制要轉發哪些成員。

hide 形式表示不應轉發列出的成員,但其他所有成員都應該轉發。show 形式表示*僅*應轉發指定的成員。在這兩種形式中,您都列出 mixin、函數或變數(包括 $)的名稱。

SCSS 語法

// src/_list.scss
$horizontal-list-gap: 2em;

@mixin list-reset {
  margin: 0;
  padding: 0;
  list-style: none;
}

@mixin list-horizontal {
  @include list-reset;

  li {
    display: inline-block;
    margin: {
      left: -2px;
      right: $horizontal-list-gap;
    }
  }
}
// bootstrap.scss
@forward "src/list" hide list-reset, $horizontal-list-gap;

Sass 語法

// src/_list.sass
$horizontal-list-gap: 2em

@mixin list-reset
  margin: 0
  padding: 0
  list-style: none


@mixin list-horizontal
  @include list-rest

  li
    display: inline-block
    margin:
      left: -2px
      right: $horizontal-list-gap



// bootstrap.sass
@forward "src/list" hide list-reset, $horizontal-list-gap

設定模組設定模組 永久連結

相容性
Dart Sass
自 1.24.0 起
LibSass
Ruby Sass

@forward 規則也可以使用設定載入模組。這與@use的運作方式大致相同,但有一個額外功能:@forward 規則的設定可以在其設定中使用!default旗標。這允許模組更改上游樣式表的預設值,同時仍然允許下游樣式表覆蓋它們。

SCSS 語法

// _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;
}
// _opinionated.scss
@forward 'library' with (
  $black: #222 !default,
  $border-radius: 0.1rem !default
);
// style.scss
@use 'opinionated' with ($black: #333);

Sass 語法

// _library.sass
$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

// _opinionated.sass
@forward 'library' with ($black: #222 !default, $border-radius: 0.1rem !default)



// style.sass
@use 'opinionated' with ($black: #333)

CSS 輸出

code {
  border-radius: 0.1rem;
  box-shadow: 0 0.5rem 1rem rgba(51, 51, 51, 0.15);
}