Parte 4: Maquetar páginas · Lección 16 de 18

#16 Grid: cuadrículas

Organiza la página en filas y columnas a la vez: galerías, tarjetas y la estructura completa de una web. 40 min

Filas y columnas a la vez

Flexbox es genial para colocar cosas en una fila (o una columna). Pero cuando quieres una cuadrícula, con filas y columnas alineadas a la vez, como una galería de fotos, un catálogo de productos o la estructura completa de una página, la herramienta es CSS Grid.

Como en Flexbox, hay un contenedor (con display: grid) y sus hijos directos, que se colocan en las celdas.

Tu primera cuadrícula

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

Con dos líneas has hecho una cuadrícula de tres columnas. Los elementos se van colocando de izquierda a derecha y de arriba abajo, y cuando se acaba una fila, empiezan la siguiente. No hace falta decir cuántas filas hay: se crean solas.

Definir las columnas

grid-template-columns dice cuántas columnas hay y cuánto mide cada una: un valor por columna.

La unidad fr

fr significa fracción del espacio libre. Es la unidad estrella de Grid:

EscribesResultado
1fr 1fr 1frTres columnas iguales
2fr 1frDos columnas: la primera, el doble de ancha
200px 1frUna columna fija de 200px y otra que ocupa el resto
1fr 600px 1frUna columna central fija, con dos laterales flexibles
Barra lateral con Grid

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

repeat()

Para no escribir lo mismo muchas veces: repeat(4, 1fr) es igual que 1fr 1fr 1fr 1fr.

Elementos que ocupan más

Un elemento puede ocupar varias columnas con grid-column: span 2, o varias filas con grid-row: span 2. Así se hacen esas galerías con una foto destacada:

Celdas grandes

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

La galería que se adapta sola

Este es probablemente el truco de CSS más útil que vas a aprender. Una sola línea crea una galería que pone tantas columnas como quepan:

css
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

Léelo así: «repite columnas que midan como mínimo 200px y como máximo 1fr, y mete tantas como quepan (auto-fit)».

Galería adaptable

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

¿Grid o Flexbox?

No compiten: se complementan, y en una misma página usarás los dos.

Usa Flexbox cuando…Usa Grid cuando…
Colocas cosas en una sola dirección (una fila o una columna)Colocas cosas en filas y columnas a la vez
El tamaño lo decide el contenido (cada botón mide lo que su texto)El tamaño lo decide la estructura (columnas iguales)
Menús, cabeceras, botones con icono, centrar algoGalerías, catálogos, la estructura general de la página

Una regla práctica: Grid para la estructura de la página, Flexbox para lo que hay dentro de cada parte.

Errores típicos

  • Poner display: grid en los hijos en lugar de en el contenedor.
  • Escribir grid-template-column (sin la «s» final) o grid-template-columns: 3; (hay que dar el tamaño de cada columna).
  • Usar márgenes para separar las celdas en lugar de gap.
  • Imágenes que se salen de la celda: dales width: 100% y height: auto.
  • Usar Grid para un menú en fila sencillo, donde Flexbox es más natural.

Ejercicios

Ejercicio 1: la cuadrícula de fotos (fácil)

Coloca estas seis fotos en una cuadrícula de 3 columnas iguales con 8px de separación. Haz que las imágenes ocupen todo el ancho de su celda.

Ejercicio 1

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado
Pista

En el contenedor: display, grid-template-columns con repeat() y gap. En las imágenes: width: 100%.

Solución
css
.fotos {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
}

.fotos img {
  display: block;
  width: 100%;
  height: auto;
}

Ejercicio 2: adaptable (medio)

Cambia la cuadrícula del ejercicio anterior para que se adapte sola: columnas de al menos 140px, tantas como quepan.

Pista

repeat(auto-fit, minmax(…, 1fr)).

Solución
css
.fotos {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 8px;
}

Ejercicio 3: la estructura de una página (reto)

Usa Grid para que la cabecera y el pie ocupen todo el ancho, y en medio haya un contenido principal (3 partes) y una barra lateral (1 parte).

Ejercicio 3

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado
Pista 1

Dos columnas: 3fr 1fr. La cabecera y el pie deben ocupar las dos.

Pista 2

grid-column: span 2 en header y footer.

Solución
css
.pagina {
  display: grid;
  grid-template-columns: 3fr 1fr;
  gap: 12px;
}

.pagina header,
.pagina footer {
  grid-column: span 2;
}

Ficha resumen

  • display: grid en el contenedor + grid-template-columns con un tamaño por columna.
  • fr = fracción del espacio libre. repeat(3, 1fr) = tres columnas iguales.
  • gap separa filas y columnas.
  • grid-column: span 2 / grid-row: span 2 = ocupar varias celdas.
  • Galería adaptable: repeat(auto-fit, minmax(200px, 1fr)).
  • Grid para dos dimensiones y la estructura; Flexbox para una dirección y el interior de cada parte.

Glosario

TérminoDefinición
CSS GridSistema de CSS para colocar elementos en una cuadrícula de filas y columnas.
grid-template-columnsPropiedad que define cuántas columnas tiene una cuadrícula y cuánto mide cada una.
frUnidad de Grid que representa una fracción del espacio libre.
repeat()Función que repite un tamaño de columna o fila varias veces.
minmax()Función que da a una columna un tamaño mínimo y uno máximo.
auto-fitValor de repeat() que crea tantas columnas como quepan en el ancho disponible.
spanPalabra que indica cuántas columnas o filas ocupa un elemento de la cuadrícula.

Comprueba lo que has aprendido

Responde sin mirar arriba. Si fallas alguna, la explicación te dice por qué.

Pregunta 1 de 5

¿Qué hace grid-template-columns: 1fr 1fr 1fr;?

¿Lo tienes claro?

Si has hecho los ejercicios y aciertas el test, márcala como estudiada y pasa a la siguiente.