Números
Os números na Sass têm dois componentes: o próprio número, e a sua unidade. Por exemplo, em 16px
o número é 16
e a unidade é px
. Os números podem não ter nenhuma unidade, e podem ter unidades complexas. Consulte as Unidades abaixo para mais detalhes.
SCSS Syntax
@debug 100; // 100
@debug 0.8; // 0.8
@debug 16px; // 16px
@debug 5px * 2px; // 10px*px (read "square pixels")
Sass Syntax
@debug 100 // 100
@debug 0.8 // 0.8
@debug 16px // 16px
@debug 5px * 2px // 10px*px (read "square pixels")
Os números da Sass suportam os mesmos formatos que os números da CSS, incluindo a notação científica, que é escrita com um e
entre o número e a sua potência de 10. Uma vez que o suporte para notação científica nos navegadores tem sido historicamente irregular, a Sass sempre compila-o para números completamente expandidos:
SCSS Syntax
@debug 5.2e3; // 5200
@debug 6e-2; // 0.06
Sass Syntax
@debug 5.2e3 // 5200
@debug 6e-2 // 0.06
⚠️ Atenção!
A Sass não faz distinção entre números inteiros e números decimais, então por exemplo math.div(5, 2)
retorna 2.5
ao invés de 2
. Isto é o mesmo comportamento da JavaScript, mas diferente de muitas outras linguagens de programação.
UnidadesUnidades permalink
A Sass tem poderoso suporte para manipulação de unidades baseada em como os cálculos de unidade do mundo real funcionam. Quando dois números forem multiplicados, suas unidades também são multiplicadas. Quando um número é dividido por um outro, o resultado recebe as unidades do seu numerador do primeiro número e as unidades do seu denominador do segundo número. Um número pode ter qualquer número de unidades no numerador e/ou no denominador.
SCSS Syntax
@debug 4px * 6px; // 24px*px (read "square pixels")
@debug math.div(5px, 2s); // 2.5px/s (read "pixels per second")
// 3.125px*deg/s*em (read "pixel-degrees per second-em")
@debug 5px * math.div(math.div(30deg, 2s), 24em);
$degrees-per-second: math.div(20deg, 1s);
@debug $degrees-per-second; // 20deg/s
@debug math.div(1, $degrees-per-second); // 0.05s/deg
Sass Syntax
@debug 4px * 6px // 24px*px (read "square pixels")
@debug math.div(5px, 2s) // 2.5px/s (read "pixels per second")
// 3.125px*deg/s*em (read "pixel-degrees per second-em")
@debug 5px * math.div(math.div(30deg, 2s), 24em)
$degrees-per-second: math.div(20deg, 1s)
@debug $degrees-per-second // 20deg/s
@debug math.div(1, $degrees-per-second) // 0.05s/deg
⚠️ Atenção!
Uma vez que a CSS não suporta unidades complexas como pixeis quadrado, usar um número com unidades complexas como um valor de propriedade produzirá um erro. Mesmo assim isto é uma funcionalidade disfarçada; se não estiveres acabar com a unidade correta, normalmente significa que existe algo de errado com os teus cálculos! E lembra-te de que, podes sempre usar a regra @debug
para confirmares as unidades de qualquer variável ou expressão.
A Sass converterá automaticamente entre unidades compatíveis, ainda que a unidade que escolherá para o resultado dependa de qual implementação de Sass estás a usar. Se experimentares combinar unidades incompatíveis, como 1in + 1em
, a Sass lançará um erro.
SCSS Syntax
// A CSS uma polegada como 96 pixeis.
@debug 1in + 6px; // 102px or 1.0625in
@debug 1in + 1s;
// ^^^^^^^^
// Error: Incompatible units s and in.
Sass Syntax
// A CSS uma polegada como 96 pixeis.
@debug 1in + 6px // 102px or 1.0625in
@debug 1in + 1s
// ^^^^^^^^
// Error: Incompatible units s and in.
De acordo com os cálculos de unidade no mundo real, ase o numerador contém unidades que são compatíveis com as unidades no denominador (como math.dv(96px, 1in)
), anular-se-ão. Isto torna fácil definir uma proporção que podes usar ou converter entre unidades. No exemplo abaixo, definimos a velocidade desejada para um segundo por 50 pixeis, e depois multiplicamos este pelo número de pixeis que a transição ocupa para receber o tempo deveria levar.
SCSS Syntax
@use 'sass:math';
$transition-speed: math.div(1s, 50px);
@mixin move($left-start, $left-stop) {
position: absolute;
left: $left-start;
transition: left ($left-stop - $left-start) * $transition-speed;
&:hover {
left: $left-stop;
}
}
.slider {
@include move(10px, 120px);
}
Sass Syntax
@use 'sass:math'
$transition-speed: math.div(1s, 50px)
@mixin move($left-start, $left-stop)
position: absolute
left: $left-start
transition: left ($left-stop - $left-start) * $transition-speed
&:hover
left: $left-stop
.slider
@include move(10px, 120px)
CSS Output
.slider {
position: absolute;
left: 10px;
transition: left 2.2s;
}
.slider:hover {
left: 120px;
}
⚠️ Atenção!
Se a tua aritmética dá-te a unidade errada, provavelmente precisarás de verificar a tua matemática. Tu podes estar a deixar de usar as unidades para uma quantidade que deveria té-las! Ser claro quanto a unidade permite a Sass dar-te erros úteis quando algo não estiver correto.
Tu deverias de maneira especial evitar usar interpolação como #{$number}px
. Isto na verdade não cria um número! Isto cria uma sequência de caracteres não citada ou que não é envolvida por aspas que se parece como um número, mas não funcionará com quaisquer operações de número ou funções. Tente tornar a tua matemática clara quanto a unidade para que $number
já tenha a unidade px
, ou escreva $number * 1px
.
⚠️ Atenção!
As percentagens na Sass funcionam tal como toda outra unidade. Elas não são permutáveis com decimais, porque nos decimais e percentagens de CSS significam coisas diferentes. Por exemplo, 50%
é um número com %
como sua unidade, e a Sass o considera diferente do número 0.5
.
Tu podes converter entre decimais e percentagens usando a aritmética de unidade. math.div($percentage, 100%)
retornará o decimal correspondente, e $decimal * 100%
retornará a percentagem correspondente. Tu podes também usar a função math.percentage()
como uma maneira mais explícita de escrever $decimal * 100%
.
PrecisãoPrecisão permalink
- Sass de Dart
- ✓
- LibSass
- ✗
- Sass de Ruby
- since 3.5.0
A LibSass e versões mais antigas da Sass de Ruby predefinem para 5 dígitos de precisão numérica, mas podem ser configuradas para usar um número diferente. É recomendado que os utilizadores as configurem para 10 dígitos para mais exatidão e compatibilidade avançada.
Os números da Sass suportam até 10 dígitos de precisão depois do ponto decimal. Isto significa algumas coisas diferentes:
-
Apenas os primeiros dez dígitos de um número depois do ponto decimal será incluído na CSS gerada.
-
Operações como
==
e>=
considerarão dois números equivalentes se forem o mesmo até o décimo dígito depois do ponto decimal. -
Se um número for menor do que
0.0000000001
longe de um inteiro, é considerado como um inteiro para os fins de funções comolist.nth()
que exigem argumentos inteiros.
SCSS Syntax
@debug 0.012345678912345; // 0.0123456789
@debug 0.01234567891 == 0.01234567899; // true
@debug 1.00000000009; // 1
@debug 0.99999999991; // 1
Sass Syntax
@debug 0.012345678912345 // 0.0123456789
@debug 0.01234567891 == 0.01234567899 // true
@debug 1.00000000009 // 1
@debug 0.99999999991 // 1
💡 Fato Divertido:
Os números arredondados para 10 dígitos de precisão preguiçosamente quando são usados num lugar onde a precisão é relevante. Isto significa que função matemáticas trabalharão com valor do número completo internamente para evitar acumular erros de arredondamentos adicionais.