BEM e convenções de nomenclatura CSS

BEM e convenções de nomenclatura CSS, com gerador de classes | We.Inc

Como o BEM nomeia blocos, elementos e modificadores, com um gerador que verifica os nomes das suas classes. Compare o BEM com classes utilitárias, CSS Modules e @scope.

BEM e convenções de nomenclatura CSS

BEM significa Block, Element, Modifier (bloco, elemento, modificador). Um bloco é um componente independente, como .card; um elemento é uma parte que só faz sentido dentro dele, escrita .card__title com dois underlines; e um modificador é uma variação escrita .card--featured com dois hifens. Os modificadores são adicionados ao lado da classe base, nunca no lugar dela.

O BEM em uma tabela

É na nomenclatura que projetos CSS continuam organizados ou viram aos poucos uma pilha de sobrescritas. Esta página explica as regras do BEM segundo o site oficial do BEM, verifica os nomes das suas classes enquanto você digita e compara o BEM com as outras formas que as equipes usam hoje para evitar conflitos de estilos.

Perguntas frequentes

O que significa BEM?

Block, Element, Modifier (bloco, elemento, modificador). É um método de nomenclatura de classes CSS que mantém cada seletor com uma única classe, assim a especificidade fica plana e dá para saber pelo nome da classe a qual componente ela pertence.

Por que o BEM usa underlines duplos e hifens duplos?

Hifens simples já são usados dentro dos nomes, como em search-form. Duplicar os separadores deixa inequívoco o limite entre bloco, elemento e modificador, então .search-form__submit-button é lido como um bloco e um elemento.

Ainda vale a pena usar BEM com Tailwind ou CSS Modules?

Com classes utilitárias você raramente escreve nomes de classe de componentes, então o BEM importa menos. Com CSS Modules a ferramenta de build isola os nomes para você, e a recomendação é usar nomes curtos em camelCase. O BEM continua sendo uma ótima escolha para CSS puro, Sass, temas de WordPress e design systems compartilhados entre frameworks.

Como nomeio um elemento dentro de outro elemento?

Ligue-o ao bloco, não ao elemento pai. Um título dentro do corpo de um card é .card__title, mesmo quando o HTML o coloca dentro de .card__body. Se a parte aninhada puder ser reutilizada sozinha, transforme-a em um novo bloco.

O problema que as convenções de nomenclatura resolvem

Quando blocos contêm blocos

O escopo nativo do CSS está chegando lá

BEM comparado a outras abordagens

Formas de evitar conflitos entre nomes de classe

Um componente BEM completo

Bloco card com elementos e modificadores

Cada seletor é uma classe. O modificador featured muda a borda e permite que um elemento reaja por meio do modificador do bloco.

Erros comuns no BEM

Errado e certo

Gerador de nomes de classe BEM

Digite um bloco, um elemento e um modificador para obter nomes de classe, com o HTML e o CSS correspondentes e avisos quando um nome quebra uma regra.

Bloco

Elemento (opcional)

Modificador (opcional)

Bloco

Elemento

Modificador

{label}: não inclua __ ou -- você mesmo; o gerador adiciona os separadores.

{label}: use letras latinas minúsculas, dígitos e hifens simples.

Elementos não podem conter outros elementos.

Esses nomes seguem as regras do BEM.

Copiar {label}

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site