BEM Methodology

È una metodologia per dare nomi coerenti alle classi CSS.

BEM:
  • Blocco
  • Elemento
  • Modificatore

Blocco

Un blocco è un componente indipendente della pagina. Lo possiamo usare da solo dove vogliamo.
Sceglieremo il nome del blocco non in base a com'è fatto, ma a cos'è:

I blocchi possono essere annidati uno nell'altro:

Elemento

È la parte di un blocco e non può essere usata separatamente da esso.
Come nome completo per gli elementi useremo questo formato:

nome-blocco__nome-elemento


Gli elementi possono essere annidati all'interno di altri elementi, ma nella denominazione si fa comunque riferimento al blocco, e non all'elemento genitore... leggiamo con attenzione questo esempio:
Il vantaggio di legare gli elementi al blocco indipendentemente dal livello del loro annidamento è che se un giorno volessimo cambiare la struttura interna del blocco non dovremmo ridenominare tutte le classi.

Modificatore

Definisce l'aspetto (small, large, dark...), lo stato (abilitato, disabilitato, hover...) o il comportamento di un blocco o di un elemento.
Il modificatore è separato con una singola underscore dal resto del nome della classe.

Ecco alcuni esempi:
search-form__button_disabled
search-form__button_xs
search-form_dark