Saltar al contenido
Curso de CSS
Todos los cursos Ir al ejercicio →

CSS Grid

  • ⏱ 45 minutos
  • 📶 Nivel: principiante
  • 🧩 Incluye ejercicio

💡 🎯 Al terminar esta lección podrás…

  • Definir cuadrículas con grid-template-columns, fr, repeat() y minmax().
  • 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.

AspectoFlexboxGrid
DimensionesUna (fila o columna)Dos (filas y columnas)
Parte de…El contenido (los ítems deciden)El diseño (la cuadrícula decide)
Ideal paraBarras, grupos de botones, tarjetas en filaLayout 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

Tres columnas
.cuadricula {
  display: grid;
  grid-template-columns: 200px 1fr 1fr;   /* una fija y dos flexibles */
  gap: 16px;
}
ConceptoSignificaEjemplo
frUna fracción del espacio libre1fr 2fr → la segunda es el doble
repeat(n, tamaño)Repite una definiciónrepeat(3, 1fr) = 1fr 1fr 1fr
minmax(min, max)Un tamaño entre un mínimo y un máximominmax(200px, 1fr)
autoLo que necesite el contenidoauto 1fr auto
gapEspacio entre filas y columnasgap: 16px, gap: 12px 24px
grid-template-rowsAltura de las filas80px 1fr
grid-auto-rowsAltura de las filas creadas automáticamentegrid-auto-rows: minmax(100px, auto)
✏️ Tu primera cuadrícula

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:

La galería responsiva
.galeria {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
}
✏️ Galería adaptable (prueba los anchos)

📌 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:

Un ítem que ocupa varias celdas
.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é */
✏️ Ítems que se extienden

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.

Un layout de página completo
.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; }
✏️ El layout «Santo Grial»

💡 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

PropiedadDónde actúaValores
justify-itemsDentro de cada celda, horizontalstart, center, end, stretch
align-itemsDentro de cada celda, verticalIgual
place-itemsAtajo de las dos anterioresplace-items: center
justify-contentLa cuadrícula dentro del contenedor (si sobra espacio)start, center, space-between…
align-contentIgual en vertical
justify-self / align-self / place-selfUn solo ítem
Centrar con una línea
.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:

✏️ Formulario alineado

7.Algunas ideas más

🔍 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

📒 Apuntes para llevar

  • Grid maqueta en dos dimensiones; Flexbox en una. Se usan juntos.
  • grid-template-columns / -rows definen la cuadrícula; fr, repeat() y minmax() 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 / -1 ocupa toda la fila; span 2 ocupa 2 celdas.
  • grid-template-areas permite dibujar el layout con texto y rediseñarlo fácilmente en móvil.
  • place-items: center centra el contenido de cada celda; justify-self/align-self actúan sobre un ítem.
  • Una cuadrícula de dos columnas (max-content 1fr) alinea formularios.
  • gap separa filas y columnas sin márgenes.

9.Glosario

TérminoSignificado
Cuadrícula (grid)Layout en filas y columnas.
frUnidad que reparte el espacio libre en fracciones.
minmax()Función que define un tamaño mínimo y uno máximo.
auto-fit / auto-fillCrean tantas columnas como quepan al usar repeat().
Línea de la cuadrículaCada separación numerada entre columnas o filas.
Área con nombreZona de la cuadrícula identificada con grid-template-areas.
spanPalabra clave para ocupar varias celdas.
subgridCuadrí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?

¿Qué significa grid-template-columns: 1fr 2fr?

¿Qué hace repeat(auto-fit, minmax(200px, 1fr))?

Una cuadrícula tiene 3 columnas. ¿Cuántas líneas verticales tiene?

¿Qué hace grid-column: 1 / -1?

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.

Ir al ejercicio