Flexbox vs Grid: cuándo usar cada uno

CSS code displayed on a computer screen highlighting programming concepts and technology.
Foto de Bibek ghosh en Pexels

En el mundo del desarrollo web, crear diseños responsivos y adaptables es fundamental. Dos herramientas clave que nos permiten lograr esto son Flexbox y Grid. Aunque ambas son utilizadas para el diseño de layouts, tienen objetivos y enfoques diferentes. En este artículo, exploraremos cuándo usar cada una para aprovechar al máximo sus capacidades.

Flexbox: La flexibilidad en una dimensión

Flexbox, o cajas flexibles, es un modelo de layout que nos permite crear contenedores flexibles que pueden adaptar su tamaño según el contenido. Su principal ventaja es la capacidad de distribuir elementos de manera uniforme en una sola dirección, ya sea horizontal o vertical. Flexbox es ideal para componentes como menús, barras de navegación, listas de elementos o cualquier estructura donde los elementos necesitan alinearse en una sola dirección.

Un ejemplo básico de cómo usar Flexbox sería:

<div class="flex-container">
  <div class="item">Elemento 1</div>
  <div class="item">Elemento 2</div>
  <div class="item">Elemento 3</div>
</div>

Y el CSS sería:

.flex-container {
  display: flex;
  flex-direction: row;
  justify-content: space-around;
}

.item {
  width: 30%;
  background-color: #f2f2f2;
  padding: 20px;
  margin: 10px;
}

Grid: El poder de las dos dimensiones

Grid, o cuadrícula, es un sistema de layout que permite crear estructuras bidimensionales, es decir, podemos definir tanto filas como columnas. Esto nos da una gran flexibilidad a la hora de diseñar layouts más complejos, como por ejemplo, el esquema de una página web completa. Grid se utiliza cuando queremos controlar la posición y el tamaño de los elementos en ambas direcciones (horizontal y vertical), creando una cuadrícula donde podemos colocar nuestros elementos de manera precisa.

Veamos un ejemplo de cómo usar Grid:

<div class="grid-container">
  <div class="header">Cabecera</div>
  <div class="sidebar">Barra lateral</div>
  <div class="contenido">Contenido principal</div>
  <div class="footer">Pie de página</div>
</div>

Y el CSS correspondiente sería:

.grid-container {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar contenido"
    "footer footer";
  grid-template-rows: 100px 1fr 50px;
  grid-template-columns: 200px 1fr;
  height: 100vh;
}

.header {
  grid-area: header;
  background-color: #ccc;
}

.sidebar {
  grid-area: sidebar;
  background-color: #aaa;
}

.contenido {
  grid-area: contenido;
  background-color: #fff;
}

.footer {
  grid-area: footer;
  background-color: #999;
}

Conclusión

En resumen, Flexbox es perfecto para layouts unidimensionales y componentes que necesitan adaptarse en una sola dirección, mientras que Grid se utiliza para diseños bidimensionales, ofreciendo un control total sobre la posición y el tamaño de los elementos en ambas direcciones. Al elegir entre Flexbox y Grid, debemos considerar la complejidad del diseño y si necesitamos manejar elementos en una o ambas direcciones. Conociendo las fortalezas de cada herramienta, podemos crear interfaces de usuario más adaptables y atractivas para nuestros usuarios.