@use
- Dart Sass
- seit 1.23.0
- LibSass
- ✗
- Ruby Sass
- ✗
Nur Dart Sass unterstützt derzeit @use. Benutzer anderer Implementierungen müssen stattdessen die @import-Regel verwenden.
Die @use Regel lädt Mixins, Funktionen und Variablen aus anderen Sass-Stylesheets und kombiniert CSS aus mehreren Stylesheets. Stylesheets, die von @use geladen werden, werden als „Module“ bezeichnet. Sass bietet auch eingebaute Module voller nützlicher Funktionen.
Die einfachste @use Regel ist @use "<url>", die das Modul unter der angegebenen URL lädt. Alle auf diese Weise geladenen Stile werden genau einmal in die kompilierte CSS-Ausgabe aufgenommen, unabhängig davon, wie oft diese Stile geladen werden.
⚠️ Vorsicht!
@use Regeln eines Stylesheets müssen vor allen anderen Regeln außer @forward stehen, einschließlich Style-Regeln. Sie können jedoch Variablen vor @use Regeln deklarieren, um sie beim Konfigurieren von Modulen zu verwenden.
SCSS-Syntax
// foundation/_code.scss
code {
padding: .25em;
line-height: 0;
}
// foundation/_lists.scss
ul, ol {
text-align: left;
& & {
padding: {
bottom: 0;
left: 0;
}
}
}
// style.scss
@use 'foundation/code';
@use 'foundation/lists';
Sass-Syntax
// foundation/_code.sass
code
padding: .25em
line-height: 0
// foundation/_lists.sass
ul, ol
text-align: left
& &
padding:
bottom: 0
left: 0
// style.sass
@use 'foundation/code'
@use 'foundation/lists'
CSS-Ausgabe
code {
padding: .25em;
line-height: 0;
}
ul, ol {
text-align: left;
}
ul ul, ol ol {
padding-bottom: 0;
padding-left: 0;
}
Mitglieder ladenMitglieder laden Permalink
Sie können Variablen, Funktionen und Mixins aus einem anderen Modul abrufen, indem Sie <namespace>.<variable>, <namespace>.<function>() oder @include <namespace>.<mixin>() schreiben. Standardmäßig ist der Namespace nur die letzte Komponente der Modul- URL des Moduls.
Mitglieder (Variablen, Funktionen und Mixins), die mit @use geladen werden, sind nur im Stylesheet sichtbar, das sie lädt. Andere Stylesheets müssen ihre eigenen @use Regeln schreiben, wenn sie ebenfalls darauf zugreifen möchten. Dies erleichtert die genaue Bestimmung, woher jedes Mitglied stammt. Wenn Sie Mitglieder aus vielen Dateien gleichzeitig laden möchten, können Sie die Regel @forward verwenden, um sie alle aus einer gemeinsamen Datei weiterzuleiten.
💡 Lustige Tatsache
Da @use den Mitgliedern Namespaces hinzufügt, ist es sicher, sehr einfache Namen wie $radius oder $width beim Schreiben eines Stylesheets zu wählen. Dies unterscheidet sich von der alten Regel @import, die dazu ermutigte, lange Namen wie $mat-corner-radius zu schreiben, um Konflikte mit anderen Bibliotheken zu vermeiden. Dies trägt dazu bei, Ihre Stylesheets übersichtlich und leicht lesbar zu halten!
SCSS-Syntax
// src/_corners.scss
$radius: 3px;
@mixin rounded {
border-radius: $radius;
}
// style.scss
@use "src/corners";
.button {
@include corners.rounded;
padding: 5px + corners.$radius;
}
Sass-Syntax
// src/_corners.sass
$radius: 3px
@mixin rounded
border-radius: $radius
// style.sass
@use "src/corners"
.button
@include corners.rounded
padding: 5px + corners.$radius
CSS-Ausgabe
.button {
border-radius: 3px;
padding: 8px;
}
Ein Namespace wählenEin Namespace wählen Permalink
Standardmäßig ist der Namespace eines Moduls nur die letzte Komponente seiner URL ohne Dateiendung. Manchmal möchten Sie jedoch einen anderen Namespace wählen – Sie möchten vielleicht einen kürzeren Namen für ein Modul verwenden, auf das Sie oft verweisen, oder Sie laden mehrere Module mit demselben Dateinamen. Sie können dies tun, indem Sie @use "<url>" as <namespace> schreiben.
SCSS-Syntax
// src/_corners.scss
$radius: 3px;
@mixin rounded {
border-radius: $radius;
}
// style.scss
@use "src/corners" as c;
.button {
@include c.rounded;
padding: 5px + c.$radius;
}
Sass-Syntax
// src/_corners.sass
$radius: 3px
@mixin rounded
border-radius: $radius
// style.sass
@use "src/corners" as c
.button
@include c.rounded
padding: 5px + c.$radius
CSS-Ausgabe
.button {
border-radius: 3px;
padding: 8px;
}
Sie können ein Modul sogar *ohne* Namespace laden, indem Sie @use "<url>" as * schreiben. Wir empfehlen jedoch, dies nur für von Ihnen geschriebene Stylesheets zu tun, da sie sonst neue Mitglieder einführen können, die Namenskonflikte verursachen!
SCSS-Syntax
// src/_corners.scss
$radius: 3px;
@mixin rounded {
border-radius: $radius;
}
// style.scss
@use "src/corners" as *;
.button {
@include rounded;
padding: 5px + $radius;
}
Sass-Syntax
// src/_corners.sass
$radius: 3px
@mixin rounded
border-radius: $radius
// style.sass
@use "src/corners" as *
.button
@include rounded
padding: 5px + $radius
CSS-Ausgabe
.button {
border-radius: 3px;
padding: 8px;
}
Private MitgliederPrivate Mitglieder Permalink
Als Autor eines Stylesheets möchten Sie möglicherweise nicht, dass alle von Ihnen definierten Mitglieder außerhalb Ihres Stylesheets verfügbar sind. Sass macht es einfach, ein privates Mitglied zu definieren, indem Sie seinen Namen mit - oder _ beginnen. Diese Mitglieder funktionieren wie normale Mitglieder innerhalb des Stylesheets, das sie definiert, aber sie sind nicht Teil der öffentlichenAPI eines Moduls. Das bedeutet, dass Stylesheets, die Ihr Modul laden, sie nicht sehen!
💡 Lustige Tatsache
Wenn Sie ein Mitglied für ein gesamtes *Paket* privat machen möchten und nicht nur für ein einzelnes Modul, leiten Sie einfach nicht sein Modul von einem der Einstiegspunkte Ihres Pakets (die Stylesheets, die Sie Ihren Benutzern zum Laden Ihres Pakets empfehlen) weiter. Sie können dieses Mitglied sogar verbergen, während der Rest seines Moduls weitergeleitet wird!
SCSS-Syntax
// src/_corners.scss
$-radius: 3px;
@mixin rounded {
border-radius: $-radius;
}
// style.scss
@use "src/corners";
.button {
@include corners.rounded;
// This is an error! $-radius isn't visible outside of `_corners.scss`.
padding: 5px + corners.$-radius;
}
Sass-Syntax
// src/_corners.sass
$-radius: 3px
@mixin rounded
border-radius: $-radius
// style.sass
@use "src/corners"
.button
@include corners.rounded
// This is an error! $-radius isn't visible outside of `_corners.scss`.
padding: 5px + corners.$-radius
KonfigurationKonfiguration Permalink
Ein Stylesheet kann Variablen mit dem Flag !default (Standardwerte) definieren, um sie konfigurierbar zu machen. Um ein Modul mit Konfiguration zu laden, schreiben Sie @use <url> with (<variable>: <value>, <variable>: <value>). Die konfigurierten Werte überschreiben die Standardwerte der Variablen.
SCSS-Syntax
// _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
);
Sass-Syntax
// _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
// style.sass
@use 'library' with ($black: #222, $border-radius: 0.1rem)
CSS-Ausgabe
code {
border-radius: 0.1rem;
box-shadow: 0 0.5rem 1rem rgba(34, 34, 34, 0.15);
}
Mit MixinsMit Mixins Permalink
Das Konfigurieren von Modulen mit @use ... with kann sehr praktisch sein, insbesondere bei der Verwendung von Bibliotheken, die ursprünglich für die Arbeit mit der Regel @import geschrieben wurden. Aber es ist nicht besonders flexibel, und wir empfehlen es nicht für fortgeschrittenere Anwendungsfälle. Wenn Sie feststellen, dass Sie viele Variablen auf einmal konfigurieren möchten, Maps als Konfiguration übergeben oder die Konfiguration nach dem Laden des Moduls aktualisieren möchten, sollten Sie stattdessen einen Mixin schreiben, um Ihre Variablen festzulegen, und einen weiteren Mixin, um Ihre Styles einzufügen.
SCSS-Syntax
// _library.scss
$-black: #000;
$-border-radius: 0.25rem;
$-box-shadow: null;
/// If the user has configured `$-box-shadow`, returns their configured value.
/// Otherwise returns a value derived from `$-black`.
@function -box-shadow() {
@return $-box-shadow or (0 0.5rem 1rem rgba($-black, 0.15));
}
@mixin configure($black: null, $border-radius: null, $box-shadow: null) {
@if $black {
$-black: $black !global;
}
@if $border-radius {
$-border-radius: $border-radius !global;
}
@if $box-shadow {
$-box-shadow: $box-shadow !global;
}
}
@mixin styles {
code {
border-radius: $-border-radius;
box-shadow: -box-shadow();
}
}
// style.scss
@use 'library';
@include library.configure(
$black: #222,
$border-radius: 0.1rem
);
@include library.styles;
Sass-Syntax
// _library.sass
$-black: #000
$-border-radius: 0.25rem
$-box-shadow: null
/// If the user has configured `$-box-shadow`, returns their configured value.
/// Otherwise returns a value derived from `$-black`.
@function -box-shadow()
@return $-box-shadow or (0 0.5rem 1rem rgba($-black, 0.15))
@mixin configure($black: null, $border-radius: null, $box-shadow: null)
@if $black
$-black: $black !global
@if $border-radius
$-border-radius: $border-radius !global
@if $box-shadow
$-box-shadow: $box-shadow !global
@mixin styles
code
border-radius: $-border-radius
box-shadow: -box-shadow()
// style.sass
@use 'library'
@include library.configure($black: #222, $border-radius: 0.1rem)
@include library.styles
CSS-Ausgabe
code {
border-radius: 0.1rem;
box-shadow: 0 0.5rem 1rem rgba(34, 34, 34, 0.15);
}
Variablen neu zuweisenVariablen neu zuweisen Permalink
Nach dem Laden eines Moduls können Sie seine Variablen neu zuweisen.
SCSS-Syntax
// _library.scss
$color: red;
// _override.scss
@use 'library';
library.$color: blue;
// style.scss
@use 'library';
@use 'override';
@debug library.$color; //=> blue
Sass-Syntax
// _library.sass
$color: red
// _override.sass
@use 'library'
library.$color: blue
// style.sass
@use 'library'
@use 'override'
@debug library.$color //=> blue
Dies funktioniert sogar, wenn Sie ein Modul ohne Namespace mit as * importieren. Eine Zuweisung zu einem Variablennamen, der in diesem Modul definiert wurde, überschreibt dessen Wert in diesem Modul.
⚠️ Vorsicht!
Variablen von eingebauten Modulen (wie z. B. math.$pi) können nicht neu zugewiesen werden.
Das Modul findenDas Modul finden Permalink
Es wäre nicht sehr aufregend, für jedes geladene Stylesheet absolute URLs zu schreiben, daher macht der Algorithmus von Sass zum Finden von Modulen es ein wenig einfacher. Zunächst müssen Sie die Erweiterung der zu ladenden Datei nicht explizit angeben; @use "variables" lädt automatisch variables.scss, variables.sass oder variables.css.
⚠️ Vorsicht!
Um sicherzustellen, dass Stylesheets auf jedem Betriebssystem funktionieren, lädt Sass Dateien nach *URL*, nicht nach *Dateipfad*. Das bedeutet, dass Sie Schrägstriche anstelle von Backslashes verwenden müssen, auch auf Windows.
Dies bedeutet auch, dass URLs Groß-/Kleinschreibung beachten. Sass betrachtet Styles.scss und styles.scss als unterschiedliche Module, auch wenn Sie ein System mit Groß-/Kleinschreibung ignorierender Dateiverwaltung verwenden. Stellen Sie sicher, dass Ihre URLs mit der tatsächlichen Groß-/Kleinschreibung der Dateien auf der Festplatte übereinstimmen, andernfalls werden Ihre Stylesheets möglicherweise zweimal geladen und funktionieren auf anderen Betriebssystemen definitiv nicht.
Load Paths
Alle Sass-Implementierungen erlauben Benutzern, *Load Paths* anzugeben: Pfade auf dem Dateisystem, in denen Sass beim Suchen nach Modulen nachschaut. Wenn Sie beispielsweise node_modules/susy/sass als Load Path übergeben, können Sie @use "susy" verwenden, um node_modules/susy/sass/susy.scss zu laden (obwohl pkg: URLs ein besserer Weg sind, um dies zu handhaben).
Module werden jedoch immer relativ zur aktuellen Datei geladen. Load Paths werden nur verwendet, wenn keine relative Datei existiert, die mit der URL des Moduls übereinstimmt. Dies stellt sicher, dass Sie Ihre relativen Importe nicht versehentlich durcheinander bringen, wenn Sie eine neue Bibliothek hinzufügen.
💡 Lustige Tatsache
Im Gegensatz zu einigen anderen Sprachen benötigt Sass für relative Importe nicht die Angabe von ./. Relative Importe sind immer verfügbar.
PartialsPartials Permalink
Konventionell beginnen Sass-Dateien, die nur als Module geladen und nicht eigenständig kompiliert werden sollen, mit einem Unterstrich _ (wie in _code.scss). Dies sind sogenannte *Partials*, und sie weisen Sass-Tools an, diese Dateien nicht eigenständig zu kompilieren. Sie können den Unterstrich weglassen, wenn Sie ein Partial importieren.
IndexdateienIndexdateien Permalink
Wenn Sie eine _index.scss oder _index.sass in einem Ordner schreiben, wird die Indexdatei automatisch geladen, wenn Sie die URL des Ordners selbst laden.
SCSS-Syntax
// foundation/_code.scss
code {
padding: .25em;
line-height: 0;
}
// foundation/_lists.scss
ul, ol {
text-align: left;
& & {
padding: {
bottom: 0;
left: 0;
}
}
}
// foundation/_index.scss
@use 'code';
@use 'lists';
// style.scss
@use 'foundation';
Sass-Syntax
// foundation/_code.sass
code
padding: .25em
line-height: 0
// foundation/_lists.sass
ul, ol
text-align: left
& &
padding:
bottom: 0
left: 0
// foundation/_index.sass
@use 'code'
@use 'lists'
// style.sass
@use 'foundation'
CSS-Ausgabe
code {
padding: .25em;
line-height: 0;
}
ul, ol {
text-align: left;
}
ul ul, ol ol {
padding-bottom: 0;
padding-left: 0;
}
pkg: URLspkg: URLs Permalink
Sass verwendet das pkg: URL-Schema, um von verschiedenen Paketmanagern verteilte Stylesheets zu laden. Da Sass im Kontext vieler verschiedener Programmiersprachen mit unterschiedlichen Paketverwaltungskonventionen verwendet wird, haben pkg: URLs fast keine feste Bedeutung. Stattdessen werden Benutzer ermutigt, benutzerdefinierte Importer zu implementieren (unter Verwendung der JS API oder des Embedded Sass Protokolls), die diese URLs mithilfe der nativen Paketmanagerlogik auflösen .
Dies ermöglicht portablere pkg: URLs und die von ihnen verwendeten Stylesheets über verschiedene Sprachökosysteme hinweg. Egal, ob Sie eine Sass-Bibliothek über npm (für die Sass einen eingebauten pkg: Importer bereitstellt) oder den obskursten Paketmanager installieren, den Sie finden können, wenn Sie @use 'pkg:library' schreiben, wird es das Richtige tun.
💡 Lustige Tatsache
pkg: URLs sind nicht nur für @use. Sie können sie überall dort verwenden, wo Sie eine Sass-Datei laden können, einschließlich @forward, meta.load-css() und sogar die alte Regel @import.
Regeln für einen pkg: ImporterRegeln für einen pkg: Importer Permalink
Es gibt einige allgemeine Regeln, von denen Sass erwartet, dass alle pkg: Importer sie befolgen. Diese Regeln tragen dazu bei, dass pkg: URLs über alle Paketmanager hinweg konsistent behandelt werden, damit Stylesheets so portabel wie möglich sind.
Zusätzlich zu den Standardregeln für benutzerdefinierte Importer muss ein pkg: Importer nur nicht-kanonische URLs behandeln ,
- die das Schema
pkghaben und - deren Pfad mit einem Paketnamen beginnt und
- optional von einem Pfad gefolgt wird, wobei Pfadsegmente durch einen Schrägstrich getrennt sind.
Der Paketname kann Schrägstriche enthalten, abhängig davon, ob der jeweilige Paketmanager dies unterstützt. npm erlaubt beispielsweise Paketnamen wie @namespace/name. Beachten Sie, dass Paketnamen, die nicht-alphanumerische Zeichen enthalten, möglicherweise weniger portabel über verschiedene Paketmanager hinweg sind.
pkg: Importer müssen die folgenden Muster ablehnen.
- Eine URL, deren Pfad mit
/beginnt. - Eine URL mit nicht-leerem/null Benutzername, Passwort, Host, Port, Abfrage oder Fragment.
Wenn ein pkg: Importer auf eine URL stößt, die zwar gegen die Konventionen seines eigenen Paketmanagers verstößt, aber *nicht* gegen die obigen Regeln, sollte er diese URL ablehnen, anstatt einen Fehler auszulösen. Dies ermöglicht es Benutzern, bei Bedarf mehrere pkg: Importer gleichzeitig zu verwenden.
Node.js PaketS-ImporterNode.js Paket-Importer Permalink
- Dart Sass
- seit 1.71.0
- LibSass
- ✗
- Ruby Sass
- ✗
Da Sass am häufigsten im Zusammenhang mit dem Node.js-Ökosystem verwendet wird, wird es mit einem pkg: Importer geliefert, der denselben Algorithmus wie Node.js zum Laden von Sass-Stylesheets verwendet. Dies ist nicht standardmäßig verfügbar, aber es ist einfach einzuschalten .
-
Wenn Sie die JavaScript API verwenden, fügen Sie einfach
new NodePackageImporter()zur Optionimportershinzu. -
Wenn Sie die Dart API verwenden, fügen Sie
NodePackageImporter()zur Optionimportershinzu. -
Wenn Sie die Befehlszeile verwenden, übergeben Sie
--pkg-importer=node.
Wenn Sie eine pkg: URL laden, prüft der Node.js pkg: Importer die Datei package.json, um festzustellen, welche Sass-Datei geladen werden soll. Er prüft in Reihenfolge:
-
Das Feld
"exports"mit den Bedingungen"sass","style"und"default". Dies ist der empfohlene Weg für Pakete, Sass-Einstiegspunkte zukünftig bereitzustellen. -
Das Feld
"sass"oder das Feld"style", das ein Pfad zu einer Sass-Datei sein sollte. Dies funktioniert nur, wenn diepkg:URL keinen Subpfad hat –pkg:librarylädt die im Feld"sass"aufgeführte Datei, aberpkg:library/buttonlädtbutton.scssaus dem Stammverzeichnis des Pakets. -
Die Indexdatei am Stammverzeichnis des Pakets. Dies funktioniert ebenfalls nur, wenn die
pkg:URL keinen Subpfad hat.
Der Node.js pkg: Importer unterstützt die volle Bandbreite der "exports"-Funktionen, sodass Sie auch verschiedene Speicherorte für verschiedene Subpfade angeben können (beachten Sie, dass der Schlüssel die Dateiendung enthalten muss) .
{
"exports": {
".": {
"sass": "styles/index.scss",
},
"./button.scss": {
"sass": "styles/button.scss",
},
"./accordion.scss": {
"sass": "styles/accordion.scss",
}
}
}
...oder sogar Muster.
{
"exports": {
".": {
"sass": "styles/index.scss",
},
"./*.scss": {
"sass": "styles/*.scss",
},
}
}
CSS ladenCSS laden Permalink
Neben dem Laden von .sass und .scss Dateien kann Sass auch einfache .css Dateien laden.
SCSS-Syntax
// code.css
code {
padding: .25em;
line-height: 0;
}
// style.scss
@use 'code';
Sass-Syntax
// code.css
code {
padding: .25em;
line-height: 0;
}
// style.sass
@use 'code'
CSS-Ausgabe
code {
padding: .25em;
line-height: 0;
}
CSS-Dateien, die als Module geladen werden, erlauben keine speziellen Sass-Funktionen und können daher keine Sass-Variablen, -Funktionen oder -Mixins bereitstellen. Um sicherzustellen, dass Autoren nicht versehentlich Sass in ihrem CSS schreiben, führen alle Sass-Features, die keine gültigen CSS-Features sind, zu Fehlern. Andernfalls wird das CSS unverändert gerendert. Es kann sogar erweitert werden!
Unterschiede zu @importUnterschiede zu @import Permalink
Die Regel @use soll die alte Regel @import ersetzen, aber sie ist absichtlich anders konzipiert. Hier sind einige wichtige Unterschiede zwischen den beiden:
-
@usemacht Variablen, Funktionen und Mixins nur im Geltungsbereich der aktuellen Datei verfügbar. Sie fügt sie niemals dem globalen Geltungsbereich hinzu. Dies erleichtert die Bestimmung, woher jeder Name stammt, auf den Ihre Sass-Datei verweist, und bedeutet, dass Sie kürzere Namen ohne Kollisionsrisiko verwenden können. -
@uselädt jede Datei immer nur einmal. Dies stellt sicher, dass Sie nicht versehentlich die CSS Ihrer Abhängigkeiten mehrmals duplizieren. -
@usemuss am Anfang Ihrer Datei stehen und kann nicht in Style-Regeln verschachtelt werden. -
Jede
@useRegel kann nur eine URL haben. -
@useerfordert Anführungszeichen um seine URL, auch wenn die eingrückte Syntax verwendet wird.