Ubicar ítems con precisión, línea por línea
En el Recurso 1 dejaste que los ítems se acomodaran solos, en orden. Ahora vas a aprender a mandar un ítem exactamente a la columna o fila que quieras, usando las líneas numeradas que arma toda cuadrícula.
🧠 Las líneas de la cuadrícula
Cuando definís grid-template-columns con, por ejemplo, 3 valores, no solo creás 3 columnas: también aparecen 4 líneas verticales que las delimitan, numeradas de izquierda a derecha empezando en 1. Lo mismo pasa con las filas.
Esas líneas son el sistema de coordenadas que usás para ubicar un ítem a mano, en vez de dejar que se acomode solo.
col col col
Con 3 columnas hay 4 líneas: la 1 (borde izquierdo), la 2 y la 3 (entre columnas) y la 4 (borde derecho).
2️⃣ grid-column y grid-row
grid-column le dice a un ítem entre qué líneas verticales ubicarse, con la forma línea-inicio / línea-fin. grid-row hace lo mismo para las líneas horizontales.
Esto se escribe en el ítem, no en el contenedor: cada ítem puede tener su propia ubicación.
.destacada { grid-column: 1 / 3; /* ocupa de la línea 1 a la 3 */ }
1 / 3 significa "desde la línea 1 hasta la línea 3": esa celda ocupa 2 columnas de ancho, no 3.🧩 ¿Lo entendiste? · Arrastrá cada código a su resultado
Arrastrá la declaración correcta a cada resultado. Hay una declaración trampa.
🔁 El atajo span
Contar líneas a mano es incómodo. span te deja decir directamente cuántas columnas (o filas) querés ocupar, sin importar en qué línea empezás.
/* Estas dos formas arman el mismo resultado si el ítem empieza en la línea 1 */ .a { grid-column: 1 / 3; } .b { grid-column: span 2; }
🧩 ¿Lo entendiste? · Completá el código
/* Un ítem que ocupa 3 columnas, empezando donde caiga */ .destacada { grid-column: 3; } /* Un ítem que ocupa 2 filas */ .alta { grid-row: span ; }
⚙️ Vé el span en vivo
Movés el control y mirás cómo la primera celda (destacada en amarillo) ocupa más o menos columnas, empujando al resto a acomodarse alrededor.
La cuadrícula sigue teniendo 3 columnas: cuando la celda 1 ocupa más de una, el resto simplemente sigue acomodándose después.
✅ Repaso rápido
Antes de pasar a grid-template-areas, repasemos cómo ubicar ítems con precisión.
🎯 span N = "ocupá N columnas (o filas) desde acá"
✅ Repaso rápido · Opción múltiple
Elegí una opción por pregunta.
🎯 RETO: destacá un producto en tu galería
Volvemos a la galería de productos: esta vez el primero debe destacarse ocupando más espacio que los demás.
- En
.galeria, agregádisplay: grid;ygrid-template-columns: repeat(3, 1fr);. - En
.destacado(la primera tarjeta), agregágrid-column: span 2;para que ocupe 2 columnas. - Ejecutá y verificá que la primera tarjeta se vea más ancha que el resto.
- Probá cambiar
span 2porspan 3y ejecutá de nuevo: ¿qué pasa con las tarjetas que siguen?
grid-template-areas: dibujá el layout con palabras
Contar líneas funciona, pero hay una forma todavía más clara de armar un layout completo: ponerle nombre a cada zona de la página y "dibujar" el layout directamente en el CSS, como un mapa de texto.
🗺️ Nombrar zonas del layout
Con grid-template-areas, en el CONTENEDOR escribís una fila de texto por cada fila de tu layout, repitiendo el nombre de una zona tantas veces como celdas ocupa. El resultado se lee casi como un dibujo.
.pagina { display: grid; grid-template-columns: 200px 1fr; grid-template-areas: "cabecera cabecera" "menu contenido" "pie pie"; }
2️⃣ grid-area en cada ítem
Ya nombraste las zonas en el contenedor. Ahora cada ÍTEM se asigna a una zona con grid-area, usando el mismo nombre que escribiste arriba.
.cabecera { grid-area: cabecera; } .menu { grid-area: menu; } .contenido { grid-area: contenido; } .pie { grid-area: pie; }
🧩 ¿Lo entendiste? · Completá el código
/* El contenedor ya definió la zona "menu" */ .menu { : menu; }
⬛ Celdas vacías con un punto
¿Y si una celda del layout tiene que quedar vacía? Se marca con un punto . en vez de un nombre. Es útil para dejar "huecos" a propósito en el mapa del layout.
.pagina { grid-template-areas: "cabecera cabecera" ". contenido" /* celda vacía a la izquierda */ "pie pie"; }
⚙️ Vé el layout en vivo
Elegís un layout distinto y mirás cómo, sin tocar el HTML, cambiar el texto de grid-template-areas reorganiza toda la página.
✅ Repaso rápido
Antes de ver diseños responsivos, repasemos grid-template-areas.
🗺️ Cada ítem se ubica con grid-area: nombre;
✅ Repaso rápido · Opción múltiple
Elegí una opción por pregunta.
🎯 RETO: armá una página con grid-template-areas
El HTML tiene cabecera, menú, contenido y pie: vos armás el layout completo con CSS.
- En
.pagina, agregádisplay: grid;ygrid-template-columns: 160px 1fr;. - En la misma clase, agregá
grid-template-areascon 3 filas:"cabecera cabecera","menu contenido"y"pie pie". - En
.cabecera,.menu,.contenidoy.pie, agregágrid-areacon el nombre que corresponda. - Ejecutá y verificá que las 4 zonas queden ubicadas donde el "mapa" de texto las describe.
Diseños responsivos sin escribir un solo media query
Hasta ahora definiste un número fijo de columnas. Pero, ¿qué pasa si la pantalla es muy angosta para esas columnas? Grid tiene una combinación de herramientas que resuelve esto solo, sin necesitar @media.
🤔 El problema de un número fijo de columnas
Si escribís grid-template-columns: repeat(4, 1fr);, SIEMPRE vas a tener 4 columnas, aunque la pantalla sea la de un celular. El resultado: columnas tan angostas que el contenido queda apretado o desbordado.
@media para redefinir grid-template-columns según el ancho de pantalla.2️⃣ minmax(): un mínimo y un máximo
minmax(mínimo, máximo) le dice a una columna: "no bajes de este ancho, pero tampoco pases de este otro". Entre esos dos límites, la columna se estira o se achica libremente.
.galeria { grid-template-columns: repeat(3, minmax(150px, 1fr)); }
🧩 ¿Lo entendiste? · Completá el código
/* Columnas de mínimo 200px, máximo 1fr */ .galeria { grid-template-columns: repeat(3, (200px, 1fr)); }
🔁 auto-fit y auto-fill
En vez de repeat(3, …), usás repeat(auto-fit, …): le pedís a Grid que calcule solo cuántas columnas entran según el ancho disponible y el minmax() que definiste. Ni una fija.
auto-fill hace lo mismo, pero si sobran columnas vacías las deja del mismo tamaño en vez de estirar las existentes para ocupar el espacio.
.galeria { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
🧩 ¿Lo entendiste? · Arrastrá cada palabra a su definición
Arrastrá la palabra correcta a cada definición. Hay una palabra trampa.
⚙️ Vé la responsividad en vivo
Movés el control para simular distintos anchos de pantalla y mirás cómo la cantidad de columnas cambia sola, sin ningún @media en el código.
El código CSS no cambia nunca: es siempre el mismo repeat(auto-fit, minmax(140px, 1fr)). Lo único que cambia es el ancho disponible.
✅ Repaso rápido
Antes de ver alineación, repasemos diseños responsivos sin media queries.
📱 repeat(auto-fit, minmax(…)) = "poné las que entren, sin fijar un número".
✅ Repaso rápido · Opción múltiple
Elegí una opción por pregunta.
🎯 RETO: hacé que tu galería se adapte sola
Convertí la galería en una que se acomode sola según el ancho de pantalla, sin ningún media query.
- En
.galeria, agregádisplay: grid;ygap: 14px;. - En la misma clase, agregá
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));. - Ejecutá y probá reducir el ancho de la ventana de vista previa (o el zoom del navegador): mirá cómo cambia la cantidad de columnas.
Alinear contenido dentro (y dentro del total) de la cuadrícula
Última pieza: cómo ubicar el contenido DENTRO de cada celda, y cómo ubicar la cuadrícula ENTERA cuando es más chica que su contenedor.
🧠 align-items y justify-items
Estas dos propiedades van en el CONTENEDOR y controlan dónde se ubica el contenido dentro de cada celda, cuando esa celda es más grande que su contenido. justify-items es horizontal; align-items es vertical.
Valores comunes: start, center, end, stretch (el valor por defecto: estira el contenido para llenar la celda).
.contenedor { justify-items: center; /* horizontal, dentro de cada celda */ align-items: center; /* vertical, dentro de cada celda */ }
2️⃣ justify-content y align-content
Estas dos son parecidas mirando el nombre, pero hacen algo distinto: ubican la cuadrícula ENTERA dentro de su contenedor, para cuando la suma de columnas/filas es más chica que el espacio disponible.
.contenedor { justify-content: center; /* centra TODO el grid horizontalmente */ }
justify-items (adentro de cada celda) con justify-content (la cuadrícula completa dentro del contenedor).✅ Repaso rápido · Opción múltiple
Elegí una opción por pregunta.
🔁 place-items y place-content: los atajos
place-items es el atajo que fija align-items y justify-items en una sola línea. place-content hace lo mismo con align-content y justify-content.
/* Estas dos líneas hacen lo mismo */ .a { align-items: center; justify-items: center; } .b { place-items: center; }
⚙️ Vé la alineación en vivo
Elegís valores de justify-items y align-items y mirás cómo se mueve el "chip" celeste dentro de cada celda (más grande que su contenido).
✅ Repaso general de Grid avanzado
Cerremos la teoría con un repaso que combina las cuatro secciones de este recurso.
⚖️ -content = la cuadrícula entera dentro del contenedor.
⚖️ place- = el atajo de los dos ejes juntos.
✅ Repaso general · Opción múltiple
Elegí una opción por pregunta.
🎯 RETO: centrá el contenido de tu galería
Tomá la galería responsiva y centrá el texto de cada tarjeta perfectamente, con un solo atajo.
- En
.galeria, agregádisplay: grid;,grid-template-columns: repeat(3, 1fr);ygap: 14px;. - En la misma clase, agregá
place-items: center;para centrar el contenido de cada tarjeta en las dos direcciones. - Ejecutá y verificá que el texto de cada tarjeta quede perfectamente centrado, tanto horizontal como verticalmente.
🚀 Tu turno: armá una página completa y avanzada
Combinemos todo lo del Recurso 2: ubicar ítems, grid-template-areas, diseño responsivo y alineación, en una sola página.
✅ Tu diseño final debe tener
- Un layout armado con grid-template-areas (cabecera, menú, contenido, pie)
- Al menos un ítem ubicado con grid-column o span
- Una sección responsiva con repeat(auto-fit, minmax(...)), sin media queries
- Contenido alineado con place-items o justify/align-items
🛤️ Flujo de trabajo (método paso a paso)
🗺️ Armá el layout general con grid-template-areas.
🎯 Ubicá algún ítem especial con grid-column o span.
📱 Armá la sección de tarjetas con auto-fit + minmax().
⚖️ Alineá el contenido con place-items.
📥 Ejecutá, ajustá y descargá tu página.
💻 Tu simulador
El HTML ya tiene cabecera, menú, una sección de productos y pie: vos armás todo el CSS. Tab inserta 2 espacios.
- En
.pagina, agregádisplay: grid;,grid-template-columns: 160px 1fr;ygrid-template-areascon"cabecera cabecera","menu productos"y"pie pie". - Asignále
grid-areaa.cabecera,.menu,.productosy.pie. - En
.productos, agregádisplay: grid;,gap: 12px;ygrid-template-columns: repeat(auto-fit, minmax(120px, 1fr));para las tarjetas de adentro. - En
.tarjeta(dentro de productos), hacé que la primera ocupe más espacio congrid-column: span 2;. - Ejecutá, ajustá los detalles y descargá tu página 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. 🔎