CSS Grid
💡 🎯 Al terminar esta lección podrás…
- Definir cuadrículas con
grid-template-columns,fr,repeat()yminmax(). - Crear una galería adaptable sin media queries.
- Dibujar el layout de una página con
grid-template-areas. - Alinear celdas e ítems y maquetar formularios.
1.Grid frente a Flexbox
CSS Grid es el sistema de layout para dos dimensiones: filas y columnas a la vez. Donde Flexbox coloca los ítems en una línea, Grid dibuja una cuadrícula y tú decides qué ocupa cada celda.
| Aspecto | Flexbox | Grid |
|---|---|---|
| Dimensiones | Una (fila o columna) | Dos (filas y columnas) |
| Parte de… | El contenido (los ítems deciden) | El diseño (la cuadrícula decide) |
| Ideal para | Barras, grupos de botones, tarjetas en fila | Layout de página, galerías, formularios alineados |
💡 Consejo · No es uno u otro
Se usan juntos: Grid para la estructura general de la página y Flexbox para alinear el contenido dentro de cada celda. Pregúntate: «¿necesito controlar filas y columnas? → Grid. ¿Solo una línea? → Flexbox».
Igual que en Flexbox, hay un contenedor (display: grid) y ítems (sus hijos directos).
2.Definir columnas y filas
.cuadricula {
display: grid;
grid-template-columns: 200px 1fr 1fr; /* una fija y dos flexibles */
gap: 16px;
}
| Concepto | Significa | Ejemplo |
|---|---|---|
fr | Una fracción del espacio libre | 1fr 2fr → la segunda es el doble |
repeat(n, tamaño) | Repite una definición | repeat(3, 1fr) = 1fr 1fr 1fr |
minmax(min, max) | Un tamaño entre un mínimo y un máximo | minmax(200px, 1fr) |
auto | Lo que necesite el contenido | auto 1fr auto |
gap | Espacio entre filas y columnas | gap: 16px, gap: 12px 24px |
grid-template-rows | Altura de las filas | 80px 1fr |
grid-auto-rows | Altura de las filas creadas automáticamente | grid-auto-rows: minmax(100px, auto) |
3.Cuadrículas que se adaptan solas
La combinación más útil de Grid: columnas tan anchas como puedan, pero nunca menos de 200px, y tantas como quepan. Sin media queries:
.galeria {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 16px;
}
auto-fitcrea todas las columnas que caben y estira las que sobran.auto-filltambién las crea, pero conserva los huecos vacíos (las columnas no se estiran).minmax(200px, 1fr): mínimo 200px, máximo un reparto igual del espacio.
📌 Nota · Una línea de CSS, muchas pantallas
Esta sola regla sustituye a varias media queries: con 375px verás 2 columnas; con 768px, 5 o 6; con pantalla completa, aún más. Es probablemente el patrón más valioso de Grid.
4.Colocar ítems: líneas y span
Las líneas de la cuadrícula se numeran desde 1. Un ítem puede ocupar de una línea a otra:
.destacado {
grid-column: 1 / 3; /* de la línea 1 a la 3 (2 columnas) */
grid-row: span 2; /* ocupa 2 filas */
}
.ancho { grid-column: 1 / -1; } /* de la primera a la última línea: toda la fila */
.doble { grid-column: span 2; } /* ocupa 2 columnas desde donde esté */
5.Layout con áreas con nombre
La forma más legible de maquetar una página: dibujas el diseño con texto y asignas cada elemento a su zona.
.pagina {
display: grid;
grid-template-columns: 200px 1fr 160px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"cab cab cab"
"lat main extra"
"pie pie pie";
gap: 12px;
min-height: 100dvh;
}
.cab { grid-area: cab; }
.lateral{ grid-area: lat; }
.principal { grid-area: main; }
.extra { grid-area: extra; }
.pie { grid-area: pie; }
💡 Consejo · Cambiar el diseño en móvil es trivial
Con áreas con nombre, una media query puede redibujar el layout en una sola declaración: en pantallas pequeñas, grid-template-areas: "cab" "main" "lat" "extra" "pie"; y grid-template-columns: 1fr;.
6.Alineación en Grid
| Propiedad | Dónde actúa | Valores |
|---|---|---|
justify-items | Dentro de cada celda, horizontal | start, center, end, stretch |
align-items | Dentro de cada celda, vertical | Igual |
place-items | Atajo de las dos anteriores | place-items: center |
justify-content | La cuadrícula dentro del contenedor (si sobra espacio) | start, center, space-between… |
align-content | Igual en vertical | |
justify-self / align-self / place-self | Un solo ítem |
.centro { display: grid; place-items: center; min-height: 100dvh; }
Formularios alineados
Una cuadrícula de dos columnas alinea etiquetas y campos perfectamente, algo muy difícil con otros métodos:
7.Algunas ideas más
grid-auto-flow: dense: rellena huecos con los ítems siguientes (útil en galerías con ítems de distintos tamaños).subgrid: permite que una cuadrícula hija use las columnas de la cuadrícula padre, para alinear contenidos entre tarjetas.- Líneas con nombre:
grid-template-columns: [inicio] 1fr [medio] 2fr [fin]. - Grid anidado: un ítem de la cuadrícula puede ser a su vez otra cuadrícula (o un contenedor flex).
- DevTools: en Chrome y Firefox, al inspeccionar un contenedor Grid, aparece un icono para dibujar la cuadrícula y numerar las líneas.
🔍 Ejemplo · Grid y Flex juntos
Una tarjeta típica: la página es una cuadrícula de tarjetas (Grid); dentro de cada tarjeta, el pie con precio y botón está en una fila alineada (Flexbox).
8.Errores frecuentes
- Esperar que Grid actúe sobre los nietos: solo los hijos directos son ítems.
- Contar mal las líneas: hay una línea más que columnas (3 columnas → líneas 1 a 4).
- Olvidar
gapy usar márgenes en cada ítem. - Usar
pxfijos en todas las columnas y perder la adaptabilidad; combinafr,minmax()yauto-fit. - Confundir
auto-fitconauto-fill. - Escribir un
grid-template-areascon filas de distinto número de celdas: no es válido. - Usar Grid para algo de una sola dimensión que Flexbox resuelve con menos código.
📒 Apuntes para llevar
- Grid maqueta en dos dimensiones; Flexbox en una. Se usan juntos.
grid-template-columns/-rowsdefinen la cuadrícula;fr,repeat()yminmax()la hacen flexible.repeat(auto-fit, minmax(200px, 1fr))crea una galería adaptable sin media queries.- Las líneas se numeran desde 1;
grid-column: 1 / -1ocupa toda la fila;span 2ocupa 2 celdas. grid-template-areaspermite dibujar el layout con texto y rediseñarlo fácilmente en móvil.place-items: centercentra el contenido de cada celda;justify-self/align-selfactúan sobre un ítem.- Una cuadrícula de dos columnas (
max-content 1fr) alinea formularios. gapsepara filas y columnas sin márgenes.
9.Glosario
| Término | Significado |
|---|---|
| Cuadrícula (grid) | Layout en filas y columnas. |
fr | Unidad que reparte el espacio libre en fracciones. |
minmax() | Función que define un tamaño mínimo y uno máximo. |
auto-fit / auto-fill | Crean tantas columnas como quepan al usar repeat(). |
| Línea de la cuadrícula | Cada separación numerada entre columnas o filas. |
| Área con nombre | Zona de la cuadrícula identificada con grid-template-areas. |
span | Palabra clave para ocupar varias celdas. |
subgrid | Cuadrícula que hereda las líneas de la cuadrícula padre. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿Cuándo conviene Grid en lugar de Flexbox?
Grid es bidimensional; Flexbox, unidimensional.
¿Qué significa grid-template-columns: 1fr 2fr?
fr reparte el espacio libre en proporción: 1 parte y 2 partes.
¿Qué hace repeat(auto-fit, minmax(200px, 1fr))?
Es el patrón de galería adaptable: columnas flexibles que se ajustan solas.
Una cuadrícula tiene 3 columnas. ¿Cuántas líneas verticales tiene?
Siempre hay una línea más que columnas: 1, 2, 3 y 4.
¿Qué hace grid-column: 1 / -1?
-1 es la última línea: el ítem ocupa todo el ancho de la cuadrícula.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.