Comprender la propiedad flex-grow en CSS Flexbox

CSSCSSBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, los participantes explorarán la propiedad flex-grow en CSS Flexbox, una poderosa técnica de diseño de página web para crear diseños web responsivos y flexibles. A través de un enfoque paso a paso, los aprendices crearán un archivo HTML, configurarán un contenedor de flexbox y experimentarán con diferentes valores de flex-grow para entender cómo los elementos se expanden dinámicamente y distribuyen el espacio disponible.

El laboratorio guía a los estudiantes a través de la creación de una estructura HTML básica, la definición de un contenedor de flexbox y la aplicación de propiedades flex-grow a los elementos hijos. Al establecer valores numéricos y observar cómo las cajas crecen proporcionalmente, los participantes adquirirán conocimientos prácticos sobre el control de la flexibilidad del diseño y la comprensión del comportamiento sutil de flex-grow en el diseño web.

Crea un archivo HTML y configura la estructura básica

En este paso, crearás el archivo HTML fundamental para explorar la propiedad flex-grow en CSS Flexbox. Configuraremos una estructura HTML básica y prepararemos el entorno para nuestra demostración de flexbox.

Primero, navega hasta el directorio del proyecto y crea un archivo HTML:

cd ~/proyecto
touch index.html

Ahora, abre el archivo index.html en el WebIDE y agrega la siguiente estructura HTML:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Demostración de flex-grow en Flexbox</title>
    <style>
      /* Los estilos CSS se agregarán en pasos posteriores */
    </style>
  </head>
  <body>
    <div class="container">
      <div class="box box1">Caja 1</div>
      <div class="box box2">Caja 2</div>
      <div class="box box3">Caja 3</div>
    </div>
  </body>
</html>

Esta estructura HTML básica incluye:

  • Un contenedor <div> que se convertirá en nuestro contenedor de flexbox
  • Tres elementos <div> hijos que representan las cajas que usaremos para demostrar flex-grow
  • Una sección <style> de marcador de posición donde agregaremos CSS en pasos posteriores

Salida de ejemplo al ver el archivo:

[Archivo HTML creado con estructura básica y tres cajas div]

El archivo ya está listo para una exploración adicional de CSS Flexbox en los pasos siguientes.

Define un contenedor de flexbox con la propiedad flex-grow

En este paso, aprenderás a definir un contenedor de flexbox y a entender el concepto básico de la propiedad flex-grow. Abre el archivo index.html en el WebIDE y modifica la sección <style> para crear un contenedor de flexbox.

Agrega el siguiente CSS para definir el contenedor de flexbox:

<style>
  .container {
    display: flex;
    border: 2px solid #333;
    width: 100%;
    height: 200px;
  }

  .box {
    background-color: #4caf50;
    color: white;
    padding: 20px;
    margin: 10px;
    text-align: center;
  }
</style>

Analicemos el CSS:

  • display: flex; convierte el contenedor en un contenedor de flexbox
  • width: 100%; hace que el contenedor ocupe todo el ancho
  • Los estilos .box definen la apariencia de los elementos flex individuales

Salida de ejemplo al visualizar en un navegador:

[Tres cajas verdes mostradas en una fila horizontal, ocupando todo el contenedor]

La propiedad flex-grow determina cómo crecen los elementos flex en relación entre sí cuando hay espacio adicional disponible. Por defecto, flex-grow se establece en 0, lo que significa que los elementos no crecerán más allá de su tamaño inicial.

Para ver el comportamiento predeterminado, abre el archivo HTML en un navegador web. Notarás que las cajas mantienen su tamaño inicial y no se expanden para llenar el contenedor.

Explora los valores iniciales y heredados de flex-grow

En este paso, investigarás los comportamientos predeterminados y heredados de la propiedad flex-grow. Abre tu archivo index.html y actualiza la sección <style> para explorar estos conceptos.

Primero, entendamos el valor inicial de flex-grow:

<style>
  .container {
    display: flex;
    border: 2px solid #333;
    width: 100%;
    height: 200px;
  }

  .box {
    background-color: #4caf50;
    color: white;
    padding: 20px;
    margin: 10px;
    text-align: center;
    /* El valor inicial de flex-grow es 0 por defecto */
    /* flex-grow: 0; */
  }

  .box1 {
    /* Estableciendo explícitamente el valor inicial */
    flex-grow: 0;
  }

  .box2 {
    /* Demostrando la herencia */
    flex-grow: inherit;
  }

  .box3 {
    /* Otra forma de mostrar el estado inicial */
    flex-grow: initial;
  }
</style>

Observaciones clave:

  • flex-grow: 0; es el valor predeterminado, lo que significa que los elementos no crecerán
  • inherit toma el valor de flex-grow del contenedor padre
  • initial restablece la propiedad a su valor predeterminado (0)

Salida de ejemplo al visualizar en un navegador:

[Tres cajas verdes de ancho igual, no se expanden para llenar el contenedor]

Para ilustrar aún más, puedes modificar el HTML para mostrar cómo funcionan estos valores:

