Tema 13 · Flexbox Ejes

Flexbox: Contenedor, Ejes y flex-direction

Aprende el modelo de maquetación unidimensional con Flexbox: activación con display: flex, comprensión del eje principal y secundario, flex-direction y control de líneas con flex-wrap.

¿Qué es Flexbox (Flexible Box Layout)?

Flexbox es el sistema estándar de CSS3 diseñado para distribuir el espacio y alinear elementos a lo largo de una sola dimensión (sea en fila horizontal o en columna vertical).

Para activar el entorno flexible basta con declarar en el contenedor padre:

.contenedor-flex {
  display: flex; /* Convierte al elemento en un contenedor flex y a sus hijos directos en flex items */
}

Los Dos Ejes Fundamentales de Flexbox

Todo en Flexbox se rige según dos ejes ortogonales:

  • Eje Principal (Main Axis): Es la dirección en la que fluyen los elementos. Se define mediante la propiedad flex-direction.
  • Eje Cruzado/Secundario (Cross Axis): Es el eje perpendicular al eje principal (si el principal es horizontal, el secundario es vertical).
Diagrama Técnico: Ejes fundamentales de Flexbox y alineación con justify-content y align-items

Diagrama 13.1: Relación entre el Eje Principal (Main Axis), Eje Cruzado (Cross Axis) e inversión de roles con flex-direction: column.

Propiedades del Contenedor: Dirección y Salto de Línea

Propiedad Valores Efecto
flex-direction row (defecto), row-reverse, column, column-reverse Establece el eje principal: horizontal (fila) o vertical (columna).
flex-wrap nowrap (defecto), wrap, wrap-reverse Determina si los elementos se apiñan en una sola línea o si saltan a nuevas líneas al faltar espacio.
flex-flow Shorthand: flex-flow: row wrap; Combina flex-direction y flex-wrap en una sola regla.

⚡ Explorador Interactivo de Ejes Flexbox

Haz clic en los botones para alternar entre flex-direction: row y column, o activar el salto de línea con flex-wrap: wrap en tiempo real:

index.html
Solo lectura
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Flexbox: Contenedor y Ejes</title>
  <style>
    body {
      font-family: Arial, Helvetica, sans-serif;
      background-color: #f8fafc;
      margin: 0;
      padding: 25px;
      color: #0f172a;
    }

    /* Contenedor flexible */
    .caja-padre {
      display: flex;
      flex-direction: row;
      flex-wrap: nowrap;
      gap: 12px;
      background-color: #e2e8f0;
      padding: 16px;
      border-radius: 12px;
      min-height: 120px;
      transition: all 0.3s ease;
      margin-bottom: 20px;
    }

    /* Elementos hijos flexibles (Flex Items) */
    .item-flex {
      background: linear-gradient(135deg, #0284c7, #2563eb);
      color: white;
      padding: 16px 20px;
      border-radius: 8px;
      font-weight: bold;
      text-align: center;
      min-width: 90px;
      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
    }

    .btn-control {
      background: #0f172a;
      color: white;
      border: none;
      padding: 8px 14px;
      border-radius: 6px;
      cursor: pointer;
      font-size: 0.85rem;
      font-weight: 600;
      margin-right: 6px;
      margin-bottom: 6px;
    }
  </style>
</head>
<body>

  <h3>Contenedor Flexible (display: flex)</h3>
  <div id="contenedorFlex" class="caja-padre">
    <div class="item-flex">1. HTML5</div>
    <div class="item-flex">2. CSS3</div>
    <div class="item-flex">3. JavaScript</div>
    <div class="item-flex">4. PHP 8.3</div>
    <div class="item-flex">5. MySQL</div>
  </div>

  <div>
    <strong>Cambiar Dirección:</strong><br>
    <button class="btn-control" onclick="setDirection('row')">Fila (row)</button>
    <button class="btn-control" onclick="setDirection('column')">Columna (column)</button>
    <button class="btn-control" onclick="setDirection('row-reverse')">Fila Invertida (row-reverse)</button>
    <button class="btn-control" style="background:#2563eb;" onclick="toggleWrap()">Alternar Wrap (Salto de línea)</button>
  </div>

  <script>
    const box = document.getElementById('contenedorFlex');
    function setDirection(dir) {
      box.style.flexDirection = dir;
    }
    function toggleWrap() {
      box.style.flexWrap = (box.style.flexWrap === 'wrap') ? 'nowrap' : 'wrap';
    }
  </script>

</body>
</html>
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
Si aplicas flex-direction: column a un contenedor flex, ¿cuál propiedad se encarga de alinear los elementos en el eje horizontal?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de CSS3, Flexbox y Grid y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.