Seletores CSS

Seletores CSS

Seletores são o núcleo do CSS — seu trabalho é "selecionar" os elementos HTML que você deseja estilizar. O CSS oferece múltiplos tipos de seletores, desde seletores de tag simples até combinações complexas de seletores, dando controle preciso sobre qualquer elemento.

Seletores Básicos

1. Seletor de Tag (Seletor de Elemento)

Usa nomes de tags HTML diretamente como seletores, combinando todas as tags com o mesmo nome no documento.

CSS
/* Todos os elementos <p> ficam vermelhos */
p {
  color: red;
}

/* Todos os elementos <h1> ficam azuis */
h1 {
  color: blue;
}

/* Todos os elementos <div> recebem borda */
div {
  border: 1px solid black;
}

2. Seletor de Classe

Combina elementos pelo atributo class. Nomes de classe são prefixados com um ponto ..

CSS
/* Todos os elementos com class="highlight" */
.highlight {
  background-color: yellow;
}

/* Apenas elementos <p> com class="center" */
p.center {
  text-align: center;
}

Elementos HTML podem ter múltiplas classes, separadas por espaços:

HTML
<p class="highlight center">Este texto está destacado e centralizado</p>

3. Seletor ID

Combina elementos pelo atributo id, prefixado com um hash #.

CSS
/* Selecionar elemento com id="header" */
#header {
  background-color: #333;
  color: white;
}

Nota: Um ID só pode aparecer uma vez por página. Seletores ID são tipicamente usados para elementos únicos.

4. Seletor Universal

Usa um asterisco * para combinar todos os elementos no documento.

CSS
/* Resetar margens e preenchimento para todos os elementos */
* {
  margin: 0;
  padding: 0;
}

O seletor universal é conveniente, mas cuidado com o desempenho — se estilos complexos forem aplicados, pode afetar a velocidade de renderização da página.

Especificidade do Seletor

Quando múltiplos seletores se aplicam ao mesmo elemento, o navegador usa regras de especificidade para determinar qual estilo é efetivo:

Tipo de Seletor Valor de Especificidade
Estilos inline (atributo style) 1000
Seletores ID 0100
Seletores de Classe/Atributo/Pseudo-classe 0010
Seletores de Tag/Pseudo-elemento 0001
Seletor universal 0000

Prioridade de alta para baixa:

Estilos Inline > Seletores ID > Seletores de Classe > Seletores de Tag

Exemplo de Cálculo de Especificidade

CSS
/* Especificidade: 0001 */
p {
  color: black;
}

/* Especificidade: 0010 */
.text {
  color: blue;
}

/* Especificidade: 0100 */
#special {
  color: green;
}

/* Especificidade: 0011 (classe + tag) */
p.text {
  color: red;
}
▶ Experimente

Para o mesmo elemento <p class="text" id="special">, a cor final do texto será verde (o seletor ID tem a maior especificidade).

!important

O CSS fornece uma "arma nuclear" — !important — que força um estilo a ter a maior prioridade:

CSS
p {
  color: red !important;
}

Não use !important a menos que seja absolutamente necessário — torna a depuração de estilos difícil. Priorize resolver problemas aumentando a especificidade do seletor.

Melhores Práticas para Seletores

  1. Use seletores de classe frequentemente: Classes são reutilizáveis e o seletor mais flexível
  2. Use seletores ID com moderação: IDs são únicos, difíceis de reutilizar, e sua alta especificidade pode causar problemas de sobrescrita
  3. Evite sobre-especificação: div.container ul li a é muito específico; .nav-link é suficiente
  4. Mantenha seletores concisos: Seletores mais longos são mais difíceis de manter e afetam o desempenho

❓ Perguntas Frequentes

Q Quando devo usar seletores de classe vs ID?
R IDs só podem aparecer uma vez por página, adequados para elementos únicos (como navegação superior, rodapé); classes podem ser reutilizadas, adequadas para aplicar os mesmos estilos a múltiplos elementos. Em CSS, prefira classes; use IDs apenas para elementos verdadeiramente únicos.
Q Qual é a diferença entre seletores de descendente (espaço) e seletores de filho (>)?
R Seletores de descendente selecionam todos os níveis de elementos filhos; seletores de filho selecionam apenas filhos diretos. Por exemplo, `div p` seleciona todos os elementos p dentro de div em qualquer nível, enquanto `div > p` seleciona apenas elementos p filhos diretos, independentemente de netos.
Q O seletor universal * afeta o desempenho?
R Uso mínimo tem pouco impacto, mas não use extensivamente. Como `*` combina todos os elementos, o navegador verifica cada um. Se aninhado em seletores complexos (como `#nav * li`), pode causar desperdício de desempenho. Resets globais simples como `* { box-sizing: border-box; }` são ok.

📖 Resumo

📝 Exercícios

  1. Crie uma página HTML com títulos, parágrafos e listas.
  2. Use seletores de tag para definir a cor do texto para todos os parágrafos.
  3. Use seletores de classe para definir diferentes cores de fundo para elementos específicos (defina pelo menos 2 classes diferentes).
  4. Use seletores ID para definir estilos especiais para um elemento na página.
  5. Teste: Aplique seletores de tag, classe e ID ao mesmo elemento e observe qual tem a maior prioridade.
100%