Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Boa pratica em CSS

Estou assistindo à aula “Estilos globais: fundo, texto e cores” e surgiu uma dúvida sobre boas práticas de CSS.

A professora mostrou que, para estilizar elementos específicos, como dois <span> dentro de um <h1>, podemos usar encadeamento de seletores, por exemplo:

h1 span { ... }

Porém, também sei que é possível atribuir classes ou IDs aos elementos para aplicar estilos de forma mais direta.

Minha dúvida é: em termos de boas práticas, qual abordagem é mais recomendada (seletores encadeados vs. classes/identificadores) considerando aplicações de pequeno, médio e grande porte?
Existe diferença de manutenção, escalabilidade ou performance entre essas abordagens?

4 respostas

Oi, Diegho! Como vai?

Seletores encadeados e classes/IDs são válidos, mas a melhor escolha muda conforme manutenção, escala e clareza do CSS.

Pontos importantes

  • Seletores encadeados (ex: h1 span) funcionam bem quando o estilo depende do contexto (um span dentro de um h1).
  • Classes são a opção mais comum para reuso e escalabilidade (ex: .titulo__destaque).
  • IDs (#algo) costumam ficar para casos bem pontuais (âncoras, JS, componente único). Para CSS, podem dificultar sobrescrita por terem alta especificidade.

1) Pequeno porte (página simples / exercício)
Do jeito que você explicou, h1 span pode ser ok se o objetivo for estilizar apenas spans do título e isso não vai se repetir muito.

Por exemplo:

<h1>Aprenda <span>HTML</span> e <span>CSS</span></h1>
h1 span {
  font-weight: bold;
  text-transform: uppercase;
}

O que esse código faz: aplica o estilo somente nos span que estão dentro de um h1.

2) Médio e grande porte (site com várias telas / time / componentes)
Para aumentar manutenção e reuso, prefira classes. Assim você não fica "preso" ao HTML (se o span sair do h1, o estilo não quebra).

Veja este exemplo:

<h1 class="titulo">
  Aprenda <span class="titulo__destaque">HTML</span> e
  <span class="titulo__destaque">CSS</span>
</h1>
.titulo__destaque {
  font-weight: bold;
  text-transform: uppercase;
}

O que esse código faz: você pode reaproveitar .titulo__destaque em outros lugares (card, banner, botão) sem depender da hierarquia.

3) Manutenção, escalabilidade e performance

  • Manutenção: classes ganham. Menos acoplamento ao HTML, mais fácil renomear/organizar.
  • Escalabilidade: classes ganham. Padrões como BEM (.bloco__elemento) ajudam muito em projetos maiores.
  • Performance: na prática, a diferença entre h1 span e .classe costuma ser irrelevante para a maioria dos projetos. O que pesa mais é quantidade de regras, reflows e organização do CSS.

4) Uma regra prática que ajuda

  • Use encadeamento curto quando for intencionalmente contextual (ex: .cabecalho h1).
  • Use classes para tudo que for reutilizável e para estilo de componente.
  • Evite IDs para estilo quando você precisar sobrescrever com frequência.

Se quiser, pense assim:

  • Estilo de componente: .titulo__destaque
  • Estilo por contexto: .hero h1 span (com parcimônia)

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Boa tarde!!!

Eu ainda fiquei com algumas duvidas ou pontas soltas.
principalemte nisso aqui

  • Use classes para tudo que for reutilizável e para estilo de componente.

pois na minha experiência, quando temos muitas paginas ou componentes, acabamos nunca reutilizando um mesmo css em nenhum lugar, então eu acabo sempre usando classe para tudo, TUDOOOO.
Isso seria uma pratica ruim??

(nos caso eu to mais acostumado com react, to estudando html/css para relembrar e pegar dicas)

solução!

Oi, Diegho!

Usar classe para “tudo” não é prática ruim — em projetos com muitas telas/componentes (principalmente em React), classes (ou estilos escopados) viram o caminho mais previsível de manutenção e evolução. O ponto não é “reutilizar sempre”, e sim evitar acoplamento ao HTML e controlar especificidade.

O que fazer:

  • Use classes no próprio componente para estilizar os elementos dele (mesmo que não reutilize em outro lugar).
  • Evite depender de seletores encadeados por tag (tipo h1 span) quando o estilo é “do componente”, porque você fica preso à estrutura do HTML.
  • Use encadeamento curto só quando for regra de contexto (ex.: “dentro do header, links são brancos”), preferindo classe no container.

Exemplo (componente com classes “locais”):

<h1 class="titulo">
  Aprenda <span class="titulo__destaque">HTML</span> e
  <span class="titulo__destaque">CSS</span>
</h1>
.titulo {
  font-size: 2rem;
}

.titulo__destaque {
  font-weight: 700;
  text-transform: uppercase;
}

Agora, quando você precisar de uma regra de contexto, faça assim (classe no “pai” + seletor simples):

<header class="header">
  <h1 class="titulo">
    Aprenda <span class="titulo__destaque">HTML</span>
  </h1>
</header>
.header .titulo__destaque {
  color: #fff;
}

Por que isso funciona bem:

  • Manutenção: renomeou/moveu o span? A classe continua válida.
  • Escalabilidade: você organiza por componente (ex.: titulo.css, card.css), sem depender de hierarquia frágil.
  • Especificidade controlada: classes ficam fáceis de sobrescrever sem brigar com #id e sem encadeamentos longos.

Se você está vindo do React, essa abordagem fica ainda mais sólida quando você usa CSS por componente (CSS Modules, styled-components, etc.), porque o CSS já nasce escopado.

Fico à disposição. Abraços e bons estudos!

Boa tarde!
Ficou bem claro, obrigado pelo esclarecimento!