Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active May 21, 2022 21:34
Show Gist options
  • Save renatoapcosta/df9628e39299010c96d2c978353270ca to your computer and use it in GitHub Desktop.
Save renatoapcosta/df9628e39299010c96d2c978353270ca to your computer and use it in GitHub Desktop.
Metodologia BEM para CSS

Metodologia BEM para CSS

BEM é uma metodologia para nomeação de classes em CSS, que o ajuda a criar um código reutilizável e sustentável.

BEM significa Bloco, Elemento, Modificador, que são as entidades BEM.

image

Bloco

Bloco é um componente logicamente independente que encapsula estilos, comportamento ou tecnologias de implementação.

Elemento

O elemento é uma parte de um bloco que não pode ser usado fora dele (por exemplo, itens dentro do bloco de menu).

Modificador

O modificador é uma entidade BEM que define o estado, aparência e comportamento de blocos ou elementos. O uso dessa entidade é opcional.

Exemplos

.bloco-principal { padding:15px; } // Bloco

.bloco-principal__artigo { max-width:600px; } // Elemento separado por duplo underscore

.bloco-principal__artigo--fundo-cinza { background: #c9c9c9; } // Um modificador separado por dois traço

Namespace

Para criar nosso blocos podemos usar namesspace para facilitar o entendimento.

l- - para layouts

c- - para components

u- - para utilitarios

s- - para escopos

js- - para iteragir com javascripts

qa- - para iteragir com testes

Estrutura de diretórios

Os arquivos nestas pastas deve iniciar com _*.scss

base\  arquivos de definições basicas
components\  arquivos por componente
layout\ arquivos para definir layout
page\ arquivos para representar uma pagina
themes\  arquivos para representar partes do thema
abstracts\  variavéis, mixis e funções
vendors\ css de terceiros

main.scss O arquivo principal

Sequencia de imports

@import "abstracts/functions";
@import "abstracts/mixins";
@import "abstracts/variables";

@import "base/animations"; //Os @keyframes
@import "base/base";  // reset, html, body initial
@import "base/typography";
@import "base/utilities"; // margins e alinhamentos com important

@import "components/*";
@import "layout/*";
@import "pages/*";

Exemplo de imports reduzido

@import "base";
@import "typography";

@import "sidebar";
@import "header";
@import "footer";
@import "base";
@import "layout";
@import "components";

Links

CSS

SASS

CSS Flexbox

CSS Grid

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment