48

🚀 Cómo implementar BEM en tus proyectos Front-End

¿Te has sentido frustrado cuando tus proyectos front-end comienzan a crecer y no sabes por dónde deberías comenzar? Imagina poder tener el control total de cómo poder escalar, mantener y reutilizar tu código HTML y CSS. Para eso existe la metodología BEM y si aún no conoces esta forma ágil de trabajo no te preocupes, a continuación, te explico.

¿Qué es BEM? 🤔

La metodología BEM – Modificador de Elemento de Bloque (Block Element Modifier) por sus siglas en inglés, nos permite construir estructuras tipo componentes que podamos escalar y reutilizar en nuestro layout, además, si combinas BEM con alguna arquitectura CSS como SMACSS, ITCSS o Atomic Design seguramente lo amarás.

Bloque 📦

Es el contenedor principal de nuestro componente, por lo general son aquellas secciones de nuestra página que podemos fácilmente identificar como el header, main, section, aside o footer, pero en la práctica podemos crear un bloque en cualquier parte, siempre y cuando lo consideremos necesario como puede ser un modal, un pop-up o un formulario de contacto.

Para nombrar a un bloque, debemos crear una clase con la siguiente nomenclatura:

.block {}

Elemento 📘

Los elementos son aquellas piezas que componen la estructura de un bloque, están semánticamente relacionadas, por ejemplo; los enlaces de un menú, elementos de una lista o imágenes de un carrusel.

La nomenclatura para nombrar la clase de un elemento, deberá hacer referencia al bloque y le agregarémos dos guiones bajos, seguido del nombre del elemento:

.block__element {}

Modificador 📘📗

El modificador es la parte más interesante de BEM ya que nos permite cambiar la apariencia y el estado de un bloque o elemento. Esto es muy importante porque si nos encontramos en un escenario donde un menú contiene un grupo de enlaces y uno de ellos necesita tener mayor foco de atención para alentar al usuario a realizar un call to action, el modificador nos permitirá únicamente modificar la visualización o comportamiento que deseamos aplicar a este elemento sin perder las propiedades que comparte con los otros.

Se recomienda utilizar la siguiente nomenclatura para nombrar las clases de los modificadores, utilizarémos el nombre del bloque o elemento a modificar y le agregaremos dos guiones medios, seguido de su identificador:

.block--modifier {}

Manos a la obra 👊

Ahora que ya sabes como funciona BEM, seguramente tienes muchas ganas de implementarlo en tus proyectos front-end, vamos a realizar un ejercicio práctico que nos permitirá familiarizarnos más con esta metodología. Para ello, te propongo logremos identificar cual sería el bloque, elemento y modificador del siguiente encabezado.

header.png

¿Lograste identificarlos? Para poder construir este componente, vamos a utilizar la etiqueta header, ya que semánticamente es una buena práctica en nuestro HTML y nombraremos este bloque con la clase header, de esta manera será muy fácil identificarlo en un futuro.

<header class="header"></header>

Trabajemos en agregar los elementos de nuestro bloque header, como pudiste darte cuenta, en el encabezado tenemos también un logotipo, un menú y un carrito de compras. Vamos a crear estos elementos dentro de nuestro bloque.

<header class="header">
    <imgclass="header__logo"src="/assets/images/logo.svg"alt="Logotipo"><navclass="header__menu"><ulclass="menu__list"><liclass="menu__item">Inicio</li><liclass="menu__item">Nosotros</li><liclass="menu__item">Inicia Sesión</li><liclass="menu__item">Contactar</li></ul></nav><spanclass="header__cart"></span></header>

Probablemente te estas preguntando, por qué el elemento hijo de la clase header__menu se llama menu__list, déjame decirte que BEM no está escrito sobre piedra, la metodología nos da la flexibilidad de poder nombrar nuestras clases con base a las necesidades de nuestro componente, siempre y cuando tengan coherencia y relación entre sí.

Para terminar, agreguemos el modificador que se encuentra en el enlace contactar y así poder cambiar su visualización.

<header class="header">
    <imgclass="header__logo"src="/assets/images/logo.svg"alt="Logotipo"><navclass="header__menu"><ulclass="menu__list"><liclass="menu__item">Inicio</li><liclass="menu__item">Nosotros</li><liclass="menu__item">Inicia Sesión</li><liclass="menu__item menu__item--contact">Contactar</li></ul></nav><spanclass="header__cart"></span></header>

Conclusiones 🎯

Como bien te diste cuenta, crear un componente fue muy sencillo y lo más importante es que si necesitas escalarlo, lo podrás hacer muy fácilmente, además, al trabajar de esta manera, mejoras la especificidad de tu CSS, mejoras la herencia de tus estilos, puedes reutilizar código y respetas la autonomía de los bloques.

