CSS Organizado: BEM, SMACSS e Atomic para Projetos Modernos

A organização do código CSS é um dos pontos que mais gera desafios para desenvolvedores, principalmente em projetos com diversas páginas e componentesTags e Elementos: Sintaxe e HierarquiaTags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis.. Neste tutorial, vamos explorar três metodologias amplamente utilizadas para manter o código CSS limpo, escalável e de fácil manutenção: BEM, SMACSS e Atomic CSSO que é CSS?O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade.. A proposta é apresentar cada metodologia de forma narrativa, mostrando seus conceitos centrais, características e vantagens.

Introdução🔗

Imagine que você tem um projeto crescendo rapidamente, e o seu arquivo CSS está ficando cada vez maior e desorganizado. De repente, não é mais tão simples identificar quais classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. afetam cada parte do layout. Pior ainda, qualquer mudança pode quebrar outras seções da página. Para prevenir (ou resolver) esse tipo de caos, surgem as metodologias CSS: conjuntos de boas práticas que ajudam a criar padrões de organização, nomenclatura e manutenção do código.

Metodologias como BEM, SMACSS e Atomic CSSO que é CSS?O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade. são referências sólidas para quem busca consistência e escalabilidadeSVG e Canvas: Diferenças e Usos BásicosSVG e Canvas: Diferenças e Usos BásicosDescubra as diferenças entre SVG e Canvas com este guia completo. Entenda nuances, técnicas de desenho e boas práticas para gráficos web.. Elas apontam caminhos para:

BEM (Block, Element, Modifier)🔗

BEM é um acrônimo para Block, Element, Modifier. Ele foi criado por desenvolvedores da Yandex e se popularizou como uma forma de nomear classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. que reflitam a estrutura e o papel dos elementosTags e Elementos: Sintaxe e HierarquiaTags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis..

Conceito de Bloco, Elemento e Modificador

Exemplo de Nomenclatura

Considere um botão com duas variações de corSeletores e Propriedades CSS EssenciaisSeletores e Propriedades CSS EssenciaisAprenda a dominar o CSS com nosso tutorial completo: entenda seletores, propriedades essenciais e técnicas para criar layouts modernos e atrativos. (primário e secundário). Em BEM, você poderia ter algo assim:

<button class="button button--primary">
  Comprar
</button>
<button class="button button--secondary">
  Cancelar
</button>

A ideia é que button seja o bloco, pois é independente e autoexplicativo. Já button--primary e button--secondary são modificadores que representam diferentes estilos do mesmo bloco.

Se houvesse um ícone interno nesse botão, poderíamos nomear o elementoTags e Elementos: Sintaxe e HierarquiaTags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. assim:

<button class="button button--primary">
  <span class="button__icon"></span>
  Comprar
</button>

Note que button__icon é um elementoTags e Elementos: Sintaxe e HierarquiaTags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. (parte do bloco) e o --primary é um modificador.

Vantagens do BEM

SMACSS (Scalable and Modular Architecture for CSS)🔗

SMACSS é outra metodologia que visa criar um ambiente modular para o CSS. O foco é organizar o código em categorias que englobem diferentes aspectos do estiloRelação entre HTML e CSSRelação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho..

Conceito de Categorias

No SMACSS, geralmente temos cinco categorias de arquivos ou seções de código:

1. Base: Estilos globais ou padrões, como resets e tipografiaTrabalhando com Fontes, Cores e FundosTrabalhando com Fontes, Cores e FundosDescubra neste tutorial completo como aplicar corretamente fontes, cores e fundos em sua página web, garantindo um design moderno e funcional. genérica.

2. Layout: Divisão em grandes áreas da página (header, footer, sidebar).

3. Module (MóduloTratamento de Módulos e BundlersTratamento de Módulos e BundlersDescubra como módulos e bundlers revolucionaram o desenvolvimento JavaScript, promovendo organização, performance e escalabilidade em aplicações modernas.): Partes menores e reutilizáveis (cards, formuláriosIntrodução a Formulários: `<form>`, `action`, `method`Introdução a Formulários: `<form>`, `action`, `method`Explore este tutorial sobre formulários HTML, conhecendo a função dos atributos action e method para envio seguro e organizado dos dados do usuário., botões).

