Cálculos
Os cálculos são como a Sass representa a função calc()
, bem como funções parecidas como clamp()
, min()
, e max()
. A Sass simplificará estas o quanto for possível, mesmo se forem combinadas com uma outra.
- Sass de Dart
- since 1.40.0
- LibSass
- ✗
- Sass de Ruby
- ✗
Os cálculos usam uma sintaxe especial que é diferente da SassScript normal. É a mesma sintaxe da calc()
de CSS, mas com habilidade adicional para usar variáveis de Sass e chamar funções de Sass. Isto significa que /
é sempre um operador de divisão dentro dum cálculo!
💡 Fato Divertido:
Os argumentos para uma chamada de função de Sass usam a sintaxe de Sass normal, ao invés da sintaxe de cálculo especial!
Tu podes também usar a interpolação num cálculo. No entanto, se fizeres, nada dentro dos parênteses que envolve esta interpolação será simplificado ou verificado o seu tipo, assim é fácil terminar com CSS verboso a mais ou mesmo inválido. No lugar de escrever calc(10px + #{$var})
, apenas escreva calc(10px + $var)
!
SimplificaçãoSimplificação permalink
A Sass simplificará as operações adjacentes nos cálculos se usarem unidades que podem ser combinadas em tempo de compilação, tais como 1in + 10px
ou 5s * 2
. Se possível, até mesmo simplificará o cálculo inteiro para um único número — por exemplo, clamp(0px, 30px, 20px)
retornará 20px
.
⚠️ Atenção!
Isto significa que uma expressão de cálculo não retornarão sempre necessariamente um cálculo! Se estiveres a escrever uma biblioteca de Sass, podes sempre usar a função meta.type-of()
para determinar com qual tipo estás a lidar.
Os cálculos também serão simplificados dentro de outros cálculos. Em especial, se um calc()
termina dentro de qualquer cálculo, a chamada de função será removida e será substituída por uma operação anterior simples:
OperaçõesOperações permalink
Tu não podes usar os cálculos com opções de SassScript normais como +
e *
. Se quiseres escrever algumas funções matemáticas que permitam cálculos apenas as escreva dentro sua própria expressões de calc()
— Se forem passada uma mão-cheia de números com unidades compatíveis, retornarão números simples também, e se forem passados cálculos retornarão cálculos.
Esta restrição está no lugar para certificar-se que se os cálculos não forem desejados, lançam um erro o mesmo cedo possível. Os cálculos não podem ser usados em toda parte que os números simples podem: eles não podem ser injetados para os identificadores de CSS (tais como .item-#{$n}
), por exemplo, não podem ser passados para as funções matemáticas embutidas da Sass. Reservar operações de SassScript para números simples esclarece exatamente onde os cálculos são permitidos e onde não são:
ConstantesConstantes permalink
- Sass de Dart
- since 1.60.0
- LibSass
- ✗
- Sass de Ruby
- ✗
Os cálculos também podem conter constantes, que são escritas como identificadores de CSS. Para compatibilidade futura com as futuras especificações da CSS, todos os identificadores são permitidos, e por padrão são apenas tratados como sequências de caracteres sem aspas que são passadas como estão.
A Sass automaticamente resolve alguns nomes de constante especiais que são especificadas na CSS para números sem unidade:
-
pi
é uma abreviatura para a constante matemática π. -
e
é uma abreviatura para a constante matemática e. -
infinity
,-infinity
, eNaN
representam os valores de ponto flutuante correspondentes.
min()
e max()
min() e max() permalink
- Sass de Dart
- since >=1.11.0 <1.42.0
- LibSass
- ✗
- Sass de Ruby
- ✗
A CSS adicionou suporte para as [funções min()
e max()
] no Nível 4 de Valores e Unidades, de onde foram rapidamente adotados pelo Safari para suportar o iPhoneX. Mas a Sass suportava suas próprias funções min()
e max()
muito antes disto, e precisava de ser retro-compatível com todas aquelas folhas de estilos existentes. Isto conduz para a necessidade de inteligência sintática muito especial.
Se uma chamada de função min()
e max()
é uma expressão de cálculo válida, será analisada como um cálculo. Mas logo que qualquer parte da chama conter uma funcionalidade de SassScript que não é suportado num cálculo, como o [operador modulo], é analisada como uma chamada para função min()
ou max()
principal.
Já que cálculos são simplificados aos números quando possível de qualquer modo, a única diferença de substantivo é que as funções de Sass apenas suportam unidades que podem ser combinadas em tempo de construção, assim min(12px % 10, 10%)
lançarão um erro.
⚠️ Atenção!
Outros cálculos não permitem que números sem unidades sejam adicionados a, subtraídos de, ou comparados aos números com as unidades. min()
e max()
são diferentes: para retro-compatibilidade com as funções min()
e max()
de Sass globais que permitem unidade/sem unidade misturando por razões históricas, estas unidades podem ser misturada enquanto são contidos diretamente dentro dum cálculo de min()
ou max()
.