Ahora te propongo que le agregues los estilos necesarios para que se logre ver como en la imagen que te compartí.

Si estás leyendo este artículo, probablemente estés tomando el Curso de Responsive Design: Maquetación Mobile First, si no lo has hecho, ¡¿qué estás esperando?! Recuerda que también puedes tomar el Curso Definitivo de HTML y CSS para reforzar tus buenas prácticas de desarrollo front-end y así seguir avanzando en tu carrera profesional con el Curso de Frontend Developer donde podrás ver más información sobre Arquitecturas CSS.

#NuncaParesDeAprender 💚🤓

Escribe tu comentario
+ 2
Ordenar por:
3
13392Puntos
4 años

Súper util el artículo. Gracias!
Me ayudó a entender mejor BEM sin necesidad de leer un montón de documentación 😄

1
44066Puntos
4 años

Hola, José,

Me alegra mucho saber que te sirvió el artículo, cualquier duda que tengas no dudes en escribirme.

#NuncaParesDeAprender 💚🤓

2
19914Puntos
2 años

Super explicación, me ayudaste a poder entender mejor sobre esto ya que ando tomando el curso de Responsive Design y si se me hacía un poco confuso como lo implementaba el profesor.

1
44066Puntos
2 años

Hey, Uriel.

Me alegra mucho saber que te sirvió el artículo, cualquier duda que tengas no dudes en escribirme.

#NuncaParesDeAprender 💚🤓

2
3949Puntos
2 años

Gracias!

1
44066Puntos
2 años

Hola, Daniel,

Que bueno que te agradó el artículo, cualquier duda que tengas no dudes en escribirme.

#NuncaParesDeAprender 💚🤓

2
3183Puntos
3 años

Excelente, Muchas gracias!!!

1
44066Puntos
2 años

Hola, Girlbert,

Me alegra mucho saber que te sirvió el artículo, cualquier duda que tengas no dudes en escribirme.

#NuncaParesDeAprender 💚🤓

2
4 años

Hola me gusto mucho,pude entenderlo muy fácilmente,muchas gracias por tu aporte .

0
44066Puntos
4 años

Hola, Alejandro,

Como pudiste ver, es muy fácil implementar BEM en nuestros proyectos y con forme te vayas familiarizando más con esta metodología podrás crear tu propia guía de trabajo.

#NuncaParesDeAprender 💚🤓

2
52063Puntos
4 años

Gracias, me ahorró un montón de documentación. Lo aplicaré en mis proyectos.

2
44066Puntos
4 años

Hola, Axl Yaguana,

Que bueno que te sirvió este artículo, si tienes alguna duda sobre cómo implementarlo en tus proyectos escríbeme por Twitter @erwinfriasmtz

#NuncaParesDeAprender 💚🤓

2
53301Puntos
3 años

Gracias hermano, se agradece el aporte

1
44066Puntos
3 años

Hola, Onedrako,

Que bueno que te sirvió este artículo, si tienes alguna duda sobre cómo implementarlo en tus proyectos escríbeme por Twitter @erwinfriasmtz

#NuncaParesDeAprender 💚🤓

2
23116Puntos
3 años

¡Excelente tutorial, Erwin! Me quedó todo muy claro.

1
44066Puntos
3 años

Hola, Mauricio,

Me alegra mucho saber que te sirvió el artículo, cualquier duda que tengas no dudes en escribirme.

#NuncaParesDeAprender 💚🤓

2
10328Puntos
3 años

¡Excelente aporte! Apenas acabo de verlo, despúes de haber buscado info por internet, ya que en el curso el Profe Diego uso en algunas clases la metodología BEM de manera incorrecta. Ya me había quedado claro como usar BEM pero me tomo tiempo comprénderlo, este tutorial me ¡hubiera ahorrado tiempo!
P.D. BEM se creó para facilitar la creación de componentes para la reutilización de código, a mi parecer, sacrificando un poco la estructura html al tener que agregarle clases a la mayoría de los elemento html. Por eso el Profe Diego solo toma como referencia BEM.

1
44066Puntos
3 años

Hola,Checo,

Me alegra mucho saber que te sirvió el artículo, tampoco soy purista de utilizar BEM al 100% en mis proyectos, pero considero que en el curso no se utilizó apropiadamente.

#NuncaParesDeAprender 💚🤓

2
3 años

El puto amo. Por fin entendí.

1
44066Puntos
3 años

Hey, Jesus.

Me alegra mucho saber que te sirvió el artículo, cualquier duda que tengas no dudes en escribirme.

#NuncaParesDeAprender 💚🤓