DEV Community

Cover image for Criando classes dinâmicas com SCSS.
Vinicius Rodrigues
Vinicius Rodrigues

Posted on • Edited on

3 1 1

Criando classes dinâmicas com SCSS.

Classes dinâmicas

O problema

Para começar, vou te sugerir um problema. Você está criando um arquivo de estilos padrão, nele você quer ter classes básicas para acelerar o desenvolvimento. Se fosse fazer isso da forma mais simples (e trabalhosa) as classes personalizadas de um margin-left ficariam mais ou menos assim:

.ml-1{
  margin-left: 4px;
}
.ml-2{
  margin-left: 8px;
}
.ml-3{
  margin-left: 12px;
}
Enter fullscreen mode Exit fullscreen mode

(Note que para cada número estou adicionando 4px. Esse é o padrão de spacing do vuetify, ferramenta que uso atualmente e que motivou esse artigo.)

Nesse caso, além de escrever muitas classes (até onde iria? ml-16?) ainda criaríamos um problema, e se um dia por exemplo eu precisar mudar meu padrão de 4px para 2px? Sim, precisaríamos alterar todas as classes!!!

Mas calma, somos uma civilização avançada e temos frameworks que entregam muitas e muitas classes com muitas alternativas. O Bootstrap e o Vuetify que citei antes são bons exemplos. Porém nem todos os casos estão cobertos, no vuetify por exemplo não tenho a opção de usar o gap dinamicamente, olha uma tentativa de gap com 8px aí:

<div class="gap-2">
 ...
</div>
Enter fullscreen mode Exit fullscreen mode

Como o vuetify não me entrega isso nativamente então terei que criar, sendo assim vamos botar a mão na massa.

A solução

Para começar, vamos precisar adicionar no nosso arquivo .scss algo que percorra uma lista de números e gere algo a partir dela. Simplificando, vamos fazer um for.

@for $i from 0 through 16 {
  ...
}
Enter fullscreen mode Exit fullscreen mode

E agora precisamos definir nossa classe, vou chamar ela de flex-gap mas fique a vontade para definir outro nome.

@for $i from 0 through 16 {
  .flex-gap-#{$i} {
    gap: #{$i * 4}px;
  }
}
Enter fullscreen mode Exit fullscreen mode

Lembra da regra dos 4px? ela está sendo aplicada ali no nosso loop, por exemplo, na posição 1 do nosso loop teremos:

i = 1
nome da classe = .flex-gap-1
gap = 4px

Nesse caso, teremos nossas 16 classes em apenas algumas linhas de código. Sem contar que teremos a classe flex-gap-0, você poderia usá-la para remover o gap de algum elemento caso necessário.

Agora é só usar sua classe customizada! Você pode ver um exemplo funcional aqui.

Se isso te ajudou deixa um comentário aí e fique a vontade pra me dar um oi no Linkedin

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay