kb.erickguedes.com
CSS3: Estilização e Layout Moderno

Flexbox

Aula 2 de 7

Flexbox

Flexbox é um modelo de layout unidimensional para distribuição de espaço e alinhamento.

Container Flex

.container {
  display: flex;
  flex-direction: row;         /* row | column | row-reverse | column-reverse */
  flex-wrap: wrap;             /* nowrap | wrap | wrap-reverse */
  justify-content: center;     /* main axis: flex-start | flex-end | center |
                                  space-between | space-around | space-evenly */
  align-items: center;        /* cross axis: stretch | flex-start | flex-end |
                                  center | baseline */
  align-content: space-between; /* cross axis (multi-line): flex-start | flex-end |
                                   center | stretch | space-between | space-around */
  gap: 1rem;                  /* row-gap + column-gap */
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>

Itens Flex

.item {
  flex-grow: 1;       /* proporção de crescimento */
  flex-shrink: 1;     /* proporção de encolhimento */
  flex-basis: 200px;  /* tamanho base antes de crescer/encolher */

  /* Atalho: flex: grow shrink basis */
  flex: 1 1 200px;

  align-self: center;       /* alinhamento individual no cross axis */
  order: 0;                 /* ordem visual (padrão 0) */
}

Exemplos Práticos

Navbar Responsiva

.navbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem 2rem;
  background: #2c3e50;
  color: white;
}

.nav-links {
  display: flex;
  gap: 1.5rem;
  list-style: none;
}

.nav-links a {
  color: white;
  text-decoration: none;
}

.logo {
  font-size: 1.5rem;
  font-weight: bold;
}
<nav class="navbar">
  <div class="logo">MeuSite</div>
  <ul class="nav-links">
    <li><a href="#home">Home</a></li>
    <li><a href="#sobre">Sobre</a></li>
    <li><a href="#contato">Contato</a></li>
  </ul>
</nav>

Card Grid

.card-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  padding: 2rem;
}

.card {
  flex: 1 1 300px;
  background: white;
  border-radius: 12px;
  padding: 1.5rem;
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

.card.featured {
  flex: 2 1 400px;
  background: #3498db;
  color: white;
}

Centering Perfeito

.centering {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

Layout de Formulário

.form-group {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-bottom: 1rem;
}

.form-row {
  display: flex;
  gap: 1rem;
}

.form-row > * {
  flex: 1;
}
<form class="form">
  <div class="form-row">
    <div class="form-group">
      <label for="nome">Nome</label>
      <input type="text" id="nome">
    </div>
    <div class="form-group">
      <label for="sobrenome">Sobrenome</label>
      <input type="text" id="sobrenome">
    </div>
  </div>
  <div class="form-group">
    <label for="email">E-mail</label>
    <input type="email" id="email">
  </div>
</form>

Lab: Flexbox Layout Completo

Crie um layout responsivo com navbar, grid de cards e footer usando apenas Flexbox.

# Verifique em diferentes viewports
# Use DevTools > Toggle Device Toolbar (Ctrl+Shift+M)

Flexbox resolve 90% dos problemas de layout na web. Domine o container e os itens, e o alinhamento se torna trivial.