Logo AndercDev
Volver al blog
bem

Guía completa de BEM: cómo escribir CSS modular, escalable y fácil de mantener

En muchos proyectos de frontend, el CSS se vuelve difícil de entender, mantener y escalar. Ahí es cuando entra en juego BEM: una convención/mod­el de nomenclatura que aporta orden, claridad y reusabilidad al código de estilos.

Anderson CastañoAnderson Castaño
13 de noviembre de 202510 min de lectura
metodología BEMBEMCSS guía BEM CSSmodular estructura BEMnaming convention CSSbuenas prácticas CSS

En muchos proyectos de frontend, el CSS se vuelve difícil de entender, mantener y escalar. Ahí es cuando entra en juego BEM: una convención/mod­el de nomenclatura que aporta orden, claridad y reusabilidad al código de estilos.

En este artículo veremos:

  • Qué es BEM y por qué importa

  • Fundamentos de la metodología (Bloque – Elemento – Modificador)

  • Beneficios reales de usar BEM

  • Cómo implementarla en tus proyectos con ejemplos prácticos

  • Mejores prácticas y errores comunes

  • Cómo combinar BEM con preprocesadores (SASS, etc.)

  • Conclusión y consejos finales

Si quieres que tu CSS deje de parecer una “jungla de selectores”, sigue leyendo.


1. ¿Qué es BEM y por qué debería importarte?

BEM significa Block Element Modifier, y es una metodología para nombrar tus clases CSS. Su objetivo es que los componentes sean independientes, reutilizables y fáciles de mantener, incluso cuando varios desarrolladores trabajan sobre el mismo proyecto.

En términos simples: con BEM evitas conflictos de nombres, estilos que se sobreescriben entre sí, y CSS difícil de depurar.


2. Fundamentos de BEM: Bloque, Elemento y Modificador

🔹 Bloque

Es la entidad autónoma, un componente que puede existir por sí mismo. Ejemplos: .card, .menu, .login-form.

🔹 Elemento

Es una parte del bloque, que no funciona fuera de él. Ejemplos: .card__title, .menu__item.

🔹 Modificador

Indica una variación o estado del bloque o del elemento. Ejemplos: .button--primary, .card__title--big.

🧩 Nomenclatura típica

  • [bloque]

  • [bloque]__[elemento]

  • [bloque]--[modificador]

  • [bloque]__[elemento]--[modificador]

Ejemplo:

HTML
1<button class="button button--active">
2  <i class="button__icon"></i>
3  <span class="button__text">Enviar</span>
4</button>

3. Beneficios concretos de aplicar BEM

  • Escalabilidad: el CSS crece sin volverse caótico.

  • Colaboración: todo el equipo sigue una convención clara.

  • Reutilización: los bloques pueden replicarse o variar con modificadores sin duplicar estilos.

  • Menos conflictos: evitas que los estilos globales interfieran entre componentes.

En resumen, BEM aporta estructura y reduce el “dolor de mantenimiento” en proyectos medianos o grandes.


4. Cómo implementarla: ejemplos prácticos

💳 Ejemplo 1: tarjeta de producto

HTML
1<div class="product-card">
2  <img class="product-card__image" src="producto.jpg" alt="Producto">
3  <h3 class="product-card__title">Nombre del Producto</h3>
4  <p class="product-card__description">Descripción breve del producto.</p>
5  <button class="product-card__button product-card__button--buy">Comprar</button>
6</div>.product-card { /* estilos base */ }
7.product-card__image { /* estilos */ }
8.product-card__title { /* estilos */ }
9.product-card__description { /* estilos */ }
10.product-card__button { /* estilos */ }
11.product-card__button--buy { background-color: #28a745; color: #fff; }

🔐 Ejemplo 2: formulario de login

HTML
1<form class="login-form">
2  <input class="login-form__field" type="text" placeholder="Usuario">
3  <button class="login-form__button" type="submit">Entrar</button>
4</form>.login-form { /* estilos del formulario */ }
5.login-form__field { width: 100%; padding: .5rem; margin-bottom: 1rem; }
6.login-form__button { background: #007bff; color: #fff; padding: .75rem; border: none; cursor: pointer; }
7.login-form__field--errored { border-color: red; }

🚀 Ejemplo conceptual (analogía del cohete)

HTML
1<rocket class="falcon9 falcon9--dragon">
2  <stage class="falcon9__first-stage"></stage>
3  <stage class="falcon9__interstage"></stage>
4  <stage class="falcon9__second-stage"></stage>
5</rocket>

Aquí, falcon9 es el bloque, sus partes (__first-stage, __second-stage) son elementos, y --dragon es el modificador.


5. Mejores prácticas y errores comunes

✅ Buenas prácticas

  • Define la convención antes de comenzar el proyecto.

  • consistente con los nombres.

  • Mantén cada bloque bien aislado.

  • Combina BEM con preprocesadores (SASS, LESS, PostCSS) para mayor eficiencia.

❌ Errores comunes

  • Usar demasiados niveles de elementos (card__footer__icon__label).

  • Crear modificadores redundantes o innecesarios.

  • Aplicar BEM a utilidades globales como .hidden o .flex.

  • Mezclar distintas convenciones de nombres en el mismo proyecto.


6. BEM + preprocesadores CSS

BEM funciona perfectamente con herramientas como SASS o LESS. Gracias al anidamiento, el código se vuelve más claro y limpio.

JSON
1.card {
2  &__image {
3    width: 100%;
4  }
5  &__title {
6    font-size: 1.2rem;
7  }
8  &--featured {
9    border: 2px solid gold;
10  }
11}

Este patrón mantiene la estructura de BEM sin escribir nombres largos repetidamente.


7. Conclusión

Si quieres que tu CSS sea sostenible, entendible y profesional, BEM es una metodología que vale la pena adoptar. Establece una convención clara, fomenta la colaboración, y mantiene tu código modular y escalable.

Recuerda:

No se trata solo de que “funcione”, sino de que se mantenga, escale y se entienda.

Si estás cansado de CSS desordenado, comienza a usar BEM hoy mismo. Tu equipo (y tu yo del futuro) te lo agradecerán.