Mudança de Rutura: Barra como Divisão
A Sass atualmente trata / como uma operação de divisão em alguns contextos e um separador em outros. Isto torna difícil para os utilizadores da Sass dizer o que qualquer dada / significará, e dificulta trabalhar com as novas funcionalidades da CSS que usam / como separador.
- Sass de Dart
- partial
- LibSass
- ✗
- Sass de Ruby
- ✗
Hoje, a Sass usa heurísticas complexas para compreender se uma / deveria ser tratada como divisão ou um separador. Mesmo assim, uma vez que um separador apenas produz uma sequência de caracteres sem aspas é difícil inspecionar a partir de dentro da Sass. Conforme mais e mais funcionalidades de CSS como Grade de CSS e a nova sintaxe de rgb() e hsl() usam / como um separador, está a tornar-se ainda mais penoso para os utilizadores da Sass.
Uma vez que a Sass é um superconjunto de CSS, estamos a combinar a sintaxe da CSS redefinindo / para ser apenas um separador. / será tratado como um novo tipo de separador de lista, semelhante a como , funciona hoje. A divisão será escrita usando a nova função math.div(). Esta função comportar-se-á exatamente como / hoje.
Esta depreciação não afeta os usos de / dentro de expressões de calc():
SCSS Syntax
@use "sass:math";
// Sass do futuro, ainda não funciona!
.item3 {
$row: span math.div(6, 2) / 7; // Uma lista separada por barra de dois elementos.
grid-row: $row;
}
Sass Syntax
@use "sass:math"
// Sass do futuro, ainda não funciona!
.item3
$row: span math.div(6, 2) / 7 // // Uma lista separada por barra de dois elementos.
grid-row: $row
CSS Output
.item3 {
grid-row: span 3 / 7;
}
Período de TransiçãoPeríodo de Transição permalink
- Sass de Dart
- since 1.33.0
- LibSass
- ✗
- Sass de Ruby
- ✗
Para facilitar a transição, começamos por adicionar a função math.div(). Por agora o operador / continua a fazer divisão, mas também imprime um aviso de depreciação quando o faz. Os utilizadores deveriam trocar todas as divisões para usarem math.div():
💡 Fato Divertido:
Lembra-te de que, podes silenciar os avisos de depreciação de bibliotecas que não controlas! Se estiveres a usar a interface da linha de comando podes passar a opção --quiet-deps, e se estiveres a usar a API de JavaScript podes definir a opção quietDeps para true.
SCSS Syntax
@use "sass:math";
// ERRADO, não funcionará nas futuras versões da Sass.
@debug (12px/4px); // 3
// CERTO, funcionará nas futuras versões da Sass.
@debug math.div(12px, 4px); // 3
Sass Syntax
@use "sass:math"
// ERRADO, não funcionará nas futuras versões da Sass.
@debug (12px/4px) // 3
// CERTO, funcionará nas futuras versões da Sass.
@debug math.div(12px, 4px) // 3
As listas separadas por barra também estarão disponíveis no período de transição. Uma vez que ainda não podem ser criadas com /, a função list.slash() será adicionada para criá-las. Tu também serás capaz de passar "slash" como o $separator para a função list.join() e a função list.append():
SCSS Syntax
@use "sass:list";
@use "sass:math";
.item3 {
$row: list.slash(span math.div(6, 2), 7);
grid-row: $row;
}
Sass Syntax
@use "sass:list"
@use "sass:math"
.item3
$row: list.slash(span math.div(6, 2), 7)
grid-row: $row
CSS Output
.item3 {
grid-row: span 3 / 7;
}
- Sass de Dart
- since 1.40.0
- LibSass
- ✗
- Sass de Ruby
- ✗
Alternativamente, os utilizadores podem envolver os operadores de divisão dentro duma expressão de calc(), o qual a Sass simplificará para um único número:
SCSS Syntax
// ERRADO, não funcionará nas futuras versões da Sass.
@debug (12px/4px); // 3
// CERTO, funcionará nas futuras versões da Sass.
@debug calc(12px / 4px); // 3
Sass Syntax
// ERRADO, não funcionará nas futuras versões da Sass.
@debug (12px/4px) // 3
// CERTO, funcionará nas futuras versões da Sass.
@debug calc(12px / 4px) // 3
Migração AutomáticaMigração Automática permalink
Tu podes usar o migrador da Sass para atualizar automaticamente as tuas folhas de estilo para usarem math.div() e list.slash().
$ npm install -g sass-migrator
$ sass-migrator division **/*.scss