Menu

Seletores CSS: tipos, combinadores e seletores de atributo

Um seletor CSS escolhe os elementos que uma regra estiliza. Conheça todos os tipos de seletor, os quatro combinadores (descendente, filho, irmão adjacente, irmão geral), os seletores de atributo, o agrupamento, e teste seletores ao vivo.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O que é um seletor CSS

O seletor é a parte da regra antes das chaves. Ele decide a quais elementos as declarações se aplicam.

p.note { color: #2563eb; }
/* selector: p.note    declaration: color: #2563eb */

Os cinco seletores básicos cobrem a maior parte das folhas de estilo reais:

Tipos de seletor em resumo

SeletorExemploSeleciona
Universal*Todos os elementos
TipopTodo <p>
Classe.tipElementos com class="tip" (entre outras)
ID#main-titleO elemento com id="main-title"
Atributo[type="email"]Elementos cujo atributo combina
Pseudo-classea:hover, li:first-childElementos em um estado ou posição
Pseudo-elementop::first-line, .x::beforeUma parte de um elemento
Grupoh1, h2, h3Qualquer coisa que combine com um da lista
Compostop.tipUm <p> que também tem a classe

Classes e IDs têm página própria, seletor de classe CSS. Pseudo-classes como :nth-child() e :not() estão na página de pseudo-classes.

Combinadores: descendente vs filho

Um combinador une dois seletores pela relação entre eles na árvore do HTML. Existem quatro.

CombinadorSintaxeSeleciona B quando
DescendenteA B (espaço)B está em qualquer lugar dentro de A
FilhoA > BO pai de B é A
Irmão adjacenteA + BB vem logo depois de A, mesmo pai
Irmão geralA ~ BB vem em algum ponto depois de A, mesmo pai

O espaço e o > são a dupla que mais se confunde. O seletor descendente alcança qualquer profundidade; o seletor de filho para em um nível:

Combinadores de irmão: + e ~

Irmãos só olham para frente. Não existe combinador de "irmão anterior", mas o :has() consegue expressar isso: h2:has(+ p) seleciona um h2 seguido diretamente por um p.

Seletores de atributo

Os colchetes selecionam por atributos e seus valores:

SeletorSeleciona
[disabled]Tem o atributo, qualquer valor
[type="email"]O valor é exatamente email
[href^="https"]O valor começa com https
[href$=".pdf"]O valor termina com .pdf
[class*="icon"]O valor contém icon em qualquer posição
[lang|="en"]O valor é en ou começa com en-
[data-state="open" i]Valor exato, ignorando maiúsculas e minúsculas

Seletores de atributo em atributos data-* são um jeito limpo de estilizar um estado que o JavaScript define, sem inventar nomes de classe.

Teste qualquer seletor

Digite um seletor na caixa. Todo elemento selecionado ganha um contorno âmbar, e a contagem aparece embaixo.

Experimente #demo a, ul > li, h2 ~ *, a[href^="https"], li:not(.active).

Composto vs descendente: o espaço importa

p.note e p .note diferem por um espaço e significam coisas diferentes.

Como os navegadores leem seletores

Quando várias regras selecionam o mesmo elemento e definem a mesma propriedade, vence o seletor mais específico e, em empate, o posterior. Um ID pesa mais que qualquer quantidade de classes, e uma classe pesa mais que qualquer quantidade de seletores de tipo; a página sobre !important traz a tabela completa de especificidade.

Um grupo tem uma pegadinha: se qualquer seletor de uma lista simples for inválido, a regra inteira é descartada. Em a, b:unknown { } nem os links são estilizados. Envolver a lista em :is() a torna tolerante, então :is(a, b:unknown) continua estilizando os links.

Erros comuns

  • Esquecer o ponto ou o hash. tip { } mira um elemento <tip>, não class="tip". Escreva .tip.
  • Espaço em um seletor composto. p .note não é p.note.
  • Esperar que > alcance os netos. Use um espaço para qualquer profundidade.
  • Um erro de digitação quebra o grupo inteiro. Em h1, h2:hovr, h3 nada é estilizado.
  • Seletores longos demais. body div.wrapper ul li a é lento de ler e difícil de sobrescrever. Uma única classe costuma bastar.

Perguntas frequentes

O que é um seletor CSS?

É a parte de uma regra CSS antes do { que diz a quais elementos as declarações se aplicam. Em p.note { color: blue; }, o seletor p.note seleciona todo <p> com a classe note.

Qual a diferença entre espaço e > em um seletor CSS?

O espaço é o combinador descendente: nav a seleciona todo link em qualquer lugar dentro de um nav, em qualquer profundidade. O > é o combinador de filho: nav > a seleciona só os links cujo pai direto é o nav.

O que significa + no CSS?

+ é o combinador de irmão adjacente. h2 + p seleciona um <p> que vem logo depois de um <h2> com o mesmo pai. O ~ é mais amplo: h2 ~ p seleciona todos os irmãos <p> que vêm depois.

Como selecionar elementos pelo atributo no CSS?

Coloque o atributo entre colchetes: [disabled] seleciona elementos que o têm, [type="email"] um valor exato, [href^="https"] um valor que começa com um texto, [href$=".pdf"] um que termina com ele e [class*="btn"] um que o contém.

O CSS consegue selecionar o elemento pai?

Sim, com a pseudo-classe :has(), suportada nas versões atuais de Chrome, Firefox e Safari. li:has(> a.active) seleciona os itens de lista que contêm diretamente um link ativo.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR