Testador de seletores CSS
Cole HTML e um ou mais seletores (um por linha) e veja exatamente que elementos cada seletor casa: os elementos destacados na árvore analisada com o seu caminho e linha, a contagem por seletor e a sua especificidade contada pela seção 15 do Selectors Level 4. O HTML é analisado de modo inerte com o mesmo parser do explicador de estrutura HTML; os seletores são analisados e casados pelas próprias regras do Selectors Level 4 (composto por composto, da direita para a esquerda), incluindo :is(), :not(), :where(), :has(), :nth-child(An+B of S), operadores de atributo com as flags i e s, escapes CSS e as pseudoclasses de estado de formulário lidas dos atributos. Seletores inválidos são nomeados com a posição do erro; as pseudoclasses que um documento estático não responde são marcadas. Verificado contra o querySelectorAll do Chromium.
Web e HTTP20 elementos, 19 seletores. 19 válidos, nenhum inválido; 14 elementos casados por ao menos um seletor.
Os seletores
| # | seletor | casamentos | A,B,C | notas |
|---|---|---|---|---|
li | 3 casamentos | 0,0,1 | ||
li.item | 3 casamentos | 0,1,1 | ||
.item.first | um casamento | 0,2,0 | ||
#top | um casamento | 1,0,0 | ||
nav > ul > li:first-child | um casamento | 0,1,3 | ||
li:last-child a | um casamento | 0,1,2 | ||
li:nth-child(2) | um casamento | 0,1,1 | ||
li:nth-child(odd) | 2 casamentos | 0,1,1 | ||
a[href] | 2 casamentos | 0,1,1 | ||
a:any-link | 2 casamentos | 0,1,1 | :any-link é lida dos atributos do modo como o HTML Standard a define (checked, selected, disabled incluindo os descendentes de um fieldset desabilitado fora do seu primeiro legend, required, readonly, open, href em a ou area, lang, dir, um hífen no nome de um elemento personalizado): a resposta de um navegador pode diferir onde scripts ou ações do usuário mudaram o estado. | |
a[target=_blank] | um casamento | 0,1,1 | ||
a[href^="/d"] | um casamento | 0,1,1 | ||
[data-x~=b] | um casamento | 0,1,0 | ||
[title="hello world" i] | um casamento | 0,1,0 | ||
[title="hello world"] | nenhum casamento | 0,1,0 | ||
h1 + p | um casamento | 0,0,2 | ||
h1 ~ p | 4 casamentos | 0,0,2 | ||
main * | 7 casamentos | 0,0,1 | ||
P.LEAD | nenhum casamento | 0,1,1 |
Um seletor que nomeia um pseudoelemento (::before, ::first-line, …) seleciona uma caixa, não um elemento; o querySelectorAll não devolve nada para ele, e a contagem mostrada é dos elementos que originariam o pseudoelemento. A especificidade é a tripla do membro mais específico da lista, contada pela seção 15 do Selectors 4 a partir do seletor analisado, de modo que um membro que um :is() ou :where() tolerante descartou conta zero (16.1); a calculadora de especificidade conta o texto como escrito. Clique num número para destacar na árvore os casamentos de um só seletor.
Os elementos casados
- 1
li3 casamentoshtml > body > nav > ul > li:nth-child(1)linha 7html > body > nav > ul > li:nth-child(2)linha 8html > body > nav > ul > li:nth-child(3)linha 9
- 2
li.item3 casamentoshtml > body > nav > ul > li:nth-child(1)linha 7html > body > nav > ul > li:nth-child(2)linha 8html > body > nav > ul > li:nth-child(3)linha 9
- 3
.item.firstum casamentohtml > body > nav > ul > li:nth-child(1)linha 7
- 4
#topum casamentohtml > body > navlinha 5
- 5
nav > ul > li:first-childum casamentohtml > body > nav > ul > li:nth-child(1)linha 7
- 6
li:last-child aum casamentohtml > body > nav > ul > li:nth-child(3) > alinha 9 “No href”
- 7
li:nth-child(2)um casamentohtml > body > nav > ul > li:nth-child(2)linha 8
- 8
li:nth-child(odd)2 casamentoshtml > body > nav > ul > li:nth-child(1)linha 7html > body > nav > ul > li:nth-child(3)linha 9
- 9
a[href]2 casamentoshtml > body > nav > ul > li:nth-child(1) > alinha 7 “Home”html > body > nav > ul > li:nth-child(2) > alinha 8 “Docs”
- 10
a:any-link2 casamentoshtml > body > nav > ul > li:nth-child(1) > alinha 7 “Home”html > body > nav > ul > li:nth-child(2) > alinha 8 “Docs”
- 11
a[target=_blank]um casamentohtml > body > nav > ul > li:nth-child(2) > alinha 8 “Docs”
- 12
a[href^="/d"]um casamentohtml > body > nav > ul > li:nth-child(2) > alinha 8 “Docs”
- 13
[data-x~=b]um casamentohtml > body > main > divlinha 18
- 14
[title="hello world" i]um casamentohtml > body > main > divlinha 18
- 16
h1 + pum casamentohtml > body > main > p:nth-child(2)linha 14 “Lead .”
- 17
h1 ~ p4 casamentoshtml > body > main > p:nth-child(2)linha 14 “Lead .”html > body > main > p:nth-child(3)linha 15html > body > main > p:nth-child(4)linha 16html > body > main > p:nth-child(5)linha 17
- 18
main *7 casamentoshtml > body > main > h1linha 13 “Title”html > body > main > p:nth-child(2)linha 14 “Lead .”html > body > main > p:nth-child(2) > emlinha 14 “text”html > body > main > p:nth-child(3)linha 15html > body > main > p:nth-child(4)linha 16html > body > main > p:nth-child(5)linha 17html > body > main > divlinha 18
A árvore analisada
Cada elemento do documento que o parser construiu, com os números dos seletores que o casam. Um ponto na coluna marca um elemento que o parser criou (html, head, body, tbody).
- 2
<html lang="en"> - 3
<head> - 3
<title>“Menu” - 4
<body> - 5
<nav id="top" class="menu main">4 - 6
<ul> - 7
<li class="item first">12358 - 7
<a href="/">“Home”910 - 8
<li class="item">127 - 8
<a href="/docs" target="_blank">“Docs”9101112 - 9
<li class="item last">128 - 9
<a>“No href”6 - 12
<main> - 13
<h1>“Title”18 - 14
<p class="lead">“Lead .”161718 - 14
<em>“text”18 - 15
<p>1718 - 16
<p>1718 - 17
<p>1718 - 18
<div data-x="A b" title="Hello World">131418
A mesma árvore, com os reparos e erros do parser, está no explicador de estrutura HTML e DOM, e a contagem de cada seletor na calculadora de especificidade CSS. O testador lê uma árvore estática: nenhuma folha de estilo é aplicada, nenhum script roda, nada está focado ou sob o ponteiro, nada foi visitado, e :scope é a raiz do documento. :empty segue o Chromium (Level 3) onde o Selectors Level 4 avançou; a flag s e a forma de :lang() entre aspas seguem o Level 4 onde o Chromium não avançou (verificado em 2026-10-05). Um seletor deixado aberto no fim é fechado ali, como faz o CSS Syntax. Classe e id casam com distinção de caixa em todo modo (o Quirks Mode Standard não define mais uma peculiaridade de caixa para eles). Entradas acima de 200.000 caracteres de HTML são recusadas.
Referências
- Selectors Level 4, W3C Working Draft 22 January 2026
- CSS Syntax Module Level 3, W3C Candidate Recommendation Draft 1 October 2026
- HTML Living Standard (WHATWG): Case-sensitivity of selectors; the pseudo-classes :enabled, :disabled, :checked, :required, :optional, :read-write, :open, :defined, :link
- Quirks Mode Standard (WHATWG), Living Standard, last updated 30 September 2026
- parse5 8.0.1, the HTML parser (MIT)