Bem
Bem
Bem
Evidentemente los elementos son cada uno de los objetos que hacen parte del
módulo dándole un sentido a este, por ejemplo los ítems del menú, los input
del componente de login etc.
Y como modificador podríamos tener cada estado o cambio que se genere en
los bloques o en cada elemento, por ejemplo cuando los inputs entran en
focus, cuando hacemos hover sobre los ítems del menú o cualquier enlace etc.
Escribiendo BEM
Las convenciones para escribir basados en BEM son las siguientes: Los
bloques serán las clases que tomará el nombre de la estructura, los elementos
serán delimitada con doble guion bajo __ y los modificadores serán delimitados
con guion --.
.bloque{__elemento[--modificador]}
.bloque {}
.bloque__elemento {}
.bloque--modificador {}
CSS
Esta convención asegura que los desarrolladores identifiquen lo que hace
cada propiedad y los estados solo con mirar el nombre y los identificadores
“__ o --”.
.red-social {...}
.red-social__li {...}
.red-social--twitter {...}
.red-social--twitter:hover {...}
CSS
El bloque .red-social puede tener múltiples li pero a su vez estas pueden
modificar su estilo (color, imagen etc) dependiendo a cada red social que se
desea mostrar, en este caso twitter.
Ahora, en esta metodología juega un papel principal lo que escribimos en el
documento HTML ya que al final es lo que vamos a referenciar en la hoja de
estilos CSS, es decir la estructuración va a comenzar en la hoja HTML, lugar
donde especificamos la estructura del documento.
<ul class="menu">
</ul>
HTML
Como puedes ver hacemos referencia al bloque en todo momento
contextualizando cada selector, que a su vez es definido como una entidad
autónoma dentro del documento, es por eso que en el documento de estilos
CSS se hace fácil entender que afecta cada regla definida, porque siempre
contextualizamos los elementos.
También hay que tener en cuenta que los bloque también pueden tener
modificadores, y se le pueden aplicar los que se requieran, veamos un
ejemplo:
<div class="header">
</a>
</div>
<div class="header">
</a>
</div>
HTML
Aunque trabajar bajo esta metodología representaría un cambio en la forma de
estructurar tanto el HTML como el CSS para beneficio de los desarrolladores,
hay varias quejas que se pueden denominar como los principales contra de
esta metodología.
Esto son los 3 más comunes que he notado de muchos frontends:
En lo personal creo que la metodología BEM hará que nuestras hojas de estilo
sean comprensible, semánticamente simple y más fácil de mantener,
incluso trabajandola por medio de un preprocesador todas
sus características se fortalecen.