Variáveis
As variáveis da Sass são simples: atribuis um valor à um nome que começa com $
, e depois podes fazer referência àquele nome ao lugar do próprio valor. Mas apesar da sua simplicidade, são uma das ferramentas mais úteis que a Sass trás para a mesa. As variáveis tornam possível reduzir a repetição, fazer cálculos complexos, configurar bibliotecas, e muito mais.
Uma declaração de variável parece-se muito com uma declaração de propriedade: é escrita <variable>: <expression>
. Diferente duma propriedade, a qual pode apenas ser declarada numa regra de estilo ou regra que usa arroba, as variáveis podem ser declaradas em qualquer parte que quiseres. Para usares uma variável, apenas inclua-a num valor:
SCSS Syntax
$base-color: #c6538c;
$border-dark: rgba($base-color, 0.88);
.alert {
border: 1px solid $border-dark;
}
Sass Syntax
$base-color: #c6538c
$border-dark: rgba($base-color, 0.88)
.alert
border: 1px solid $border-dark
CSS Output
.alert {
border: 1px solid rgba(198, 83, 140, 0.88);
}
⚠️ Atenção!
A CSS tem suas próprias variáveis, as quais são totalmente diferentes das variáveis de Sass. Conheça as diferenças!
-
As variáveis de Sass são compiladas pela Sass. As variáveis de CSS são incluídas na saída de CSS.
-
As variáveis de CSS podem ter valores diferentes para elementos diferentes, mas as variáveis de Sass apenas têm um valor de cada vez.
-
As variáveis de Sass são imperativas, o que significa que se usas uma variável e depois mudares o seu valor, o uso anterior continuará o mesmo. As variáveis de CSS são declarativas, o que significa se mudares o valor, afetará tanto o uso anteriores e posteriores.
💡 Fato Divertido:
As variáveis de Sass, tal como todos os identificadores de Sass, tratam os hífens e sublinhados como idênticos. Isto significa que ambos $font-size
e $font_size
referem-se a mesma variável. Isto é um comportamento histórico que vem desde os primeiros dias da Sass, quando apenas permitia sublinhados como nomes de identificador. Assim que a Sass adicionou suporte para hífens para corresponder a sintaxe da CSS, os dois foram tornados equivalentes para tornar a migração mais fácil.
Valores PadrãoValores Padrão permalink
Normalmente quando atribuímos um valor para uma variável, se esta variável já tiver um valor, o seu valor anterior é sobrescrito. Mas se estiveres a escrever uma biblioteca de Sass, podes querer permitir que os teus utilizadores configurem as variáveis da tua biblioteca antes de usá-las para gerar o CSS.
Para tornar isto possível, a Sass fornece a opção !default
. Esta atribui um valor à uma variável apenas se esta variável não estiver definida ou seu valor for null
. De outro modo, o valor existente será usado.
Configurando MódulosConfigurando Módulos permalink
- 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
.
As variáveis definidas com !default
podem ser configuradas quando carregas um módulo com a regra @use
. As bibliotecas de Sass frequentemente usam variáveis !default
para permitir seus utilizadores configurarem a CSS da biblioteca.
Para carregares um módulo com configuração, escreve @use <url> com (<variable>: <value>, <variable>: <value>)
. Os valores configurados sobreporão as os valores padrão da variáveis. Apenas variáveis escritas no alto nível da folha de estilo com a palavra-chave !default
podem ser configuradas.
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);
}
Variáveis EmbutidasVariáveis Embutidas permalink
As variáveis que são definidas por um módulo embutido não podem ser modificadas.
SCSS Syntax
@use "sass:math" as math;
// Esta atribuição falhará.
math.$pi: 0;
Sass Syntax
@use "sass:math" as math
// Esta atribuição falhará.
math.$pi: 0
ÂmbitoÂmbito permalink
As variáveis declaras no alto nível de uma folha de estilo são globais. Isto significa que são acessadas em qualquer parte nos seus módulos depois terem sido declaradas. Mas isto não é verdade para todas as variáveis. Aquelas variáveis declaradas nos blocos (chavetas na SCSS ou código indentado na Sass) são normalmente locais, e podem apenas ser acessadas dentro do bloco que foram declaradas.
SCSS Syntax
$global-variable: global value;
.content {
$local-variable: local value;
global: $global-variable;
local: $local-variable;
}
.sidebar {
global: $global-variable;
// Isto falharia, porque $local-variable não está no âmbito:
// local: $local-variable;
}
Sass Syntax
$global-variable: global value
.content
$local-variable: local value
global: $global-variable
local: $local-variable
.sidebar
global: $global-variable
// Isto falharia, porque $local-variable não está no âmbito:
// local: $local-variable
CSS Output
.content {
global: global value;
local: local value;
}
.sidebar {
global: global value;
}
SombreandoSombreando permalink
As variáveis locais podem mesmo ser declaradas com o mesmo nome como uma variável global. Se isto acontecer, existem na realidade dois variáveis diferentes com o mesmo nome: uma local e uma global. Isto ajuda a garantir que um autor escrevendo uma variável local não muda acidentalmente o valor de uma variável global de que não estão consciente:
SCSS Syntax
$variable: global value;
.content {
$variable: local value;
value: $variable;
}
.sidebar {
value: $variable;
}
Sass Syntax
$variable: global value
.content
$variable: local value
value: $variable
.sidebar
value: $variable
CSS Output
.content {
value: local value;
}
.sidebar {
value: global value;
}
Se precisares de definir um valor da variável global de dentro de um âmbito local (tal como numa mistura), podes usar a palavra-chave !global
. Uma declaração de variável marcada como !global
sempre atribuirá para o âmbito global.
SCSS Syntax
$variable: first global value;
.content {
$variable: second global value !global;
value: $variable;
}
.sidebar {
value: $variable;
}
Sass Syntax
$variable: first global value
.content
$variable: second global value !global
value: $variable
.sidebar
value: $variable
CSS Output
.content {
value: second global value;
}
.sidebar {
value: second global value;
}
⚠️ Atenção!
- Sass de Dart
- since 2.0.0
- LibSass
- ✗
- Sass de Ruby
- ✗
As versões mais antigas da Sass permitiam que a !global
fosse usada para uma variável que ainda não existe. Este comportamento foi depreciado garantir que cada folha de estilo declara a mesma variável não importa como é executado.
A palavra-chave !global
apenas pode ser usada para definir uma variável que já foi declarada no alto nível dum ficheiro. Esta não pode ser usada para declarar uma nova variável.
Âmbito de Controlo de FluxoÂmbito de Controlo de Fluxo permalink
As variáveis declaradas nas regras de controlo de fluxo têm regras definição de âmbito especiais: não sombreiam as variáveis no mesmo nível como regra de controlo de fluxo. Ao invés disto, apenas atribuem para estas variáveis. Isto torna muito mais fácil de condicionalmente atribuir um valor para uma variável, ou construir um valor como parte de um laço.
SCSS Syntax
$dark-theme: true !default;
$primary-color: #f8bbd0 !default;
$accent-color: #6a1b9a !default;
@if $dark-theme {
$primary-color: darken($primary-color, 60%);
$accent-color: lighten($accent-color, 60%);
}
.button {
background-color: $primary-color;
border: 1px solid $accent-color;
border-radius: 3px;
}
Sass Syntax
$dark-theme: true !default
$primary-color: #f8bbd0 !default
$accent-color: #6a1b9a !default
@if $dark-theme
$primary-color: darken($primary-color, 60%)
$accent-color: lighten($accent-color, 60%)
.button
background-color: $primary-color
border: 1px solid $accent-color
border-radius: 3px
CSS Output
.button {
background-color: #750c30;
border: 1px solid #f5ebfc;
border-radius: 3px;
}
⚠️ Atenção!
As variáveis no âmbito do controlo de fluxo podem atribuir para variáveis existentes no âmbito externo, mas novas variáveis declaradas no controlo de fluxo não serão acessíveis no âmbito externo. Certifica-te de que a variável já foi declarada antes de atribuires à ela, mesmo se precisares de declará-la como null
.
Funções de Variável AvançadasFunções de Variável Avançadas permalink
A biblioteca fundamental da Sass fornece algumas funções avançadas para trabalhar com variáveis. A função meta.variable-exists()
retorna se uma variável com o dado nome existe no âmbito atual, e a função meta.global-variable-exists()
faz o mesmo mas apenas para o âmbito global.
⚠️ Atenção!
Os utilizadores querem ocasionalmente usar interpolação para definir um nome de variável baseada em uma outra variável. A Sass não permite isto, porque torna muito mais difícil dizer de relance quais variáveis são definidas onde. O que podes fazer, é definir um mapa a partir dos nomes para as variáveis que podes depois acessar usando variáveis.
SCSS Syntax
@use "sass:map";
$theme-colors: (
"success": #28a745,
"info": #17a2b8,
"warning": #ffc107,
);
.alert {
// No lugar de $theme-color-#{warning}
background-color: map.get($theme-colors, "warning");
}
Sass Syntax
@use "sass:map"
$theme-colors: ("success": #28a745, "info": #17a2b8, "warning": #ffc107)
.alert
// No lugar de $theme-color-#{warning}
background-color: map.get($theme-colors, "warning")
CSS Output
.alert {
background-color: #ffc107;
}