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