Hello, SMACSS!

Cristofer Sousa
Opensanca
Published in
4 min readMar 27, 2017

Pensando em um cenário da qual o time não sabe como será o tamanho do projeto é notório que alguns dev’s comecem a escrever CSS sem avaliar a longo prazo como isso poderá ficar e com isso obviamente será necessário fazer uma nova re-escrita de CSS para facilitar o processo de manutenção das folhas de estilos do projeto.

Foi pensando nisso que Jonathan Snook criou o SMACSS da qual ele visa que você pode adota-lo independente do tamanho do seu projeto. Basicamente seu conceito é exclusivamente tratar da separação de diretórios para organizar melhor o CSS, a partir disso você ganha alguns pontos extras na vida do projeto como:

- Escalabilidade,
- Manutenibilidade
- Modularidade
- Otimização
- Especificidade

Sobre **escalabilidade**, seu projeto pode crescer de tamanho a qualquer momento que você conseguirá escalar ele sem problemas pois ele foi pensado para isso, desde o seu inicio, lembre-se dessa frase do Jonhn Resig — Write less, do more!.

Sobre **especificidade**, quando varremos alguns projetos de CSS por aí é notório encontrar **!important** perdidos pelas folhas de estilo, pois provavelmente você perdeu a regra de especificidade do elemento que estava tentando customizar.

Sobre **modularidade**, precisa ficar claro para o time que sua folha de estilo ofereça isso, pois assim pode reaproveitar o estilo do seu componente em outras páginas (reaproveitamento).

Sobre **manutenibilidade**, cogite que você esteja trabalhando com um único arquivo de 1500 linhas e a cada alteração essa classe deveria repercurtir por todo o projeto e aí você descobre que não ocorre! Aí, surge a sua pergunta, quais são as classes que manipula esse elemento que é idêntico a este que estou alterando?

Sobre **otimização**, se o seu CSS estiver organizado, possivelmente o render do browser será muito mais fácil, pois irá fazer a leitura adequadamente e garantindo assim um “cross-browser” mais assertivo, lembre-se **Normalize & RESET**, é apenas o primeiro passo para garantir cross-browser, os outros 99% do projeto está na sua forma de escrever o CSS.

Sobre tudo, o SMACSS não fornece um padrão de nomenclatura, o foco dele é **dividir para conquistar** e com isso ele deixa livre á sua escolha qual será a forma de escrita de seu CSS. Como estamos pensando em projetos de médio e grande porte vamos considerar adotar uma metodologia que seja usual e que qualquer pessoa do time que venha a escrever algo no CSS consiga perpetuar este padrão, certo!?

BEM metodologia de escrita de CSS

Sendo assim, recomendo fortemente que adote o padrão de nomenclatura BEM, em outra oportunidade falarei como ele funciona, mas basicamente seguindo a citação do próprio site:

A metodologia BEM foi inventada por Yandex para desenvolver sites que devem ser lançados rapidamente e suportados por um longo tempo. Ele ajuda a criar componentes de interface extensíveis e reutilizáveis.

Pre-processors CSS

Outro ponto importante para que o SMACSS funcione adequadamente e faça os **imports** dos diretórios do seu CSS adequadamente é que adote um pré-processador como Sass ou Stylus pois assim conseguirá fazer os importação do arquivos sem problema.

Regra geral para SMACSS: BEM + Pré-Processador = 100%

Voltando ao SMACSS, falamos que basicamente seu conceito é fazer separação de diretórios e quais são esses diretórios?

__base
__ layout
__ module
__ state
__ theme

**base**
Seria seus arquivos base da sua aplicação, o que é comum para todo o seu layout como Reset e Plugins.

**layout**
Seria a parte da estrutura do seu projeto, aqui entrará o CSSGrids, FlexBox, Position, Header, Footer e Section.

**module**
Essa é a parte mais importante onde fica seus componentes como formulários, botões, tipografia, cores e etc.

**state**
Aqui controlamos o estado do nosso componente, pense no hover, active, disabled é a parte do comportamento do componente sobre a ação do usuário, abaixo segue exemplo:

**theme**
Aqui é onde você pode criar temas pensando em:

theme-clean (pessoas que **preferem** layout mais claro)
theme-dark (pessoas que **preferem** layout mais escuro)

É válido avaliar que durante todo o seu projeto deve ser considerado acessibilidade e essa parte o theme é de suma importância. Aqui você altera as cores prevendo como deveria se comportar o layout para pessoas com deficiência visual ou luminosidade do ambiente. Por default esse diretório não é obrigatório para usar o SMACSS mas ele já prevê isso para você caso seja necessário! ;)

How do I feel writing CSS without knowing cascade and inheritance

Antes de concluir devo reforçar que a hierarquia dos diretórios devem respeitar essa ordem caso contrário você irá perder a cascata (cascading) e a herança (inheritance) que o CSS prevê, geralmente é o que mais complica a vida dos desenvolvedores para organizar os elementos de forma eficaz.

E com isso concluímos o que precisamos saber sobre SMACSS!

That’s all folks!

--

--