BEM

Um modo estilo de arquitetura de CSS. Facilita a escalabilidade ,reaproveitamento do código e nomear os class. Ajuda a manter o HTML em estrutura simples. Combina bem com projetos pequenos.

Métodologia

No BEM a página é vista em 3 formatos abaixo.

  • Block (pt: Bloco)
  • Element (pt: Elemento)
  • Modifier (pt: Modificador)

Block

Bloco são os pedaços grandes como cabeçalho, coluna do conteúdo, coluna do menu, rodapé e etc. Pode construir bloco dentro do bloco deis que ele seja independente do bloco parente.

Element

As peças dentro do bloco são os elemento. Utiliza "_"(underscore) como separador.

Modifier

Modificador é o estado do bloco ou elemento. Utiliza "-"(traço) como separador.

Exemplo:

<!-- header block -->
<div class="header">
  <!-- headerのelement "logo"-->
  <img class="header_logo" src="logo.png" alt="logo">
  <ul class="nav"><!-- nav block -->
    <li class="nav_item nav_item-selected">menu1
    <li class="nav_item">menu2
  </ul>
</div>

Regra de Nomear e Exemplo

Os nome seguem a regra abaixo.

.block
.block-state
.block_element
.block_element-state

No exemplo em cima. Blocos são .header e .nav, .header_logo e .nav_item são elementos, .nav_item-selected é o estado.
O Estado pode ser escrito em "chave" e "valor”.

.nav_item-stateActive

Nomes Compridos

Para os nomes compridos que são de mais de duas palavras utilize o estilo CamelCase.

/* Recomended */
.rightMenu
.leftMenu
.topAdSpace
.bottomAdSpace

/* Not recomended */
.right_menu
.left-menu
.top_ad-space
.bottomAd-Space