Cristofer Sousa | Front-end Developer

Hello SMACSS!

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 terão que fazer uma nova re-escrita de CSS para conseguir 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:

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?

Sendo assim, recomendo fortemente que adote o padrão de nomenclatura BEM, em outra oportunidade falarei como ele funciona, outro ponto importante para que o SMACSS funcione adequadamente e faça os imports dos diretórios do seu CSS é 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 + STYLUS = 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 por exemplo: ```

/* ======================= States Rules ==========================*/

.is-visible { display: block }

.is-hidden { display: none; }

```

theme

Aqui é onde você pode criar temas pensando em theme-claro (pessoas que preferem layout mais claro/clean) ou theme-escuro (pessoas que preferem layout mais escuros), é válido avaliar que durante todo o seu projeto deve ser considerado acessibilidade e essa parte do theme é bastante importante. Aqui você altera as cores prevendo como deveria se comportar o layout para pessoas com deficiência visual ou luminosidade do ambiente. Por default essa regra não é obrigatória para usar o SMACSS mas ele já prevê isso para você caso seja necessário! ;)

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

That’s all folks!