SASS e BEM
Este artigo explica SASS e BEM.
Vamos explicar os conceitos e métodos de implementação para evitar a confusão e a fragilidade que tendem a ocorrer quando o CSS cresce em larga escala, usando SASS e BEM, com exemplos concretos.
YouTube Video
SASS e BEM
À medida que o número de arquivos e telas aumenta, o CSS tende a enfrentar problemas como 'Não sei onde esse estilo está definido' e 'Uma pequena alteração quebrou a aparência em outra tela.'.
Isso ocorre porque o CSS é intrinsecamente uma linguagem que não impõe regras de design. Se você continuar escrevendo assim, as dependências não intencionais vão aumentar.
SASS e BEM são técnicas práticas para transformar o CSS de algo escrito de forma ad hoc em algo projetado e gerenciável, prevenindo assim esses problemas. Ao combinar os dois, você pode esclarecer o significado dos estilos e, ao mesmo tempo, melhorar a legibilidade, reutilização e manutenção.
Razões pelas quais o CSS facilmente se torna difícil de gerenciar
CSS como o exemplo a seguir pode se tornar difícil de entender como se comporta quando você revisita o código mais tarde.
1.title {
2 font-size: 16px;
3 color: #333;
4}
5
6.container .title {
7 font-size: 18px;
8}
9
10.sidebar .container .title {
11 color: red;
12}- Neste exemplo, a mesma classe
.titleparece diferente dependendo de onde está situada, então você não pode saber instantaneamente qual estilo será aplicado a essa.title. - Dessa forma, à medida que os seletores se tornam mais profundos e dependentes dos elementos-pai, o CSS se torna mais difícil de prever o escopo de influência e tende a quebrar quando modificado.
BEM é uma convenção de nomenclatura que 'expressa papéis por meio dos nomes'
BEM significa Bloco / Elemento / Modificador, e inclui no nome qual componente a classe representa e em que estado se encontra.
- Bloco é um componente independente.
- Elemento é um elemento interno do Bloco.
- Modificador se refere a um estado ou variação.
1.card {}
2.card__title {}
3.card--highlighted {}Com esta convenção de nomes, você pode inferir a estrutura e o papel apenas olhando para o HTML.
Forma básica de HTML usando BEM
Aqui está um exemplo de uma interface de cartão expressa em HTML usando BEM.
1<div class="card card--highlighted">
2 <h2 class="card__title">Title</h2>
3 <p class="card__text">Description</p>
4</div>Somente pelos nomes das classes, você pode entender que este é um 'componente card', 'title dentro dele' e o 'estado enfatizado'. Esta é a maior vantagem do BEM.
No entanto, o BEM sozinho pode resultar em CSS prolixo.
Se você escrever BEM como está no CSS, a quantidade de código tende a aumentar.
1.card {
2 padding: 16px;
3}
4
5.card__title {
6 font-size: 18px;
7}
8
9.card__text {
10 font-size: 14px;
11}
12
13.card--highlighted {
14 border: 2px solid orange;
15}Aqui, ao usar SASS, você pode ter código organizado que mantém a estrutura.
Expresse BEM de forma natural com o aninhamento do SASS
Ao usar o aninhamento do SASS, você pode refletir a estrutura do BEM diretamente no seu código.
1.card {
2 padding: 16px;
3
4 &__title {
5 font-size: 18px;
6 }
7
8 &__text {
9 font-size: 14px;
10 }
11
12 &--highlighted {
13 border: 2px solid orange;
14 }
15}& se refere ao seletor pai e funciona muito bem com a nomenclatura BEM.
CSS gerado a partir deste SASS
O SASS acima é compilado em CSS como o seguinte.
1.card {
2 padding: 16px;
3}
4
5.card__title {
6 font-size: 18px;
7}
8
9.card__text {
10 font-size: 14px;
11}
12
13.card--highlighted {
14 border: 2px solid orange;
15}Mesmo com a aparência igual, a carga cognitiva para o desenvolvedor é significativamente reduzida.
Projetando para o uso seguro de Modificadores
Como os Modificadores no BEM representam 'estados', o segredo é limitá-los para uso apenas em sobrescritas.
1.button {
2 padding: 8px 12px;
3 background: #eee;
4
5 &--primary {
6 background: blue;
7 color: white;
8 }
9
10 &--disabled {
11 opacity: 0.5;
12 pointer-events: none;
13 }
14}O design se torna mais estável se os Modificadores forem tratados não como 'adições', mas como 'alterações'.
Limite o aninhamento de Elementos a um nível
No BEM, é importante não aninhar elementos muito profundamente.
1.card {
2 &__header {
3 font-weight: bold;
4 }
5
6 &__body {
7 margin-top: 8px;
8 }
9}Elementos de vários níveis como .card__header__title são um sinal de que você deveria considerar dividir o Bloco.
Um exemplo de estrutura de arquivos SASS
Por fim, aqui está um exemplo de estrutura SASS que é prática para projetos reais.
1styles/
2├── base/
3│ └── reset.scss
4├── components/
5│ ├── card.scss
6│ └── button.scss
7├── layout/
8│ └── header.scss
9└── main.scssSe você gerenciar cada componente como 1 bloco = 1 arquivo, é menos provável que haja problemas.
Exemplo de card.scss
1.card {
2 padding: 16px;
3 border: 1px solid #ccc;
4
5 &__title {
6 font-size: 18px;
7 }
8
9 &__text {
10 color: #666;
11 }
12}Como tudo está contido nesta unidade, exclusão, movimentação e reutilização se tornam fáceis.
Resumo
SASS e BEM não são apenas técnicas modernas—são abordagens práticas para transformar CSS em um código projetável.
- BEM nomeia o significado e o papel.
- O SASS permite uma escrita fácil mantendo a estrutura.
- Combinar ambos torna o CSS menos propenso a quebras.
Vamos escrever o CSS hoje de uma forma que seu eu futuro possa entender.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.