@use
- Sass de Dart
- since 1.23.0
- LibSass
- ✗
- Sass de Ruby
- ✗
Atualmente apenas a Sass de Dart suporta @use
. Os utilizadores de outras implementações devem usar a regra @import
.
A regra @use
carrega misturas, funções, e variáveis a partir das folhas de estilo de Sass, e combina junto a CSS a partir de várias folhas de estilo. As folhas de estilo carregadas pela @use
são chamadas de “módulos”. A Sass também fornece módulos embutidos cheios de funções úteis.
A regra @use
mais simples é escrita com @use "<url>"
, a qual carrega o módulo na dada URL. Quaisquer estilos carregado desta maneira será incluído exatamente uma vez na saída de CSS compilada, não importa quantas vezes estes estilos são carregados.
⚠️ Atenção!
As regras @use
duma folha de estilo deve vir antes de quaisquer regras exceto @forward
, incluindo regras de estilo. No entanto, podes declarar as variáveis antes das regras @use
para usares quando configurares os módulos.
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 Output
code {
padding: .25em;
line-height: 0;
}
ul, ol {
text-align: left;
}
ul ul, ol ol {
padding-bottom: 0;
padding-left: 0;
}
Carregando MembrosCarregando Membros permalink
Tu podes acessar variáveis, funções, e misturas dum outro módulo escrevendo <namespace>.<variable>
, <namespace>.<function>()
, ou @include <namespace>.<mixin>()
. Por padrão, o espaço de nome é apenas o último componente da URL do módulo.
Os membros (variáveis, funções, e misturas) carregados com @use
estão apenas visíveis na folha de estilo que carrega-os. Outras folhas de estilo precisarão de escrever suas próprias regras @use
se também quiserem acessá-los. Isto ajuda a tornar fácil compreender exatamente de onde cada membro está a vir. Se quiseres carregar membros a partir de vários ficheiros de um vez, podes usar a regra @forward
para expedi-los a todos a partir de um ficheiro partilhado.
💡 Fato Divertido:
Uma vez que @use
adiciona espaços de nome aos nomes do membro, é seguro escolher nomes muito simples como $radius
ou $width
quando escreves uma folha de estilo. Isto é diferente de da antiga regra @import
, que encorajava que os utilizadores escrevessem nomes longos como $mat-corner-radius
para evitar conflitos com outras bibliotecas, e ajuda a manter as tuas folhas de estilo claras e fáceis de ler!
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 Output
.button {
border-radius: 3px;
padding: 8px;
}
Escolhendo um Espaço de NomeEscolhendo um Espaço de Nome permalink
Por padrão, um espaço de nome do módulo é apenas o último componente da sua URL sem uma extensão de ficheiro. No entanto, algumas vezes podes querer escolher um espaço de nome diferente — podes querer usar um nome mais curto para um módulo que referes-te muito, ou podes estar a carregar vários módulos com o mesmo nome de ficheiro. Tu podes fazer isto escrevendo @use "<url>" as <namespace>
:
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 Output
.button {
border-radius: 3px;
padding: 8px;
}
Tu podes mesmo carregar um módulo sem um espaço de nome escrevendo @use "<url>" as *
. Mesmo assim nós recomendamos-te apenas fazer isto para folhas de estilo escritas por ti; de outro modo, podem introduzir novos membros que causam conflitos de nome!
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 Output
.button {
border-radius: 3px;
padding: 8px;
}
Membros PrivadosMembros Privados permalink
Como um autor de folha de estilo, podes não querer todos os membros que defines para estarem disponíveis fora da tua folha de estilo. A Sass torna fácil definir um membro privado começando o seu nome com ou -
ou _
. Estes membros funcionarão tal como o normal dentro da folha de estilo que as define, mas serão parte duma API pública do módulo. Isto significa que as folhas de estilo que carregam o teu módulo não podem vê-las!
💡 Fato Divertido:
Se quiseres tornar um membro privado para um pacote inteiro em vez de apenas um único módulo, é só não expedir o seu módulo a partir de quaisquer pontos de entrada do pacote (as folhas de estilo que dizes aos teus utilizadores carregarem para usarem o teu pacote). Tu podes mesmo esconder este membro enquanto expedis o resto do seu módulo!
SCSS Syntax
// src/_corners.scss
$-radius: 3px;
@mixin rounded {
border-radius: $-radius;
}
// style.scss
@use "src/corners";
.button {
@include corners.rounded;
// Isto é um erro! `$-radius` não é visível fora de `_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
// Isto é um erro! `$-radius` não é visível fora de `_corners.sass`.
padding: 5px + corners.$-radius
ConfiguraçãoConfiguração permalink
Um folha estilo pode definir variáveis com a opção !default
para torná-las configuráveis. Para carregar um módulo com configuração, escreve @use <url> with (<variable>: <value>, <variable>: <value>)
. Os valores configurados sobreporão os valores padrão das variáveis:
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 Output
code {
border-radius: 0.1rem;
box-shadow: 0 0.5rem 1rem rgba(34, 34, 34, 0.15);
}
Com as MisturasCom as Misturas permalink
Configurar módulos com @use ... with
pode ser muito útil, especialmente quando usas bibliotecas que foram originalmente escritas para trabalharem com a regra @import
. Mas não é particularmente flexível, e não o recomendamos para casos de uso mais avançados. Se encontrares-te a ti mesmo querendo configurar muitas variáveis de uma vez, passe os mapas como configuração, ou atualize a configuração depois do módulo for carregado, considere escrever uma mistura que configure as tuas variáveis e uma outra mistura que injete os teus estilos:
SCSS Syntax
// _library.scss
$-black: #000;
$-border-radius: 0.25rem;
$-box-shadow: null;
/// Se o utilizador configurou `$-box-shadow`, retorna o seu valor configurado.
/// De outro modo retorna um valor derivado de `$-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
/// Se o utilizador configurou `$-box-shadow`, retorna o seu valor configurado.
/// De outro modo retorna um valor derivado de `$-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 Output
code {
border-radius: 0.1rem;
box-shadow: 0 0.5rem 1rem rgba(34, 34, 34, 0.15);
}
Reatribuindo VariáveisReatribuindo Variáveis permalink
Depois de carregar um módulo, podes reatribuir as suas variáveis:
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
Isto funciona mesmo se importares um módulo sem um espaço de nome usando as *
. Atribuir para um nome de variável definido neste módulo sobrescreverá o seu valor neste módulo.
⚠️ Atenção!
As variáveis de módulo embutido (tais como math.$pi
) não podem ser reatríbuidas.
Encontrando o MóduloEncontrando o Módulo permalink
Não seria divertido de maneira alguma escrever URLs absolutas para cada folha de estilo que carregas, então o algoritmo da Sass para encontrar um módulo torná-o um pouco mais fácil. Para começar, não tens de explicitamente escrever a extensão do ficheiro que quiseres carregar; @use "variables"
carregará automaticamente variables.scss
, variables.sass
, ou @variables.css
.
⚠️ Atenção!
Para garantir que as folhas de estilo funcionem em todos os sistemas operativos, a Sass carrega os ficheiros pela URL, e não pelo caminho do ficheiro. Isto significa que precisas de usar barras inclinadas para a direita, e não barras inclinadas para esquerdas, mesmo no Windows.
Caminhos de CarregamentoCaminhos de Carregamento permalink
Todas as implementações de Sass permitem os utilizadores fornecerem caminhos de carregamento: os caminhos no sistema de ficheiro que a Sass espreitará ao localizar os módulos. Por exemplo, se passas node_modules/susy/sass
como um caminho de carregamento, podes usar @use "susy"
para carregar node_modules/susy/sass/susy.scss
.
Mesmo assim, os módulos sempre serão carregados primeiro relativo ao ficheiro atual. Os caminhos de carregamento apenas são usados se nenhum ficheiro relativo existir que corresponde a URL do módulo. Isto garante que não possas acidentalmente fazer asneira com as tuas importações relativas quando adicionares uma nova biblioteca.
💡 Fato Divertido:
Ao contrário de outras linguagens, a Sass não exige que uses ./
para importações relativas. As importações relativas estão sempre disponíveis.
ParciaisParciais permalink
Como uma convenção, os ficheiros de Sass que estão apenas destinados a serem carregados como módulos, e não compilados por si mesmos, começam com _
(como em _code.scss
). Estes são chamados de parciais, e dizem as ferramentas da Sass para não tentarem compilar estes ficheiros por si mesmos. Tu podes deixar de usar o _
quando importares um parcial.
Ficheiros de índiceFicheiros de índice permalink
Se escrever um _index.scss
ou _index.sass
numa pasta, o ficheiro de índice será carregado automaticamente quando carregares a URL para a própria pasta:
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 Output
code {
padding: .25em;
line-height: 0;
}
ul, ol {
text-align: left;
}
ul ul, ol ol {
padding-bottom: 0;
padding-left: 0;
}
Carregando CSSCarregando CSS permalink
Além de carregar ficheiros .sass
e .scss
, a Sass pode carregar antigos e simples ficheiros .css
:
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 Output
code {
padding: .25em;
line-height: 0;
}
Os ficheiros de CSS carregados como módulos não permitem quaisquer funcionalidades de Sass especiais e então não podem expor quaisquer variáveis, funções, ou misturas de Sass. No sentido de certificar-se que os autores não escrevam acidentalmente Sass nos seus CSS, todas as funcionalidades de Sass que também não forem CSS válidas produzirão erros. De outro modo, a CSS será desenhada como está. Ela pode até mesmo ser estendida!
Diferenças da @import
Diferenças da @import permalink
A regra @use
está destinada a substituir a antiga regra @import
, mas está intencionalmente desenhada para funcionar de maneira diferente. Cá estão algumas das diferenças principais entre as duas:
-
@use
apenas torna variáveis, funções, e misturas disponíveis dentro do âmbito do atual ficheiro. Ela nunca adiciona-os ao âmbito de aplicação global. Isto torna fácil compreender de onde cada nome das referências do teu ficheiro de Sass vêm, e significa que podes usar nomes mais curtos sem qualquer risco de colisão. -
@use
só nunca carrega cada ficheiro de uma vez. Isto garante que não termines acidentalmente duplicando a CSS das tuas dependências muitas vezes até ao fim. -
@use
deve aparecer no início do teu ficheiro, e não pode ser encaixado nas regras de estilo. -
Cada regra
@use
pode apenas ter uma URL. -
@use
exige aspas em torno da sua URL, mesmo quando usas a sintaxe indentada.