<body>
  <div class="container">
    <div class="box box1">Caja 1 (flex-grow: 0)</div>
    <div class="box box2">Caja 2 (flex-grow: inherit)</div>
    <div class="box box3">Caja 3 (flex-grow: initial)</div>
  </div>
</body>

Este ejemplo demuestra que, por defecto, los elementos flex mantienen su tamaño inicial y no crecen para llenar el espacio adicional en el contenedor.

Establece valores numéricos de flex-grow para diferentes elementos

En este paso, aprenderás a usar valores numéricos con flex-grow para controlar cómo se expanden los elementos flex dentro de un contenedor. Abre tu archivo index.html y actualiza la sección <style> para explorar diferentes valores numéricos de flex-grow.

Actualiza tu CSS con los siguientes estilos:

<style>
  .container {
    display: flex;
    border: 2px solid #333;
    width: 100%;
    height: 200px;
  }

  .box {
    background-color: #4caf50;
    color: white;
    padding: 20px;
    margin: 10px;
    text-align: center;
  }

  .box1 {
    /* La Caja 1 crecerá 1 unidad */
    flex-grow: 1;
  }

  .box2 {
    /* La Caja 2 crecerá 2 unidades */
    flex-grow: 2;
  }

  .box3 {
    /* La Caja 3 crecerá 3 unidades */
    flex-grow: 3;
  }
</style>

Actualiza el HTML para que coincida con los nuevos estilos:

<body>
  <div class="container">
    <div class="box box1">Caja 1 (flex-grow: 1)</div>
    <div class="box box2">Caja 2 (flex-grow: 2)</div>
    <div class="box box3">Caja 3 (flex-grow: 3)</div>
  </div>
</body>

Observaciones clave:

  • Los valores de flex-grow determinan cómo se distribuye el espacio adicional
  • Valores más altos significan más crecimiento en relación con otros elementos
  • El espacio disponible total se divide proporcionalmente

Salida de ejemplo al visualizar en un navegador:

[Tres cajas verdes con diferentes anchos:
 - La Caja 1 es la más estrecha (1 unidad)
 - La Caja 2 es más ancha (2 unidades)
 - La Caja 3 es la más ancha (3 unidades)]

Las cajas ahora se expandirán de manera diferente según sus valores de flex-grow, lo que demuestra cómo se puede controlar el tamaño de los elementos en un contenedor de flex.

Experimenta con las proporciones de flex-grow

En este paso, explorarás proporciones de flex-grow más complejas y entenderás cómo diferentes valores interactúan dentro de un contenedor de flex. Actualiza tu archivo index.html con el siguiente código:

<style>
  .container {
    display: flex;
    border: 2px solid #333;
    width: 100%;
    height: 200px;
    background-color: #f0f0f0;
  }

  .box {
    color: white;
    padding: 20px;
    margin: 10px;
    text-align: center;
  }

  .box1 {
    background-color: #3498db;
    flex-grow: 1;
  }

  .box2 {
    background-color: #e74c3c;
    flex-grow: 2;
  }

  .box3 {
    background-color: #2ecc71;
    flex-grow: 1;
  }

  .box4 {
    background-color: #f39c12;
    flex-grow: 4;
  }
</style>

<body>
  <div class="container">
    <div class="box box1">Caja 1 (flex-grow: 1)</div>
    <div class="box box2">Caja 2 (flex-grow: 2)</div>
    <div class="box box3">Caja 3 (flex-grow: 1)</div>
    <div class="box box4">Caja 4 (flex-grow: 4)</div>
  </div>
</body>

Conceptos clave para entender:

  • Valores totales de flex-grow: 1 + 2 + 1 + 4 = 8
  • La Caja 1 y la Caja 3 obtienen 1/8 del espacio adicional cada una
  • La Caja 2 obtiene 2/8 del espacio adicional
  • La Caja 4 obtiene 4/8 (la mitad) del espacio adicional

Salida de ejemplo al visualizar en un navegador:

[Cuatro cajas de diferentes colores con diferentes anchos:
 - Caja 1 y Caja 3: Estrechas (1/8 cada una)
 - Caja 2: Ligeramente más ancha (2/8)
 - Caja 4: La más ancha (4/8 o la mitad del contenedor)]

Este ejemplo demuestra cómo los valores de flex-grow crean un dimensionamiento proporcional, permitiendo un control detallado de la expansión de los elementos.

Resumen

En este laboratorio, los participantes exploran la propiedad flex-grow en CSS Flexbox al crear un archivo HTML estructurado e implementar un contenedor flexible con múltiples elementos div. El laboratorio comienza estableciendo una estructura HTML básica con un contenedor y tres cajas hijas, lo que demuestra la configuración fundamental para los experimentos de flexbox.

A través de un modelado CSS progresivo, los aprendices descubren cómo transformar un contenedor estándar en un diseño de flexbox, aplicando la propiedad flex-grow para entender cómo los elementos se expanden dinámicamente y distribuyen el espacio disponible. El enfoque práctico permite a los participantes experimentar con diferentes valores de flex-grow, observando cómo las proporciones numéricas influyen en el tamaño y la distribución de los elementos del contenedor de flex.