Seletores e especificidade
HTML & CSS • Módulo 2: CSS essencial • Codding — material para estudo offline
Aluno: ______________________________ Data: ____ / ____ / ______
Nesta aula, você vai compreender Seletores e especificidade com explicação progressiva, exemplo resolvido, checagens e prática. Nada de apenas copiar: cada etapa prepara a próxima.
Objetivos da aula
- Explicar Seletores e especificidade com suas próprias palavras
- Reconhecer as partes importantes em um exemplo real
- Identificar e corrigir os erros mais frequentes
- Aplicar o conteúdo em uma atividade prática
Pré-requisito: Leia a aula anterior do módulo se algum termo parecer novo. Você pode testar o exemplo antes de continuar. • Duração: 50–75 min
Explicação passo a passo
1. O que é Seletores e especificidade
Todo elemento é uma caixa: conteúdo, padding, borda e margem. Entender o box model resolve 80% dos 'por que isso não encaixa'.
Checkpoint: Quando Grid é melhor que Flexbox? — Resposta: Quando você precisa alinhar em duas dimensões (linhas e colunas)
2. Como pensar antes de fazer
box-sizing: border-box faz largura incluir padding e borda — é o padrão que todo projeto moderno liga logo no começo. Sem ele, width: 100% mais padding estoura o container.
Dica: Não decore a forma. Tente explicar com suas palavras qual problema “Seletores e especificidade” resolve.
3. Exemplo completo, do início ao resultado
Flexbox organiza em UMA direção (linha ou coluna): use para barras de navegação, cards lado a lado, centralização. Grid organiza em DUAS direções: use para layouts de página com linhas e colunas definidas.
<!doctype html>
<html lang="pt-BR"><head><meta charset="utf-8" /><style>
* { box-sizing: border-box; }
body { font-family: system-ui; margin: 0; padding: 1.5rem; background: #0b1020; color: #eee; }
.cards { display: grid; gap: 1rem; grid-template-columns: 1fr; }
.card { background: #161c33; padding: 1rem; border-radius: 12px; }
.barra { display: flex; align-items: center; justify-content: space-between; }
@media (min-width: 640px) { .cards { grid-template-columns: repeat(3, 1fr); } }
</style></head>
<body>
<div class="barra"><strong>Loja</strong><span>Carrinho</span></div>
<div class="cards">
<div class="card">Um</div><div class="card">Dois</div><div class="card">Três</div>
</div>
</body></html>| Trecho | O que faz |
|---|
<!doctype html> | Define uma parte da estrutura visível ou semântica da página. |
<html lang="pt-BR"><head><meta charset="utf-8" /><style> | Define uma parte da estrutura visível ou semântica da página. |
* { box-sizing: border-box; } | Contribui para a transformação principal mostrada neste exemplo. |
body { font-family: system-ui; margin: 0; padding: 1.5rem; background: #0b1020; color: #eee; } | Contribui para a transformação principal mostrada neste exemplo. |
.cards { display: grid; gap: 1rem; grid-template-columns: 1fr; } | Contribui para a transformação principal mostrada neste exemplo. |
.card { background: #161c33; padding: 1rem; border-radius: 12px; } | Contribui para a transformação principal mostrada neste exemplo. |
.barra { display: flex; align-items: center; justify-content: space-between; } | Contribui para a transformação principal mostrada neste exemplo. |
@media (min-width: 640px) { .cards { grid-template-columns: repeat(3, 1fr); } } | Contribui para a transformação principal mostrada neste exemplo. |
Dica: Uma coluna no celular, três a partir de 640px. Flex cuida da barra (uma direção), grid cuida dos cards (duas).
Checkpoint: O que box-sizing: border-box faz? — Resposta: Faz padding e borda entrarem na largura declarada
4. Do detalhe para o todo
Responsividade começa pelo mobile: escreva o estilo base para tela pequena e use @media (min-width: ...) para adicionar o que a tela grande permite. Unidades relativas (rem, %, fr, clamp) evitam quebra em zoom.
5. Erros comuns e como corrigi-los
1. Esquecer box-sizing e brigar com larguras que estouram.
2. Usar posicionamento absoluto para montar layout inteiro.
3. Fixar tudo em pixels e quebrar em telas pequenas.
Dica: Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
Prática guiada
1. 1. Monte a primeira versão
Prática guiada: edite o exemplo abaixo aplicando "Seletores e especificidade" e clique em Rodar para ver o resultado ao vivo.
<!doctype html>
<html lang="pt-BR"><head><meta charset="utf-8" /><style>
* { box-sizing: border-box; }
body { font-family: system-ui; margin: 0; padding: 1.5rem; background: #0b1020; color: #eee; }
.cards { display: grid; gap: 1rem; grid-template-columns: 1fr; }
.card { background: #161c33; padding: 1rem; border-radius: 12px; }
.barra { display: flex; align-items: center; justify-content: space-between; }
@media (min-width: 640px) { .cards { grid-template-columns: repeat(3, 1fr); } }
</style></head>
<body>
<div class="barra"><strong>Loja</strong><span>Carrinho</span></div>
<div class="cards">
<div class="card">Um</div><div class="card">Dois</div><div class="card">Três</div>
</div>
</body></html>Dica: Volte ao exemplo resolvido e compare a estrutura. Esquecer box-sizing e brigar com larguras que estouram.
2. 2. Preveja antes de testar
Sem executar, explique qual resultado o exemplo de Seletores e especificidade deve produzir e qual parte é responsável por ele.
Minha previsão:
A parte responsável pelo resultado:
Como vou conferir:
Dica: Use o modelo mental da aula: entrada, transformação e evidência observável.
3. 3. Encontre e corrija o erro
Use o exemplo de Seletores e especificidade, identifique um risco citado na aula e registre ou implemente a correção.
<!doctype html>
<html lang="pt-BR"><head><meta charset="utf-8" /><style>
* { box-sizing: border-box; }
body { font-family: system-ui; margin: 0; padding: 1.5rem; background: #0b1020; color: #eee; }
.cards { display: grid; gap: 1rem; grid-template-columns: 1fr; }
.card { background: #161c33; padding: 1rem; border-radius: 12px; }
.barra { display: flex; align-items: center; justify-content: space-between; }
@media (min-width: 640px) { .cards { grid-template-columns: repeat(3, 1fr); } }
</style></head>
<body>
<div class="barra"><strong>Loja</strong><span>Carrinho</span></div>
<div class="cards">
<div class="card">Um</div><div class="card">Dois</div><div class="card">Três</div>
</div>
</body></html>Dica: Esquecer box-sizing e brigar com larguras que estouram.
4. 4. Aplique em um caso novo
Crie uma variação própria usando Seletores e especificidade. Mude os dados ou o cenário e demonstre que o resultado continua correto.
<!doctype html>
<html lang="pt-BR"><head><meta charset="utf-8" /><style>
* { box-sizing: border-box; }
body { font-family: system-ui; margin: 0; padding: 1.5rem; background: #0b1020; color: #eee; }
.cards { display: grid; gap: 1rem; grid-template-columns: 1fr; }
.card { background: #161c33; padding: 1rem; border-radius: 12px; }
.barra { display: flex; align-items: center; justify-content: space-between; }
@media (min-width: 640px) { .cards { grid-template-columns: repeat(3, 1fr); } }
</style></head>
<body>
<div class="barra"><strong>Loja</strong><span>Carrinho</span></div>
<div class="cards">
<div class="card">Um</div><div class="card">Dois</div><div class="card">Três</div>
</div>
</body></html>Dica: Mantenha a estrutura que já funcionou e altere uma decisão por vez.
Revisão
- Todo elemento é uma caixa: conteúdo, padding, borda e margem. Entender o box model resolve 80% dos 'por que isso não encaixa'.
- Uma coluna no celular, três a partir de 640px. Flex cuida da barra (uma direção), grid cuida dos cards (duas).
- Evite: Esquecer box-sizing e brigar com larguras que estouram.
- Evite: Usar posicionamento absoluto para montar layout inteiro.
Exemplo comentado
<!doctype html>
<html lang="pt-BR"><head><meta charset="utf-8" /><style>
* { box-sizing: border-box; }
body { font-family: system-ui; margin: 0; padding: 1.5rem; background: #0b1020; color: #eee; }
.cards { display: grid; gap: 1rem; grid-template-columns: 1fr; }
.card { background: #161c33; padding: 1rem; border-radius: 12px; }
.barra { display: flex; align-items: center; justify-content: space-between; }
@media (min-width: 640px) { .cards { grid-template-columns: repeat(3, 1fr); } }
</style></head>
<body>
<div class="barra"><strong>Loja</strong><span>Carrinho</span></div>
<div class="cards">
<div class="card">Um</div><div class="card">Dois</div><div class="card">Três</div>
</div>
</body></html>Uma coluna no celular, três a partir de 640px. Flex cuida da barra (uma direção), grid cuida dos cards (duas).
Erros comuns
- Esquecer box-sizing e brigar com larguras que estouram.
- Usar posicionamento absoluto para montar layout inteiro.
- Fixar tudo em pixels e quebrar em telas pequenas.
Quiz e gabarito completo
1. Quando Grid é melhor que Flexbox?
- a) Sempre
- b) Quando você precisa alinhar em duas dimensões (linhas e colunas)
- c) Só para textos
- d) Quando o layout é de uma direção só
Gabarito: b) Quando você precisa alinhar em duas dimensões (linhas e colunas) — Flex é unidimensional; grid é bidimensional.
2. O que box-sizing: border-box faz?
- a) Adiciona borda a tudo
- b) Faz padding e borda entrarem na largura declarada
- c) Remove a margem
- d) Centraliza o elemento
Gabarito: b) Faz padding e borda entrarem na largura declarada — Sem ele, width: 100% + padding ultrapassa o container.
Codding • HTML & CSS • Seletores e especificidade • Prova final e certificado em codding.lovable.app/cursos/html-css/prova