Inicio > Desarrollo Web > Tutoriales de CSS > ¿Qué es Flexbox y para qué sirve? Guía para principiantes

¿Qué es Flexbox y para qué sirve? Guía para principiantes

Diego Cortés
Diego Cortés
July 31, 2024
¿Qué es Flexbox y para qué sirve? Guía para principiantes

Flexbox, o Flexible Box Layout, es una poderosa herramienta en CSS que ha revolucionado la forma en que diseñamos y alineamos elementos en la web. Introducido en CSS3, Flexbox permite crear diseños de interfaz de usuario más flexibles y complejos sin la necesidad de utilizar flotantes o posicionamientos complicados. En esta guía para principiantes, exploraremos qué es Flexbox, cómo funciona y cómo puedes utilizarlo para mejorar tus proyectos web.

¿Qué es Flexbox?

Flexbox es un modelo de diseño en CSS que facilita la alineación y distribución de elementos dentro de un contenedor. A diferencia de los modelos de diseño tradicionales, Flexbox proporciona un sistema de ejes que hace que sea más sencillo alinear y distribuir espacio entre los elementos, incluso cuando su tamaño es desconocido o dinámico.

¿Cómo Funciona Flexbox?

Flexbox se basa en dos conceptos clave:

  • Contenedor Flex (Flex Container): Es el elemento padre que contiene los elementos flexibles (hijos). Se define utilizando la propiedad display: flex o display: inline-flex.
  • Elementos Flexibles (Flex Items): Son los elementos hijos dentro del contenedor flex. Estos elementos se pueden manipular y alinear utilizando las propiedades de Flexbox.

Propiedades del Contenedor Flex

Para aprovechar al máximo Flexbox, es esencial entender las propiedades que puedes aplicar al contenedor flex.

display: flex

Esta propiedad convierte a un elemento en un contenedor flex, permitiendo que sus hijos se comporten como elementos flexibles. Puedes usar display: flex para un contenedor bloque o display: inline-flex para un contenedor en línea.

.container {
  display: flex;
}

flex-direction

Controla la dirección en la que se colocan los elementos dentro del contenedor flex. Puede tomar los siguientes valores:

  • row (por defecto): Los elementos se colocan en una fila horizontal.
  • column: Los elementos se colocan en una columna vertical.
  • row-reverse: Los elementos se colocan en una fila horizontal en orden inverso.
  • column-reverse: Los elementos se colocan en una columna vertical en orden inverso.
.container {
  display: flex;
  flex-direction: column;
}

justify-content

Alinea los elementos flexibles a lo largo del eje principal. Los valores disponibles son:

  • flex-start: Alinea al inicio del contenedor.
  • center: Centra los elementos.
  • flex-end: Alinea al final del contenedor.
  • space-between: Distribuye los elementos con el máximo espacio entre ellos.
  • space-around: Distribuye los elementos con espacio igual alrededor de ellos.
.container {
  display: flex;
  justify-content: space-between;
}

align-items

Alinea los elementos flexibles a lo largo del eje transversal (perpendicular al eje principal). Los valores disponibles son:

  • stretch (por defecto): Estira los elementos para llenar el contenedor.
  • flex-start: Alinea al inicio del contenedor.
  • center: Centra los elementos.
  • flex-end: Alinea al final del contenedor.
  • baseline: Alinea a lo largo de la línea base del contenedor.
.container {
  display: flex;
  align-items: center;
}

flex-wrap

Controla si los elementos flexibles deben ajustarse en varias líneas cuando no caben en una sola línea. Los valores disponibles son:

  • nowrap (por defecto): Los elementos se mantienen en una sola línea.
  • wrap: Los elementos se ajustan a múltiples líneas.
  • wrap-reverse: Los elementos se ajustan a múltiples líneas en orden inverso.
.container {
  display: flex;
  flex-wrap: wrap;
}

Propiedades de los Elementos Flexibles

Las propiedades que se pueden aplicar a los elementos flexibles permiten un control más detallado sobre su tamaño y alineación.

flex-grow

Define la capacidad de un elemento para crecer en relación con los otros elementos flexibles. Un valor de 1 indica que el elemento puede crecer para ocupar el espacio disponible.

.item {
  flex-grow: 1;
}

flex-shrink

Define la capacidad de un elemento para reducir su tamaño en relación con los otros elementos flexibles. Un valor de 1 indica que el elemento puede reducir su tamaño si es necesario.

.item {
  flex-shrink: 1;
}

flex-basis

Define el tamaño inicial de un elemento flexible antes de que se apliquen las propiedades flex-grow y flex-shrink. Puede ser un valor en píxeles, porcentajes, etc.

.item {
  flex-basis: 200px;
}

align-self

Permite alinear un elemento específico de manera diferente a los demás elementos dentro del contenedor flex. Los valores disponibles son los mismos que los de align-items.

.item {
  align-self: flex-end;
}

Ejemplos Prácticos

Ejemplo 1: Diseño de una Barra de Navegación

<div class="navbar">
  <a href="#">Inicio</a>
  <a href="#">Servicios</a>
  <a href="#">Sobre Nosotros</a>
  <a href="#">Contacto</a>
</div>


.navbar {
  display: flex;
  justify-content: space-around;
  background-color: #333;
  padding: 10px;
}

.navbar a {
  color: #fff;
  text-decoration: none;
}

 Ejemplo 2: Galería de Imágenes 

<div class="gallery">
  <img src="image1.jpg" alt="Imagen 1">
  <img src="image2.jpg" alt="Imagen 2">
  <img src="image3.jpg" alt="Imagen 3">
</div>


.gallery {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.gallery img {
  flex: 1 1 calc(33% - 10px);
  max-width: 100%;
  height: auto;
}

Conclusión

Flexbox es una herramienta esencial para el diseño web moderno, permitiendo una alineación y distribución de elementos más intuitiva y flexible. Con las propiedades y conceptos que hemos cubierto en esta guía, estarás bien equipado para crear diseños web adaptables y eficientes. Explora más sobre Flexbox y experimenta con estas propiedades para descubrir todo su potencial en tus proyectos.

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categorías

Page loaded in 27.78 ms