
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/model de nomenclatura que aporta orden, claridad y reusabilidad al código de estilos.
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/model 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:
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
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
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)
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.
Sé 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
.hiddeno.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.
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.