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.