🌐 Capítulo 17: Layout Reativo com CSS Flexbox (Parte 1)
🎯 Objetivos da Aula
Ao final desta aula, você será capaz de:
- Compreender o modelo de layout unidimensional Flexible Box (Flexbox) do CSS3.
- Identificar a diferença conceitual entre o Eixo Principal (Main Axis) e o Eixo Cruzado (Cross Axis).
- Alinhar elementos no eixo principal com
justify-content(flex-start,center,flex-end,space-between,space-around). - Alinhar elementos no eixo cruzado com
align-items(stretch,center,flex-start,flex-end) e espaçar comgap.
🧠 1. O Conceito do Flexbox Container e Seus Eixos
Diferente do modelo tradicional de fluxo em bloco (block/inline), ativamos o modelo flexível aplicando display: flex; no elemento pai (Flex Container). Todos os elementos filhos imediatos tornam-se Flex Items.
flowchart LR subgraph FlexContainer ["FLEX CONTAINER (display: flex)"] Item1["Flex Item 1"] --> Item2["Flex Item 2"] --> Item3["Flex Item 3"] end style FlexContainer fill:#e3f2fd,stroke:#1e88e5
Eixos do Flexbox:
- Main Axis (Eixo Principal): O eixo padrão de distribuição dos itens (por padrão horizontal,
flex-direction: row). - Cross Axis (Eixo Cruzado): O eixo perpendicular de alinhamento (por padrão vertical).
📐 2. Propriedades Principais do Flex Container
| Propriedade | Função | Valores Principais |
|---|---|---|
display | Ativa o modo de layout flexível | flex / inline-flex |
flex-direction | Define o sentido do eixo principal | row (linha) / column (coluna) |
justify-content | Alinha os itens no eixo principal | flex-start, center, flex-end, space-between, space-evenly |
align-items | Alinha os itens no eixo cruzado | stretch, center, flex-start, flex-end |
gap | Define o espaçamento entre itens | 16px, 1rem, 20px |
💻 3. Prática Guiada: Navbar Corporativa com Flexbox
Let’s write a complete HTML/CSS code for a responsive header navbar using Flexbox:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Navbar Responsiva com Flexbox</title>
<style>
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: Arial, sans-serif;
background-color: #f4f6f8;
}
/* FLEX CONTAINER DO CABEÇALHO */
.cabeçalho-principal {
display: flex;
justify-content: space-between; /* Espaca logotipo e navegacao */
align-items: center; /* Alinha verticalmente ao centro */
background-color: #0d47a1;
padding: 16px 32px;
color: #ffffff;
}
.logo h1 {
font-size: 1.5rem;
}
/* FLEX CONTAINER DO MENU DE NAVEGAÇÃO */
.menu-navegacao {
display: flex;
align-items: center;
gap: 24px; /* Espacamento entre os links */
list-style: none;
}
.menu-navegacao a {
color: #ffffff;
text-decoration: none;
font-weight: bold;
transition: color 0.2s ease-in-out;
}
.menu-navegacao a:hover {
color: #90caf9;
}
</style>
</head>
<body>
<header class="cabeçalho-principal">
<div class="logo">
<h1>Portal Acadêmico</h1>
</div>
<nav>
<ul class="menu-navegacao">
<li><a href="#">Início</a></li>
<li><a href="#">Alunos</a></li>
<li><a href="#">Cursos</a></li>
<li><a href="#">Relatórios</a></li>
</ul>
</nav>
</header>
</body>
</html>⚔️ 4. Desafios Práticos (Exercícios 30/50/20)
🥉 Nível Bronze (Fixação)
- Qual a diferença entre as propriedades
justify-contentealign-itemsem um Flex Container padrão (flex-direction: row)? - Para que serve a propriedade
gapno Flexbox?
🥈 Nível Prata (Aplicação)
- Escreva o código CSS necessário para centralizar perfeitamente uma
divde login no meio exato da tela (horizontal e verticalmente) utilizando apenas Flexbox.
🥇 Nível Ouro (Desafio)
- Crie uma barra de ferramentas corporativa contendo um título à esquerda, um campo de busca centralizado e um botão de ação “Novo Cadastro” alinhado à extrema direita usando Flexbox e a propriedade
space-betweenoumargin-left: auto.
💡 Gabaritos Sanfonados de Resposta
💡 Ver Gabarito do Nível Bronze
- Em
flex-direction: row,justify-contentalinha os itens horizontalmente (Eixo Principal), enquantoalign-itemsalinha os itens verticalmente (Eixo Cruzado). - A propriedade
gapdefine um espaçamento uniforme entre os Flex Items, sem necessidade de aplicarmargin-rightno último item.
💡 Ver Gabarito do Nível Prata (Centralização Perfeita)
body {
display: flex;
justify-content: center; /* Centraliza no eixo horizontal */
align-items: center; /* Centraliza no eixo vertical */
min-height: 100vh; /* Garante altura total da tela */
margin: 0;
}
.box-login {
width: 360px;
padding: 32px;
background-color: #ffffff;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}📚 Referências Teóricas Oficiais
- W3C RECOMMENDATION. CSS Flexible Box Layout Module Level 1 (https://www.w3.org/TR/css-flexbox-1/).
- MDN WEB DOCS. Basic Concepts of Flexbox (Mozilla Developer Network).
⬅️ Capítulo Anterior (Posicionamento CSS) | Voltar ao Sumário | Próximo Capítulo (Flexbox Avançado e Grid) ➡️