Guia de Seletores CSS
Referência Completa · Front-end
Guia de
Seletores CSS
Desenvolvido por J. L. Gregório
Todo seletor que existe, organizado por categoria — cada um com explicação, código e um exemplo renderizado ao vivo para você ver o efeito acontecendo.
Seletores Simples
A base de tudo: selecionam elementos por tag, por classe, por ID, por todos de uma vez, ou vários ao mesmo tempo.
elemento tag
Seleciona todas as ocorrências de uma tag HTML.
<p>Sou um parágrafo</p> <h4>Sou um título</h4>
p { color: tomato; font-weight: 600; } h4 { color: teal; }
Sou um parágrafo
Sou um título
.classe classe
Seleciona elementos com determinada classe. Reutilizável em vários elementos.
<span class="destaque">Em destaque</span> <p class="aviso">Mensagem de aviso</p>
.destaque { background: goldenrod; } .aviso { border-left: 4px solid red; }
Em destaque
Mensagem de aviso
#id id
Seleciona o elemento com aquele ID. Deve ser único na página.
<p id="principal">Conteúdo principal</p> <p id="rodape">Texto do rodapé</p>
#principal { font-size: 1.3rem; } #rodape { font-style: italic; }
Conteúdo principal
Texto do rodapé
* universal
Seleciona absolutamente todos os elementos.
<div> <p>Tudo vira mono</p> <span>Inclusive isto</span> </div>
* { font-family: monospace; letter-spacing: .04em; }
Tudo vira mono
Inclusive istoA, B, C agrupamento
Aplica o mesmo estilo a vários seletores de uma só vez (separados por vírgula).
<h4>Título 4</h4> <h5>Título 5</h5> <h6>Título 6</h6>
h4, h5, h6 { color: tomato; text-transform: uppercase; }
Título 4
Título 5
Título 6
Combinadores
Descrevem a relação de parentesco entre os elementos: descendente, filho direto, irmão imediato e irmãos gerais.
A B descendente
Seleciona B que esteja dentro de A, em qualquer nível de profundidade.
<article> <p>Texto com <span>destaque</span></p> </article> <span>Fora — sem efeito</span>
article span { background: teal; color: white; }
Texto com destaque
A > B filho direto
Seleciona B apenas se for filho imediato de A (um nível abaixo).
<ul class="menu"> <li>Filho direto</li> <li>Outro <ul><li>Neto</li></ul> </li> </ul>
.menu > li { color: tomato; font-weight: 700; }
A + B irmão adjacente
Seleciona o B que vem imediatamente após A, no mesmo nível.
<h4>Título</h4> <p>Logo após — afetado</p> <p>Segundo — sem efeito</p>
h4 + p { color: goldenrod; font-style: italic; }
Título
Logo após — afetado
Segundo — sem efeito
A ~ B irmãos gerais
Seleciona todos os B que vêm depois de A, no mesmo nível.
<h4>Título</h4> <p>Irmão 1</p> <p>Irmão 2</p>
h4 ~ p { border-bottom: 2px dotted olive; }
Título
Irmão 1
Irmão 2
Pseudo-classes
Selecionam elementos em um determinado estado ou posição: ao passar o mouse, ao focar, o primeiro filho, os pares, os marcados, etc. Começam com dois-pontos :
:hover estado
Ativa quando o mouse passa por cima. Passe o mouse no botão →
<button>Passe aqui</button>
button:hover { background: tomato; transform: scale(1.06); }
:focus estado
Ativa quando o elemento recebe foco. Clique no campo →
<input placeholder="Clique aqui">
input:focus { border-color: teal; box-shadow: 0 0 0 3px #2f6b6633; }
:first-child · :last-child · :nth-child() posição
Selecionam pela posição entre os irmãos. nth-child(even) pega os pares.
<ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> <li>Item 4</li> </ul>
li:first-child { background: olive; } li:last-child { background: tomato; } li:nth-child(even) { background: #efe7d6; }
- Item 1
- Item 2
- Item 3
- Item 4
:not() negação
Seleciona tudo que não corresponde ao seletor de dentro dos parênteses.
<li class="lido">Lida</li> <li>Não lida</li> <li>Não lida</li>
li:not(.lido) { color: tomato; font-weight: 700; }
- Lida
- Não lida
- Não lida
:checked estado
Ativa em checkboxes / radios marcados. Marque a caixa →
<label> <input type="checkbox"> <span>Tarefa concluída</span> </label>
input:checked + span { color: teal; text-decoration: line-through; }
Pseudo-elementos
Estilizam uma parte específica do elemento — a primeira letra, a primeira linha, o texto selecionado, ou criam conteúdo antes/depois. Usam dois-pontos duplos ::
::before · ::after conteúdo gerado
Inserem conteúdo decorativo antes ou depois do elemento, via propriedade content.
<p class="nota">Observação</p> <p class="preco">49,90</p>
.nota::before { content: "➜ "; } .preco::after { content: " R$"; }
Observação
49,90
::first-letter parte do texto
Estiliza só a primeira letra — clássico recurso de capitular editorial.
<p>Era uma vez um seletor muito poderoso que...</p>
p::first-letter { font-size: 2.6rem; color: tomato; float: left; }
Era uma vez um seletor muito poderoso que transformava apenas a primeira letra deste parágrafo inteiro.
::first-line parte do texto
Estiliza apenas a primeira linha do bloco (recalculada conforme a largura).
<p>Esta primeira linha recebe um estilo diferente do resto do parágrafo.</p>
p::first-line { font-variant: small-caps; color: teal; }
Esta primeira linha recebe um estilo diferente do resto do parágrafo, que volta ao normal a partir da segunda linha em diante.
::selection parte do texto
Estiliza o trecho que o usuário seleciona com o mouse. Selecione o texto →
<p>Selecione este texto com o mouse para ver o efeito.</p>
p::selection { background: goldenrod; color: white; }
Selecione este texto com o mouse para ver a cor de fundo da seleção mudar.
::placeholder parte do input
Estiliza o texto-fantasma de campos de formulário.
<input placeholder="Seu nome...">
input::placeholder { color: tomato; font-style: italic; }
Seletores de Atributo
Selecionam elementos pela presença ou pelo valor de um atributo HTML. Escritos entre colchetes [ ].
[attr] existe
Seleciona elementos que possuem o atributo, qualquer que seja o valor.
<a target="_blank">Abre em nova aba</a> <a>Link comum</a>
a[target] { color: tomato; font-weight: 700; }
[attr=”valor”] igual a
Seleciona elementos cujo atributo é exatamente aquele valor.
<input type="password"> <input type="email">
input[type="password"] { border: 2px solid red; } input[type="email"] { border: 2px solid teal; }
[attr^=”valor”] começa com
Seleciona quando o valor do atributo começa com o texto dado.
<a href="https://site.com">Seguro</a> <a href="mailto:oi@x.com">E-mail</a>
a[href^="https"] { color: olive; } a[href^="mailto"] { color: goldenrod; }
[attr$=”valor”] termina com
Seleciona quando o valor termina com o texto dado — ótimo para extensões de arquivo.
<a href="manual.pdf">Manual</a> <a href="fotos.zip">Fotos</a>
a[href$=".pdf"]::after { content: " [PDF]"; } a[href$=".zip"]::after { content: " [ZIP]"; }
[attr*=”valor”] contém
Seleciona quando o valor contém o texto em qualquer posição.
<a href="loja.brasil.com/x">Achado</a> <a href="site.org">Ignorado</a>
a[href*="brasil"] { background: olive; color: white; }
[attr~=”valor”] palavra exata
Seleciona quando o valor contém aquela palavra inteira dentro de uma lista separada por espaços.
<span data-tags="html css js">Tem CSS</span> <span data-tags="html js">Sem CSS</span>
span[data-tags~="css"] { outline: 2px solid tomato; }
Tem CSS · Sem CSS
[attr|=”valor”] valor ou prefixo-
Seleciona quando o valor é exatamente o texto, ou começa com ele seguido de hífen. Muito usado com lang.
<p lang="pt-BR">Português</p> <p lang="en">Inglês</p>
p[lang|="pt"] { border-left: 4px solid teal; color: teal; }
Português (pt-BR)
Inglês (en)