Solución de Problemas Comunes en BEM y Mejores Prácticas
Clase 5 de 19 • Curso de Arquitecturas CSS
Resumen
¿Cómo enfrentar los problemas comunes con BEM?
La metodología BEM (Bloque, Elemento, Modificador) ha revolucionado la forma en que estructuramos y nombramos nuestras clases CSS. No obstante, incluso esta eficaz metodología tiene sus retos. En este artículo, te guiaré a través de tres problemas comunes que podrías enfrentar al usar BEM y cómo puedes solucionarlos con confianza y efectividad.
¿Qué hago si tengo que combinar componentes con clases diferentes?
Imagina que has creado un componente A con sus propias clases y ahora necesitas integrarlo dentro de un nuevo componente B, también con sus propias clases. ¿Cuál es el paso a seguir? Es simple: ambos componentes pueden coexistir con sus respectivas clases sin ningún problema. Considera el siguiente ejemplo en HTML:
<div class="cart">
<img class="cart__image" src="imagen.jpg" alt="image description">
<button class="button button--active">Click Me</button>
</div>
En este caso, el componente cart
y el button
tienen sus propias estructuras de clase. No necesitas modificar sus clases incluso cuando los integres juntos en un mismo elemento. Esta independencia evita romper la consistencia de cada componente individual.
¿Qué hacer con los niveles múltiples en HTML?
La estructura de tu HTML puede volverse compleja, con componentes anidados formando una jerarquía de padres, hijos y nietos. Sin embargo, BEM no se interesa por los niveles jerárquicos en tu código HTML. La solución reside en mantener nombres de clase que no reflejen esta jerarquía y simplifiquen la estructura. Trata de no duplicar las jerarquías HTML en tus nombres de clase:
<div class="cart">
<div class="cart__footer">
<span class="cart__footer-text">Texto del footer</span>
</div>
</div>
Es posible utilizar elementos y modificadores para distinguir diferencias en apariencia o comportamiento, sin necesidad de seguir la jerarquía HTML exactamente.
¿Es necesario crear clases específicas para ocultar contenido en BEM?
¿Estás usando JavaScript y quieres ocultar elementos como un componente cart
y un button
usando la propiedad display: none
? En lugar de crear una clase específica para cada elemento visual, es recomendable emplear una clase genérica. Esto simplifica tu código y evita repetición innecesaria:
.hidden { display: none; }
Puedes aplicar esta clase a cualquier componente cuando necesites ocultarlo:
<div class="cart hidden"></div>
<button class="button hidden">Botón Oculto</button>
¿Cómo integrar BEM con Sass para mejorar tu flujo de trabajo?
El uso de un preprocesador como Sass puede mejorar considerablemente el flujo de trabajo al aplicar la metodología BEM. Sass te permite anidar clases, otorgando un nivel adicional de orden y claridad al CSS. Observa el siguiente ejemplo para entender la ventaja de combinar Sass con BEM:
Ejemplo con Sass
.cart {
&__image {
width: 100px;
height: 100px;
}
&__footer {
background-color: #f0f0f0;
&-text {
font-size: 14px;
}
}
}
El uso de la anidación en Sass, como se muestra arriba, mantiene el CSS limpio y organizado. Permite una estructura donde las relaciones entre bloques y elementos son claras, sin la necesidad de crear clases individuales para cada nivel jerárquico.
Recomendaciones finales para un uso eficiente de BEM
El método BEM no solo facilita la lectura y comprensión del CSS, sino que también fomenta la reutilización de clases y evita la sobrecarga de selectores anidados. Aquí tienes algunas recomendaciones para sacar el máximo provecho a BEM:
- Lee y personaliza: BEM está diseñado para ser entendible y adaptable. Ajusta la metodología según los requerimientos de tu proyecto.
- Evita complejidad innecesaria: No te sientas obligado a seguir la jerarquía HTML en la nomenclatura de BEM. Mantén las cosas simples.
- Usa clases genéricas: Siempre que sea posible, utiliza clases genéricas para estilos o comportamientos comunes, como ocultar elementos con
display: none
.
Aplica BEM en proyectos futuros con estas estrategias y verás cómo mejora la gestión y escalabilidad de tu código CSS. ¡Continúa explorando y experimentando con BEM para encontrar la configuración que mejor funcione para ti!