🌳 Árvore DOM - Relações e Seletores
📚 Objetivo da Aula: Compreender a estrutura hierárquica do DOM (Document Object Model) e dominar os seletores CSS baseados em relações familiares entre elementos. Esta base é fundamental para escrever CSS eficiente e bem estruturado.
🏠 1. Relação Pai e Filho
No DOM, um elemento pai contém outros elementos diretamente, chamados de filhos. Esta é a relação mais básica e direta.
🎯 Demonstração Visual Interativa:
Passe o mouse sobre os elementos para ver as relações!
- Item 1 - Filho direto do <ul>
- Item 2 - Também filho direto do <ul>
- Item 3 - Outro filho do mesmo pai
/* 🎯 Seletor Pai > Filho (Direto) */
ul > li {
color: #1976d2;
font-weight: bold;
background: rgba(25, 118, 210, 0.1);
padding: 8px;
border-radius: 5px;
margin: 5px 0;
}
/* ⚠️ IMPORTANTE: > seleciona APENAS filhos DIRETOS */
🔍 Como Funciona:
• O seletor ul > li
aplica estilos apenas aos elementos <li>
que são filhos diretos de <ul>
• Se houvesse um <li>
dentro de outro elemento, ele não seria afetado
• É mais específico que o seletor de descendente simples
• Use >
quando a estrutura HTML for conhecida e fixa
🌳 2. Relação Ancestral e Descendente
Um ancestral é qualquer elemento que contém outro, independente do nível. Um descendente está em qualquer lugar dentro do ancestral.
🎯 Hierarquia de Múltiplos Níveis:
/* 🌳 Seletor Ancestral Descendente (Espaço) */
div p {
font-weight: bold;
color: #388e3c;
background: rgba(56, 142, 60, 0.1);
padding: 8px;
border-radius: 5px;
}
/* 🔍 NOTA: Seleciona TODOS os
dentro de
QUALQUER
, em qualquer nível */
🎯 Diferença Fundamental:
• div > p
- Apenas filhos diretos
• div p
- Todos os descendentes (qualquer nível)
• Use o espaço quando não souber a estrutura exata
• Use >
quando quiser ser mais específico
👫 3. Relação entre Irmãos
Elementos irmãos compartilham o mesmo pai e estão no mesmo nível hierárquico, como irmãos em uma família.
🎯 Demonstração de Elementos Irmãos:
Primeiro Irmão
Segundo Irmão
/* 👫 Seletor de Irmão Adjacente (+) */
li + li {
margin-top: 12px;
border-top: 2px solid #f57c00;
padding-top: 12px;
background: rgba(245, 124, 0, 0.1);
}
/* 👥 Seletor de Irmãos Gerais (~) */
h3 ~ p {
color: #8e24aa;
font-style: italic;
background: rgba(142, 36, 170, 0.1);
padding: 8px;
border-radius: 5px;
}
⚡ Dois Tipos de Seletores de Irmãos:
• +
(adjacente) - Seleciona apenas o próximo irmão imediato
• ~
(geral) - Seleciona todos os irmãos que vêm depois
• Ambos requerem que os elementos sejam irmãos (mesmo pai)
• Úteis para criar espaçamentos e separações visuais
🎮 4. Playground Interativo de Seletores
🚀 Teste os Seletores em Ação:
Cada card demonstra um tipo de seletor diferente!
🏠 Pai > Filho
ul > li
- Item direto
- Outro item direto
🌳 Ancestral Descendente
div p
Descendente em qualquer nível
👫 Irmão Adjacente
li + li
- Primeiro item
- Segundo item (com estilo)
- Terceiro item (com estilo)
👥 Irmãos Gerais
h4 ~ p
Título de exemplo
Primeiro parágrafo após o título
Segundo parágrafo também estilizado
📊 5. Tabela de Referência Completa
🎯 Relacionamento |
📝 Sintaxe |
🔍 Exemplo |
📖 Descrição |
⚡ Quando Usar |
Pai → Filho |
A > B |
ul > li |
Seleciona apenas filhos diretos |
Estruturas específicas conhecidas |
Ancestral → Descendente |
A B |
div p |
Seleciona descendentes em qualquer nível |
Estruturas flexíveis e variáveis |
Irmão Adjacente |
A + B |
h1 + p |
Seleciona o próximo irmão imediato |
Espaçamentos específicos |
Irmãos Gerais |
A ~ B |
h1 ~ p |
Seleciona todos os irmãos seguintes |
Grupos de elementos relacionados |
🚀 Dicas de Performance:
- Seja específico: Use seletores mais diretos quando possível
- Evite cascatas longas:
div div div p
é lento
- Use classes: Para elementos reutilizáveis
- Combine seletores:
.menu > li
é mais eficiente
🎯 Aplicações Práticas:
- Navegação:
nav > ul > li
para menus
- Artigos:
article h2 ~ p
para parágrafos após títulos
- Formulários:
label + input
para campos relacionados
- Cards:
.card > .header
para componentes
⚠️ Armadilhas Comuns:
- Ordem importa:
A + B
não é igual a B + A
- Caso específico: Seletores CSS são case-sensitive em algumas situações
- Performance: Seletores complexos demais podem ser lentos
- Manutenção: Estruturas muito específicas são frágeis