BEM y convenciones de nombres en CSS

BEM y convenciones de nombres en CSS, con generador de clases | We.Inc

Cómo nombra BEM bloques, elementos y modificadores, con un generador que revisa tus nombres de clase. Compara BEM con clases de utilidad, CSS Modules y @scope.

BEM y convenciones de nombres en CSS

BEM significa Block, Element, Modifier (bloque, elemento, modificador). Un bloque es un componente independiente como .card, un elemento es una parte que solo tiene sentido dentro de él, escrita .card__title con dos guiones bajos, y un modificador es una variante escrita .card--featured con dos guiones. Los modificadores se añaden junto a la clase base, nunca en su lugar.

BEM en una tabla

Los nombres son lo que mantiene ordenado un proyecto CSS o lo convierte poco a poco en un montón de sobrescrituras. Esta página explica las reglas de BEM según el sitio oficial de BEM, revisa tus propios nombres de clase mientras escribes y compara BEM con las otras formas en que los equipos evitan hoy que los estilos choquen.

Preguntas frecuentes

¿Qué significa BEM?

Block, Element, Modifier (bloque, elemento, modificador). Es un método para nombrar clases CSS que limita cada selector a una sola clase, de modo que la especificidad se mantiene plana y puedes saber por el nombre de la clase a qué componente pertenece.

¿Por qué BEM usa dobles guiones bajos y dobles guiones?

Los guiones simples ya se usan dentro de los nombres, como en search-form. Duplicar los separadores hace inequívoco el límite entre bloque, elemento y modificador, así que .search-form__submit-button se lee como un bloque y un elemento.

¿Sigue valiendo la pena usar BEM con Tailwind o CSS Modules?

Con clases de utilidad rara vez escribes nombres de clase de componentes, así que BEM importa menos. Con CSS Modules la herramienta de build acota los nombres por ti, y se recomiendan nombres cortos en camelCase. BEM sigue siendo una gran opción para CSS puro, Sass, temas de WordPress y design systems compartidos entre frameworks.

¿Cómo nombro un elemento dentro de otro elemento?

Vincúlalo al bloque, no al elemento padre. Un título dentro del cuerpo de una tarjeta es .card__title, aunque el HTML lo anide dentro de .card__body. Si la parte anidada es reutilizable por sí sola, conviértela en un bloque nuevo.

El problema que resuelven las convenciones de nombres

Cuando hay bloques dentro de bloques

El scoping nativo de CSS se pone al día

BEM comparado con otros enfoques

Formas de evitar que los nombres de clase choquen

Un componente BEM completo

Bloque card con elementos y modificadores

Cada selector es una clase. El modificador featured cambia el borde y permite que un elemento reaccione a través del modificador del bloque.

Errores comunes con BEM

Incorrecto y correcto

Generador de nombres de clase BEM

Escribe un bloque, un elemento y un modificador para obtener nombres de clase, con el HTML y el CSS correspondientes y avisos cuando un nombre incumple una regla.

Bloque

Elemento (opcional)

Modificador (opcional)

Bloque

Elemento

Modificador

{label}: no incluyas __ ni -- tú mismo; el generador añade los separadores.

{label}: usa letras latinas minúsculas, dígitos y guiones simples.

Los elementos no pueden contener otros elementos.

Estos nombres siguen las reglas de BEM.

Copiar {label}

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio