🏠 Inicio 🌍 Página Principal 🎨 CSS 📐 Flexbox ⊞ CSS Grid

¿Qué es Flexbox?

Flexbox (Flexible Box Layout) es un sistema de layout CSS unidimensional: organiza elementos en una sola dirección (fila o columna).

Es ideal para: navbars, listas de cards, centrar elementos, distribuir espacio entre ítems y crear layouts flexibles sin floats.

💡
Flex = contenedor + items

Al aplicar display: flex al padre, sus hijos directos se convierten automáticamente en flex items.

CSS — Activar Flexbox
.contenedor {
  display: flex;   /* ¡Esto activa Flexbox en los hijos! */
}

Propiedades del Contenedor Flex

flex-direction — dirección del eje principal

flex-direction: row (default)
Item 1
Item 2
Item 3
flex-direction: column
Item 1
Item 2
Item 3
CSS — Contenedor
.contenedor {
  display: flex;

  /* Dirección */
  flex-direction: row;          /* → horizontal (default) */
  flex-direction: column;       /* ↓ vertical */
  flex-direction: row-reverse;  /* ← horizontal invertido */

  /* Alineación en eje PRINCIPAL (horizontal si row) */
  justify-content: flex-start;   /* ← izquierda (default) */
  justify-content: flex-end;     /* → derecha */
  justify-content: center;       /* centrado */
  justify-content: space-between; /* espacio entre ítems */
  justify-content: space-around;  /* espacio alrededor */
  justify-content: space-evenly;  /* espacio igual */

  /* Alineación en eje CRUZADO (vertical si row) */
  align-items: stretch;    /* ocupa todo el alto (default) */
  align-items: flex-start; /* arriba */
  align-items: flex-end;   /* abajo */
  align-items: center;     /* centrado vertical */

  /* Espaciado entre ítems */
  gap: 16px;               /* gap entre todos */
  gap: 8px 16px;           /* filas | columnas */

  /* Permitir que los ítems "salten" de línea */
  flex-wrap: nowrap;       /* todo en una línea (default) */
  flex-wrap: wrap;         /* salta de línea si no cabe */
}

justify-content visual

justify-content: space-between
A
B
C
justify-content: center + align-items: center
Centrado ✓

Propiedades de los Flex Items

CSS — Items
/* flex-grow: cuánto crece relativo a otros */
.item-a { flex-grow: 1; }  /* ocupa 1 parte del espacio libre */
.item-b { flex-grow: 2; }  /* ocupa el doble que item-a */
.item-c { flex-grow: 0; }  /* no crece (default) */

/* flex-shrink: cuánto puede achicarse */
.item { flex-shrink: 1; }   /* puede achicarse (default) */
.item { flex-shrink: 0; }   /* NO se achica nunca */

/* flex-basis: tamaño base antes de grow/shrink */
.item { flex-basis: 200px; }  /* tamaño ideal */
.item { flex-basis: auto; }   /* usa width/height */

/* Shorthand: flex: grow shrink basis */
.item { flex: 1; }          /* flex: 1 1 0 */
.item { flex: 1 0 200px; }  /* crece, no achica, base 200px */
.item { flex: 0 0 auto; }   /* tamaño fijo */

/* align-self: alineación individual */
.item-especial {
  align-self: flex-start;  /* sólo este ítem se va arriba */
}

/* order: cambiar el orden visual */
.item-primero { order: -1; } /* va al principio */
.item-ultimo  { order: 99; } /* va al final */

Casos de Uso Reales

Centrar perfectamente un elemento

CSS
/* Centrado perfecto horizontal y vertical */
.centrar {
  display: flex;
  justify-content: center;  /* horizontal */
  align-items: center;      /* vertical */
  min-height: 100vh;        /* toda la pantalla */
}

Navbar responsive

CSS
.navbar {
  display: flex;
  align-items: center;
  justify-content: space-between; /* logo izq, links der */
  padding: 0 24px;
  height: 60px;
}

.navbar-links {
  display: flex;
  gap: 8px;
  list-style: none;
}

/* En mobile: ocultar links */
@media (max-width: 768px) {
  .navbar-links { display: none; }
}

Grid de cards con flex-wrap

CSS
.cards-container {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

/* Cada card: mínimo 250px, máximo crece igual */
.card {
  flex: 1 1 250px;  /* crece, se achica, base 250px */
  max-width: 350px; /* no crezca demasiado */
}

Ejercicios Resueltos

EJERCICIO 1 Footer con Flexbox

Creá un footer con 3 columnas: logo+descripción, links rápidos, y contacto. Que sea responsive.

  • 1El footer es un flex container con 3 hijos.
  • 2Cada columna tiene flex: 1 para distribuirse igual.
  • 3En mobile: flex-direction: column para apilarlas.
HTML + CSS — Solución
/* HTML */
<footer class="footer">
  <div class="footer-col">
    <h3>Profe. Gatica</h3>
    <p>Clases de programación</p>
  </div>
  <div class="footer-col">
    <h4>Links</h4>
    <ul><li><a href="#">Python</a></li></ul>
  </div>
  <div class="footer-col">
    <h4>Contacto</h4>
    <p>info@profegatica.com</p>
  </div>
</footer>

/* CSS */
.footer {
  display: flex;
  gap: 40px;
  padding: 40px;
  background: #020b18;
}

.footer-col { flex: 1; }

@media (max-width: 600px) {
  .footer {
    flex-direction: column;
    gap: 24px;
  }
}

Ejercicios Propuestos

PROPUESTO 1 Layout de blog con sidebar

Creá un layout de blog con artículo principal (70%) y sidebar (30%).

  • Usar Flexbox para el layout principal.
  • Las cards de artículos también usan Flexbox internamente.
  • En mobile: sidebar se mueve debajo del contenido.
PROPUESTO 2 Galería de fotos responsive

Creá una galería de 9 imágenes con Flexbox.

  • Desktop: 3 columnas, Tablet: 2 columnas, Mobile: 1 columna.
  • Usar flex-wrap: wrap y flex-basis.
  • Efecto hover: escala la imagen y muestra un overlay con el título.