Introdução
Nomear componentes quando estilizamos nosso site/app pode parecer uma tarefa fácil para alguns, mas vira uma dor de cabeça se não estamos acostumados.
Afinal, a gente tem que pensar que:
- Outros devs tem que encontrar esse componente facilmente
- Eu tenho que lembrar do nome quando for dar manutenção
- Perder muito tempo nisso é tempo desperdiçado
- Se ficar confuso depois, vai precisar refatorar, perdendo ainda mais tempo 🤦♂️
Pensando nisso, elaborei essa lista de possíveis nomes que você pode dar para seus componentes CSS, dependendo do contexto.
A ideia é que você possa usar essas classes quando estiver criando componentes com a metodologia BEM, mas isso pode ser adaptado para outras metodologias.
Assim, você pode poupar o seu tempo pensando em nome de classes e focar no que realmente importa.
Layout
Classes usadas para determinar características de layout como tamanho e divisões entre conteúdos, margens, espaçamento, etc.
.container.wrapper.outer.inner.row.col
Seções Principais
Classes usadas para subdividir as páginas, esses componentes normalmente vão aparecer somente uma vez por página.
.page.header.main.hero.intro.section-[alguma coisa].footer
O Holy Grail design é um exemplo de seções principais de um site.
Componentes de Página
Classes usadas para definir componentes estruturais que podem aparecer várias vezes na mesma página.
.article.aside.box.bio.block.callout.card.content.gallery.lockup.info-box.menu.modal.panel.popup.post.profile.section.sidebar.video-box
Navegação
Classes para conjunto de links ou botões de navegação.
Nomes genéricos
.nav.nav-tools.nav-utilities.nav-menu
Nomes por relevância
.main-nav.primary-nav.secondary-nav
Nomes por posicionamento
.top-nav.bottom-nav.header-nav.sidebar-nav.footer-nav
Nomes por contexto
.dashboard-nav.site-nav.user-nav.***-nav
Listas
Classes para listas de elementos ou conjunto de componentes.
Nomes genéricos
.list.list-links.list-images.feed
Nomes por características
.ordered-list.numbered-list.unordered-list.floating-list
Nomes por contexto
.contact-list.work-list.products-list.users-list.***-list
Componentes
Classes para elementos em geral, a combinação e agrupamento desses elementos formam componentes maiores.
.accordion.avatar.background.badge.bar.breadcrumbs.btn(.menu-btn,.submit-btn, etc).button.carousel.copyrights.cta.cta-link.divider.dropdown.figure.ico.icon.illustration.image.label.link.locations.logo.map.mask.media.message.newsletter.overlay.pagination.parallax.photo.pic.picture.poster.product.project.ribbon.sitemap.social.tabs.tag.teaser.testimonial.thumb.thumbnail.tooltip.user.video
Formulários
Classes para formulários e seus campos.
Nomes genéricos
.form.field.input.control.label
Nomes por tipo
Nesse caso, usando modificadores do BEM.
.field--text.field--number.field--radio.field--checkbox
Nomes por contexto
.contact-form.login-form.sign-up-form.newsletter-form.***-form.submit-btn.cancel-btn
Texto
Classes para estilizar textos que são usados por todo o site/app.
.title.subtitle.suptitle.head.heading.text.content-text.description.category
Elementos aninhados
Sufixos de classe para serem usados em componentes filhos quando usamos a metodologia BEM.
Basicamente, todo nome de classe citado até agora pode se tornar um sufixo quando utilizado como filho de um elemento.
Sufixos estruturais
&__actions&__content&__footer&__head&__header&__inner&__item&__row
Sufixos de texto
&__title&__subtitle&__suptitle&__link&__text
Sufixos de contexto
&__cta&__name&__description&__details&__media&__social
Indicar Estado
Classes que normalmente são adicionadas/removidas por JavaScript e servem para indicar um estado diferente em que o componente se encontra.
.is-active.is-animating.is-closed.is-disabled.is-empty.is-expanded.is-fixed.is-loaded.is-loading.is-open.is-scrolling.is-sticky
Conclusão
Como você pode perceber, os nomes estão em inglês. Você vai encontrar na maioria dos lugares a nomenclatura assim, é o padrão.
Certamente você também deve divergir em relação a alguns nomes e categorias, mas a ideia aqui é mais ser uma lista de utilidades, sem certo ou errado.
Se tiver mais nomes de classes para inserir, fique à vontade e seja bem-vindo para deixar sua contribuição nos comentários aqui embaixo.
Até o próximo artigo!