Una cuadrícula de verdad: así piensa CSS Grid
Hasta ahora alineaste elementos en una sola dirección con flex. Grid hace algo distinto: te da filas y columnas al mismo tiempo, como una hoja de cuaderno cuadriculado. Esa es la herramienta que vas a usar para armar el layout completo de una página.
🧠 ¿Qué es un contenedor grid?
Imaginá una hoja cuadriculada: filas y columnas ya dibujadas, listas para poner algo adentro de cada casillero. Eso es exactamente lo que hace display: grid; con un elemento: lo convierte en un contenedor grid, y todos sus hijos directos pasan a ser ítems grid que se acomodan dentro de esa cuadrícula.
Ya conocés display: flex, que alinea en una sola dirección (una fila o una columna). Grid es la herramienta para cuando necesitás filas y columnas a la vez: la forma natural de armar el layout completo de una página.
.contenedor { display: grid; /* así de simple empieza */ }
display: grid;, el elemento pasa a ser el CONTENEDOR y sus hijos directos son los ÍTEMS. Todavía no hay columnas ni filas definidas: eso es el próximo paso.🧩 ¿Lo entendiste? · Ordená los pasos
Arrastrá estos pasos del primero al último.
2️⃣ Filas y columnas explícitas
grid-template-columns define cuántas columnas tiene tu cuadrícula y qué ancho tiene cada una. grid-template-rows hace lo mismo con las filas. Le pasás un valor por cada columna (o fila) que quieras, separados por espacio.
Si tenés más ítems que columnas definidas, no pasa nada raro: Grid los sigue acomodando, empezando una fila nueva de forma automática.
.contenedor { display: grid; grid-template-columns: 100px 100px 100px; /* 3 columnas de 100px */ grid-template-rows: 80px 80px; /* 2 filas de 80px */ }
grid-template-columns son tres columnas, sin importar cuántos ítems tengas adentro.🧩 ¿Lo entendiste? · Completá el código
/* Convertí el contenedor en una cuadrícula */ .galeria { : grid; } /* 3 columnas iguales de 120px cada una */ .galeria { : 120px 120px 120px; }
⚙️ Vé la cuadrícula en vivo
Movés el control y mirás cómo se reparte el ancho disponible entre la cantidad de columnas que elijas, usando repeat() — un atajo que evita escribir 1fr muchas veces. Lo vas a ver en detalle en la próxima sección.
Si hay más celdas que columnas, Grid arma solo una fila nueva. Probá bajar a 1 o 2 columnas y mirá qué pasa.
✅ Repaso rápido
Antes de pasar a la unidad fr, repasemos lo esencial de esta sección con algunas preguntas.
display: grid;▦ Ítems = los hijos directos
▦
grid-template-columns / -rows = cuántas y de qué tamaño✅ Repaso rápido · Opción múltiple
Elegí una opción por pregunta.
🎯 PRÁCTICA de Grid — armá una galería de fotos
El HTML ya está armado con 6 tarjetas de producto: vos ponés el CSS para convertirlas en una cuadrícula. Tab inserta 2 espacios.
- En
.galeria, agregádisplay: grid;para activar la cuadrícula. - En la misma clase, agregá
grid-template-columnscon 3 valores enpx(por ejemplo180px 180px 180px) para armar 3 columnas. - Ejecutá y mirá cómo las 6 tarjetas se acomodan solas en 2 filas de 3 columnas.
- Probá cambiar a 2 valores en
grid-template-columnsy ejecutá de nuevo: ¿en cuántas filas quedan ahora las 6 tarjetas?
La unidad que reparte el espacio sobrante: fr
Definir columnas en px funciona, pero es rígido: si la pantalla cambia de ancho, esas columnas no se adaptan. La unidad fr (fracción) resuelve justo eso: reparte el espacio disponible del contenedor entre las columnas, en las proporciones que vos elijas.
🍕 La unidad fr: fracciones flexibles
Pensá en fr como porciones de una pizza: si decís 1fr 1fr, estás pidiendo dos porciones iguales del espacio disponible. Si decís 2fr 1fr, la primera columna se lleva el doble de espacio que la segunda.
La diferencia clave con px: fr siempre reparte lo que sobra después de descontar cualquier columna de ancho fijo. Por eso se adapta solo cuando cambia el tamaño de la pantalla.
.contenedor { display: grid; grid-template-columns: 2fr 1fr; /* la primera, el doble de ancha */ }
🧩 ¿Lo entendiste? · Arrastrá cada código a su resultado
Arrastrá la declaración correcta a cada resultado. Hay una declaración trampa.
2️⃣ Mezclando fr con píxeles
El truco más usado en layouts reales: combinar un valor fijo con fr. Es el patrón clásico de barra lateral + contenido: la barra lateral mide siempre lo mismo, y el contenido ocupa todo lo que sobra.
.pagina { display: grid; grid-template-columns: 220px 1fr; /* barra fija + contenido flexible */ }
200px 1fr primero reserva 200px fijos y recién después reparte TODO lo que queda en 1fr. Por eso el contenido nunca se desborda, cambie lo que cambie el ancho de pantalla.🔁 repeat() para no repetirte
Escribir 1fr 1fr 1fr 1fr 1fr a mano es tedioso y fácil de errar. repeat(cantidad, valor) hace exactamente lo mismo, pero repitiendo el valor la cantidad de veces que le pidas.
/* Estas dos líneas arman EXACTAMENTE la misma cuadrícula */ .a { grid-template-columns: 1fr 1fr 1fr 1fr 1fr; } .b { grid-template-columns: repeat(5, 1fr); }
🧩 ¿Lo entendiste? · Completá el código
/* La misma cuadrícula de 3 columnas, con el atajo */ .contenedor { grid-template-columns: (3, 1fr); } /* Cuatro columnas iguales */ .contenedor { grid-template-columns: repeat(, 1fr); }
⚙️ Vé el reparto en vivo
Movés los tres controles y mirás cómo cada columna se lleva una porción proporcional a su número de fr. Probá dejar una en 1 y otra en 5: la diferencia de ancho es enorme.
Las tres celdas siempre ocupan el 100% del ancho: fr solo cambia cómo se reparte ese espacio entre ellas.
✅ Repaso rápido
Antes de ver gap, repasemos fr y repeat() con algunas preguntas.
🔁 repeat(n, valor) repite un valor n veces.
✅ Repaso rápido · Opción múltiple
Elegí una opción por pregunta.
🎯 RETO: convertí tu galería en un layout de barra lateral + contenido
El HTML ya tiene una barra lateral y un bloque de contenido: vos armás la cuadrícula con CSS.
- En
.pagina, agregádisplay: grid;. - En la misma clase, agregá
grid-template-columns: 200px 1fr;para que la barra lateral quede fija y el contenido use el resto. - Ejecutá y verificá que la barra lateral no cambie de ancho aunque el contenido tenga mucho texto.
- Probá cambiar
200pxpor2fry ejecutá de nuevo: ¿qué le pasa a la proporción entre las dos columnas?
gap: separar celdas sin desordenar los bordes
Ya sabés armar columnas y filas. Ahora falta lo último para que tu cuadrícula se vea prolija: un espacio parejo entre celda y celda, sin tocar los bordes exteriores. Para eso existe gap.
🤔 El problema de usar margin
Podrías separar las celdas con margin en cada una, pero aparece un problema clásico: las celdas del medio quedan con el doble de separación (la suma del margin de las dos vecinas), mientras que el borde exterior de la cuadrícula queda con menos aire que el resto. El resultado se ve desparejo.
margin empuja hacia afuera de CADA celda por separado: por eso se acumula entre vecinas y deja el contorno exterior distinto al resto.2️⃣ gap, row-gap y column-gap
gap resuelve el problema anterior de raíz: crea espacio solo entre celdas, nunca en el borde exterior de la cuadrícula. Es una propiedad del contenedor, no de cada ítem.
Si querés un espacio distinto para filas y columnas, usás row-gap (entre filas) y column-gap (entre columnas) por separado. gap es el atajo que fija los dos a la vez.
.contenedor { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; /* mismo espacio en filas y columnas */ }
🧩 ¿Lo entendiste? · Completá el código
/* Espacio de 12px entre TODAS las celdas */ .contenedor { : 12px; } /* Solo el espacio ENTRE filas, de 20px */ .contenedor { : 20px; } /* Solo el espacio ENTRE columnas, de 8px */ .contenedor { : 8px; }
⚙️ Vé el espaciado en vivo
Movés el control y mirás cómo gap abre espacio entre las celdas por igual, sin tocar nunca el contorno exterior de la cuadrícula.
El rayado de fondo marca el borde del contenedor: fijate que ese contorno exterior no cambia, solo el espacio ENTRE celdas.
✅ Repaso general de Grid
Cerremos la teoría con un repaso que combina las tres secciones: contenedor, fr y gap.
🔲 row-gap / column-gap para controlar cada dirección por separado.
✅ Repaso general · Opción múltiple
Elegí una opción por pregunta.
🎯 RETO: agregale gap parejo a tu galería
Retomamos la galería de 6 tarjetas: esta vez el objetivo es que quede prolija y espaciada.
- En
.galeria, agregádisplay: grid;ygrid-template-columns: repeat(3, 1fr);. - En la misma clase, agregá
gap: 16px;para separar las tarjetas entre sí. - Ejecutá y comprobá que el espacio entre tarjetas es parejo, tanto en filas como en columnas.
- Probá reemplazar
gapporcolumn-gap: 4px;solo, sinrow-gap, y ejecutá de nuevo: ¿qué diferencia notás entre el espacio horizontal y el vertical?
🚀 Tu turno: armá una página completa con Grid
Llegó el momento de combinar todo lo que viste: contenedor grid, columnas con fr, repeat() y gap, en una sola galería de productos bien armada.
✅ Tu diseño final debe tener
- Un contenedor con display: grid
- Al menos 3 columnas definidas con grid-template-columns
- La unidad fr, sola o combinada con un valor en px
- El atajo repeat() en algún punto del código
- Separación pareja entre celdas con gap
🛤️ Flujo de trabajo (método paso a paso)
▦ Activá la cuadrícula con display: grid.
📏 Definí las columnas con grid-template-columns.
🔁 Simplificá con repeat() si se repite un valor.
🔲 Separá las celdas con gap.
📥 Ejecutá, ajustá y descargá tu galería.
💻 Tu simulador
El HTML ya está armado con una galería de 8 productos: vos ponés el CSS. Tab inserta 2 espacios.
- En
.galeria, agregádisplay: grid;. - En la misma clase, agregá
grid-template-columnsusandorepeat()para armar 4 columnas iguales confr. - Agregá
gap(por ejemplo20px) para separar las tarjetas de forma pareja. - Ejecutá y revisá que los 8 productos queden en 2 filas de 4 columnas, bien espaciados.
- Ajustá los detalles que quieras y descargá tu galería terminada.
📖 Glosario interactivo
Tocá cualquier tarjeta para girarla: del otro lado está la definición, un ejemplo y el link a la sección donde se explica.
No encontramos resultados para tu búsqueda. Probá con otra palabra. 🔎