4. State (Estado): Define como algo deve parecer ou funcionar em determinado momento (ativo, desabilitado, etc.).

5. Theme (Tema): Variações temáticas de estiloRelação entre HTML e CSSRelação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho. (claro, escuro, etc.).

Exemplo de Organização

A ideia é que você crie arquivos (ou seções dentro de um arquivo maior) para cada categoria. Por exemplo:

  • _base.scss
  • _layout.scss
  • _module.button.scss
  • _state.interactions.scss
  • _theme.dark.scss

Aqui, cada componente (por exemplo, um botão) vai ter o seu estiloRelação entre HTML e CSSRelação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho. (o que chamamos de module no SMACSS). Se o botão tiver diferentes estados, como “ativo” ou “desabilitado”, eles poderiam ser incluídos no arquivo de estados (_state.interactions.scss) ou dentro do próprio móduloTratamento de Módulos e BundlersTratamento de Módulos e BundlersDescubra como módulos e bundlers revolucionaram o desenvolvimento JavaScript, promovendo organização, performance e escalabilidade em aplicações modernas., dependendo do seu fluxo de trabalho.

Vantagens do SMACSS

Atomic CSS🔗

Atomic CSSO que é CSS?O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade. dá um passo além na ideia de classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. altamente específicas e atomizadas. Em vez de escrever classificações complexas, o Atomic CSS propõe classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. que representam uma única propriedadeClasses e Herança em ES6+Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. ou estiloRelação entre HTML e CSSRelação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho..

Conceito de Classes Atômicas

Em Atomic CSS, você costuma ver classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. como:

.bg-red { background-color: red; }
.text-center { text-align: center; }
.mt-1 { margin-top: 1rem; }

Cada classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. realiza apenas uma tarefa. Isso se assemelha à ideia de utilitários (utilities), em que você aplica várias classes para construir a aparênciaRelação entre HTML e CSSRelação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho. final de um elemento.

Exemplo de Uso

Em vez de ter uma classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. .header cheia de declarações, você aplicaria diversas classesAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. atômicas diretamente no HTML:

<header class="bg-red text-center mt-1">
  <h1>Exemplo de Header</h1>
</header>

Aqui, bg-red define a cor de fundoSeletores e Propriedades CSS EssenciaisSeletores e Propriedades CSS EssenciaisAprenda a dominar o CSS com nosso tutorial completo: entenda seletores, propriedades essenciais e técnicas para criar layouts modernos e atrativos., text-center o alinhamento e mt-1 o espaçamento superior, sem misturar responsabilidades numa única classeAtributos HTML: `id`, `class`, `style`, `data-*`Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência..

Vantagens do Atomic CSS

Escolhendo a Metodologia🔗

A escolha de uma metodologia não é uma decisão universal; depende do tamanho, complexidade e fluxo de trabalho do seu projeto (ou equipe). Contudo, entender BEM, SMACSS e Atomic CSSO que é CSS?O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade. fornece bases sólidas para manter seu código organizado e escalável.

MetodologiaResumoPara Quem é Indicada?
BEMEstrutura clara baseada em blocos, elementos e modificadores. Facilita a leitura das classes.Equipes que valorizam convenções de nomenclatura robustas.
SMACSSOrganização em categorias (base, layout, module, state, theme). Mais flexível em nomenclatura.Projetos de médio/grande porte que queiram módulos bem definidos.
Atomic CSSClasses utilitárias para cada declaração, aplicadas diretamente no HTML.Projetos focados em prototipagem rápida ou times que buscam alta reutilização.

Conclusão🔗

Manter o CSSO que é CSS?O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade. organizado não é apenas questão de estética no repositório, mas uma garantia de produtividade, rapidez na entrega e facilidade de evolução do seu projeto. Metodologias como BEM, SMACSS e Atomic CSSO que é CSS?O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade. apresentam diferentes formas de resolver os mesmos problemas de escalaTransformações: translate(), rotate(), scale(), skew()Transformações: translate(), rotate(), scale(), skew()Aprenda a aplicar transformações em CSS como translate, rotate, scale e skew para criar layouts dinâmicos e visuais impactantes sem alterar o fluxo da página. e manutenção.

Avalie as necessidades de cada projeto e experimente uma dessas metodologias para manter seu código limpo, robusto e, sobretudo, manutenível.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados