Flexbox y CSS Grid: Fundamentos y Aplicaciones Prácticas

Clase 12 de 24Curso de Frontend Developer

Contenido del curso

Maquetación con CSS

Resumen

Alinear y centrar elementos en una página web solía ser una tarea frustrante, pero con Flexbox y CSS Grid todo cambió. Estas dos especificaciones de CSS permiten organizar contenido de forma eficiente, ya sea distribuyendo elementos en una fila o creando cuadrículas completas donde cada pieza ocupa exactamente el lugar que necesitas.

¿Cómo funciona Flexbox para alinear elementos?

Flexbox trabaja con dos conceptos fundamentales: el contenedor (padre) y los items (hijos). Al aplicar display: flex en el contenedor [0:52], todos los elementos hijos comienzan a responder a las propiedades de alineación disponibles.

Un punto importante es que display: flex solo se coloca en los contenedores, nunca directamente en los items [3:07]. Si un item a su vez contiene más elementos y necesita comportarse como padre, entonces también recibe display: flex.

Las propiedades más útiles desde el contenedor son:

  • justify-content: alinea elementos en el eje principal (izquierda a derecha por defecto).
  • align-items: alinea elementos en el eje perpendicular (arriba a abajo por defecto).
  • flex-direction: cambia el eje principal entre row y column.

¿Cómo centrar elementos horizontal y verticalmente con Flexbox?

Para centrar contenido de izquierda a derecha, se usa justify-content: center [4:51]. Para centrarlo también de arriba hacia abajo, se añade align-items: center [6:05]. Con solo estas dos líneas, los elementos quedan perfectamente centrados en ambos ejes.

Cuando se utiliza justify-content: space-between [4:09], se distribuye un espacio uniforme entre cada elemento, separándolos automáticamente dentro del contenedor.

¿Qué ocurre al cambiar la dirección con flex-direction?

Por defecto, el eje principal de Flexbox es horizontal (row). Al cambiarlo a column con flex-direction: column [6:53], el eje principal pasa a ser vertical. Esto significa que justify-content ahora alinea de arriba hacia abajo, y align-items lo hace de izquierda a derecha. Comprender este cambio de ejes es clave para dominar Flexbox.

Para diferenciar visualmente los elementos, se puede usar el selector nth-child con la expresión 2n+1 [5:30], que selecciona todos los elementos impares y les aplica un estilo diferente.

¿Cómo crear cuadrículas con CSS Grid?

CSS Grid funciona de manera similar en cuanto a la relación contenedor-hijos, pero su enfoque está en crear cuadrículas bidimensionales con filas y columnas. Se activa con display: grid en el contenedor [8:17].

Para definir la estructura, se utilizan:

  • grid-template-columns: define cuántas columnas tendrá la cuadrícula.
  • grid-template-rows: define cuántas filas tendrá.

La unidad de medida FR (fraction) [9:20] representa una fracción del espacio disponible. Escribir 1fr 1fr 1fr 1fr es como partir una torta en cuatro porciones iguales, tanto para columnas como para filas.

css .container { display: grid; width: 400px; height: 400px; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr 1fr 1fr; }

¿Cómo ubicar elementos específicos dentro de una grid?

Cada celda de la cuadrícula se identifica contando líneas [10:48]. En una grid de cuatro columnas existen cinco líneas verticales (y lo mismo para las filas). Para posicionar un elemento, se usan las propiedades grid-column y grid-row, indicando la línea de inicio y la línea de fin separadas por un slash.

css .container .item:nth-child(2) { grid-column: 2 / 3; grid-row: 2 / 3; }

Este código ubica el segundo elemento en la segunda fila y segunda columna [11:37]. Repitiendo el proceso con cada item, se puede crear, por ejemplo, una disposición en diagonal donde cada elemento ocupa una posición diferente en la cuadrícula [12:47].

Grid es lo suficientemente inteligente como para que los elementos sin posición explícita se ubiquen automáticamente en el siguiente espacio disponible [12:30].

¿Cuándo usar Flexbox y cuándo CSS Grid?

Flexbox es ideal para alinear elementos en una sola dirección: una fila de botones, un menú de navegación o centrar contenido. CSS Grid brilla cuando necesitas controlar filas y columnas simultáneamente, como en layouts completos o galerías de imágenes.

Ambas herramientas se complementan perfectamente. De hecho, es común usar CSS Grid para la estructura general de una página y Flexbox para organizar los componentes internos. La práctica constante con retos y juegos interactivos es la mejor forma de afianzar estas habilidades que todo desarrollador front-end necesita dominar.