Entendiendo Flexbox: Todo lo que necesitas saber

¿Qué es Flexbox?

Flexbox es un acrónimo de "Flexible Box Module". Como su nombre indica, es un módulo diseñado para ser flexible y se puede utilizar para crear una gran variedad de diseños, todo esto debido a que se puede crear una estructura de contenedor y elementos hijos dentro de ella que se ajusten automáticamente a diferentes tamaños de pantalla y dispositivos.

Hay muchas razones por las que usar Flexbox es una excelente opción para crear diseños web. Algunas de las ventajas más importantes son:

  • Permite una distribución flexible de elementos dentro de un contenedor.
  • Permite un control preciso de la alineación de los elementos.
  • Facilita la creación de diseños adaptativos que se ajusten automáticamente a diferentes tamaños de pantalla y dispositivos.

¿Cómo funciona Flexbox?

Flexbox funciona a través de la creación de un contenedor padre y elementos hijos dentro de él. El contenedor padre se comporta como un contenedor flexible dentro del cual se pueden distribuir los elementos hijos de manera flexible. Cada elemento hijo dentro del contenedor padre puede ser configurado de manera individual para controlar su tamaño, alineación y distribución dentro del contenedor.
Aquí hay un diagrama que muestra de manera general cómo funciona Flexbox:

flex box

Propiedades de Flexbox

Flexbox incluye una serie de propiedades que se pueden usar para controlar la distribución de los elementos dentro de un contenedor. Aquí hay algunas de las propiedades más importantes:

  • display: flex: Esta propiedad se utiliza para crear un contenedor padre que se comporte como un contenedor Flexbox.
  • flex-direction: Esta propiedad se utiliza para controlar la dirección en la que los elementos hijos se distribuyen dentro del contenedor padre.
  • flex-wrap: Esta propiedad se utiliza para controlar cómo se ajustan los elementos hijos cuando no hay suficiente espacio dentro del contenedor padre.
  • justify-content: Esta propiedad se utiliza para controlar la alineación horizontal de los elementos hijos dentro del contenedor padre.
  • align-items: Esta propiedad se utiliza para controlar la alineación vertical de los elementos hijos dentro del contenedor padre.
  • align-content: Esta propiedad se utiliza para controlar la distribución de los elementos hijos dentro del contenedor padre cuando hay más de una línea.

La propiedad display: flex

Para crear un contenedor que se comporte como un contenedor Flexbox, simplemente se debe aplicar la propiedad display: flex al contenedor padre:

.contenedor-padre { display: flex; }

La propiedad flex-direction

La propiedad flex-direction establece la dirección en la que los elementos hijos se distribuyen en un contenedor Flexbox. Los posibles valores son:
  • row: los elementos se distribuyen en la misma dirección que el eje horizontal, de izquierda a derecha.
  • row-reverse: los elementos se distribuyen en la dirección opuesta al eje horizontal, de derecha a izquierda.
  • column: los elementos se distribuyen en la misma dirección que el eje vertical, de arriba a abajo.
  • column-reverse: los elementos se distribuyen en la dirección opuesta al eje vertical, de abajo a arriba.

Por ejemplo, si tienes un contenedor con tres elementos hijos y estableces flex-direction: column, los elementos se distribuirán verticalmente. 



.contenedor-padre {
  /* Distribución horizontal (por defecto) */
  flex-direction: row;
}
.contenedor-padre {
 /* Distribución vertical */
  flex-direction: column;
}
.contenedor-padre {
 /* Distribución horizontal en sentido inverso */
 flex-direction: row-reverse;
}

La propiedad justify-content

Para controlar la alineación horizontal de los elementos hijos dentro del contenedor padre, se utiliza la propiedadjustify-content


.contenedor-padre {
  /* Alinear al principio (por defecto) */
  justify-content: flex-start;
}

.contenedor-padre {
  /* Alinear al centro */
  justify-content: center;
}

.contenedor-padre {
  /* Alinear al final */
  justify-content: flex-end;
}

.contenedor-padre {
  /* Distribuir de manera equitativa */
  justify-content: space-between;
}

.contenedor-padre {
  /* Distribuir de manera equitativa, incluyendo los márgenes */
  justify-content: space-around;
}


La propiedad align-items

Para controlar la alineación vertical de los elementos hijos dentro del contenedor padre, se utiliza la propiedad align-items.



.contenedor-padre {
  /* Alinear al principio */
  align-items: flex-start;
}

.contenedor-padre {
  /* Alinear al centro */
  align-items: center;
}

.contenedor-padre {
  /* Alinear al final */
  align-items: flex-end;
}

.contenedor-padre {
  /* Estirar los elementos para llenar el contenedor */
  align-items: stretch;
}

La propiedad flex-wrap

La propiedad flex-wrap establece cómo se deben distribuir los elementos hijos en un contenedor Flexbox cuando no hay suficiente espacio en la línea actual. Los posibles valores son:
  • nowrap: los elementos hijos no se envuelven y se ajustan en la misma línea.
  • wrap: los elementos hijos se envuelven a la siguiente línea si no hay suficiente espacio en la línea actual.
  • wrap-reverse: los elementos hijos se envuelven a la línea anterior si no hay suficiente espacio en la línea actual.

Por ejemplo, si tienes un contenedor con tres elementos hijos y estableces flex-wrap: wrap, los elementos se distribuirán en dos líneas si no hay suficiente espacio en la línea actual.


.contenedor-padre {
  display: flex;
  flex-wrap: wrap;
}

Ejemplo completo del uso de flexbox

See the Pen Untitled by Judith Bolaños (@judithbolanos) on CodePen.

Conclusión

En conclusión, Flexbox es una herramienta poderosa para crear diseños web flexibles y adaptativos. Con Flexbox, se pueden crear una gran variedad de diseños, desde barras de navegación hasta estructuras de contenido y menús desplegables.

Además, con la amplia gama de propiedades que se incluyen en Flexbox, los desarrolladores tienen un gran control sobre la distribución de los elementos dentro de un contenedor y sobre la alineación de los mismos.

Si estás buscando una manera fácil y flexible de crear diseños web, Flexbox es una excelente opción a considerar.