0Pricing
CSS Academy · Aula

:has(): pseudo-classe relacional

Selecione elementos pai com base em seus elementos filhos usando a poderosa pseudo-classe relacional :has().

:has(): pseudo-classe relacional é uma aula grátis de CSS Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de CSS Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de CSS Academy inclui 4 aulas no total.

O que é :has()?

A pseudoclasse :has() seleciona um elemento se ele contiver um descendente que corresponda ao argumento. Frequentemente chamada de "seletor pai", ela permite estilizar um elemento pai com base em seus filhos — uma capacidade que o CSS nunca teve antes.

Sintaxe básica

.card:has(img) seleciona qualquer elemento .card que contenha um descendente img. O argumento é uma lista de seletores relativos — qualquer seletor CSS válido que descreva elementos em relação ao elemento de referência.

Estilização de elementos pai

Estilize um contêiner de formulário quando ele tiver um campo de entrada inválido: form:has(:invalid) { border-color: red; }. Estilize uma seção que contenha um título: section:has(h2) { padding-top: 2rem; }. O elemento pai muda de aparência com base no estado do filho.

Seleção de elementos irmãos

:has() pode selecionar irmãos anteriores — algo que + e ~ não conseguem fazer. h2:has(+ p) seleciona elementos h2 imediatamente seguidos por p. li:has(~ .active) seleciona elementos li que têm um irmão .active posterior.

Estilização do estado do formulário

Reaja à validade nativa do formulário sem JavaScript: input:has(~ .error-msg) estiliza um campo de entrada que tem uma mensagem de erro como irmão. label:has(+ input:required) estiliza rótulos cujo campo de entrada associado é obrigatório — tudo apenas com CSS.

Estado da navegação

Destaque contêineres de navegação com base no filho ativo: nav:has(.active) aplica estilos a toda a navegação quando qualquer filho tem a classe active. Isso é útil para indicar qual seção da navegação está atual no nível do contêiner.

Combinação com outras pseudoclasses

.grid:has(.card:focus-within) estiliza toda a grade quando qualquer cartão recebe foco pelo teclado. .dropdown:has(:hover) mantém um menu suspenso aberto enquanto o ponteiro está sobre qualquer descendente — uma alternativa mais simples que cadeias complexas de combinadores de irmãos.

Equivalente a uma consulta de mídia no CSS

.sidebar:has(nav) aplica uma estrutura diferente de .sidebar:not(:has(nav)). Estrutura condicional sem JavaScript: a presença ou ausência de filhos específicos determina a estrutura do elemento pai, permitindo um CSS verdadeiramente adaptável e orientado pelo conteúdo.

Considerações de desempenho

:has() com seletores de argumento abrangentes (por exemplo, :has(*)) pode ser custoso — o navegador precisa verificar cada elemento. Mantenha os argumentos de :has() específicos. Prefira :has(> .specific-child) (filho direto) a :has(.specific-child) (qualquer descendente) quando possível.

Compatibilidade dos navegadores

:has() é compatível com Chrome 105+, Safari 15.4+ e Firefox 121+. Tem compatibilidade ampla desde o final de 2023. Não existe um polyfill (seria necessário usar JavaScript para simulá-lo); use-o com aprimoramento progressivo em navegadores mais antigos, nos quais o recurso não seja essencial.

Substituindo padrões de JavaScript

Padrões que antes exigiam ouvintes de eventos em JS: "adicionar uma classe ao pai quando o filho recebe foco", "mostrar uma sobreposição quando modal-trigger existe", "estilizar uma grade de modo diferente quando ela tem exatamente três itens". :has() trata todos esses casos de forma declarativa.

Verificação de conhecimento

O que torna :has() único em comparação com combinadores CSS existentes, como + e ~?

Resumo

:has() é a primeira pseudoclasse relacional realmente expressiva do CSS, permitindo selecionar elementos pai e irmãos anteriores. Ela possibilita estilização orientada pelo conteúdo, reações ao estado de formulários, destaque da navegação e muitos padrões que antes exigiam manipulação do DOM com JavaScript — tudo de forma declarativa no CSS.

Perguntas Frequentes

A aula “:has(): pseudo-classe relacional” é grátis?

Sim — o texto completo de “:has(): pseudo-classe relacional” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de CSS Academy, atualize para CoddyKit PRO. O curso de CSS Academy inclui 4 aulas no total.

O que vou aprender em “:has(): pseudo-classe relacional”?

Selecione elementos pai com base em seus elementos filhos usando a poderosa pseudo-classe relacional :has(). Você pratica CSS Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar CSS Academy?

Nenhuma experiência prévia é necessária. CSS Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “:has(): pseudo-classe relacional”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de CSS Academy?

Sim. Cada aula de CSS Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Aninhamento nativo de CSS
  2. :has(): pseudo-classe relacional
  3. @scope para estilos com escopo
  4. API View Transitions
← Voltar para CSS Academy