CSS Grid a fondo: diseño en dos dimensiones

Domina CSS Grid: líneas, áreas, auto-placement, subgrid y patrones reales para layouts modernos.

CSS Grid es el sistema de layout ideal para organizar contenido en dos dimensiones: filas y columnas a la vez.

A diferencia de Flexbox (una dimensión), Grid te permite definir estructuras completas de página con precisión.

En esta lección veremos todas sus propiedades clave, usos comunes y subgrid.

  • Cuándo usar cada uno.
  • Flexbox es un layout de una dimensión: fila o columna. Es perfecto para barras, menús o componentes en línea.
  • Grid es bidimensional: puedes controlar filas y columnas al mismo tiempo. Ideal para layouts completos y tarjetas.
  • En la práctica, se combinan: Grid para la estructura general y Flexbox para alinear componentes internos.
  • Flex: distribución en un eje.

Grid vs Flexbox

Cuándo usar cada uno.

Flexbox es un layout de una dimensión: fila o columna. Es perfecto para barras, menús o componentes en línea.

Grid es bidimensional: puedes controlar filas y columnas al mismo tiempo. Ideal para layouts completos y tarjetas.

En la práctica, se combinan: Grid para la estructura general y Flexbox para alinear componentes internos.

  • Flex: distribución en un eje.
  • Grid: estructura completa en dos ejes.
  • Ambos se complementan, no compiten.

Conceptos fundamentales

Los bloques básicos del sistema Grid.

Propiedades del contenedor Grid

Define filas, columnas, áreas y flujo.

display: grid activa el contenedor.

grid-template-columns y grid-template-rows definen la malla base.

La unidad fr reparte el espacio libre entre columnas o filas.

gap controla el espacio entre filas y columnas.

Funciones especiales

Atajos y tamaños flexibles para la malla.

repeat(n, valor) simplifica patrones repetitivos.

minmax(min, max) define un rango de tamaño para pistas flexibles.

fit-content(límite) ajusta al contenido sin superar un máximo.

Auto-fill vs Auto-fit

Dos comportamientos para grids responsivos.

auto-fill crea columnas vacías si hay espacio sobrante.

auto-fit colapsa esas columnas y expande las ocupadas.

Grid Template Areas

Define el layout de forma visual.

Nombras áreas y dibujas el layout con strings.

Cada item se asigna con grid-area.

Alineación

Control fino en ejes y celdas.

  • justify-items / align-items: alinea ítems dentro de su celda.
  • justify-content / align-content: alinea toda la cuadrícula en el contenedor.
  • place-items: atajo para align-items + justify-items.

Propiedades de los ítems

Colocación, spans y alineación.

grid-column y grid-row controlan en qué líneas empieza y termina un ítem.

Puedes usar span para indicar cuántas columnas/filas ocupa.

grid-area asigna un ítem a una zona definida en el contenedor.

justify-self y align-self permiten alinear un ítem dentro de su celda.

Subgrid

Hereda la malla del contenedor padre.

subgrid permite que un elemento hijo reutilice la definición de filas/columnas del grid padre.

Es ideal para alinear tarjetas internas o secciones con la misma estructura.

Actualmente está soportado en navegadores modernos; revisa compatibilidad si necesitas soporte legacy.

Patrones y usos comunes

Layouts reales con Grid.

  • Layout de página: header, sidebar, contenido y footer con grid-template-areas.
  • Galerías responsivas: repeat(auto-fit, minmax(200px, 1fr)).
  • Dashboard: columnas fijas + filas elásticas.
  • Tarjetas con alineación consistente usando subgrid.
  • Zonas destacadas usando spans para ampliar tarjetas.

Código del tema: grid-template-columns: repeat(3, 1fr);

📘 Teoría

Grid vs Flexbox

Cuándo usar cada uno.

Flexbox es un layout de una dimensión: fila o columna. Es perfecto para barras, menús o componentes en línea.

Grid es bidimensional: puedes controlar filas y columnas al mismo tiempo. Ideal para layouts completos y tarjetas.

En la práctica, se combinan: Grid para la estructura general y Flexbox para alinear componentes internos.

  • Flex: distribución en un eje.
  • Grid: estructura completa en dos ejes.
  • Ambos se complementan, no compiten.

Conceptos fundamentales

Los bloques básicos del sistema Grid.

1

Grid Container

El elemento con display: grid; es el padre directo de toda la cuadrícula.

2

Grid Item

Los hijos directos del contenedor. Cada uno ocupa celdas de la malla.

3

Grid Line

Las líneas que delimitan filas y columnas. Se numeran para posicionar items.

4

Grid Track

El espacio entre dos líneas adyacentes: una fila o una columna.

5

Grid Cell

La celda básica: intersección de una fila y una columna.

6

Grid Area

Un área rectangular que puede cubrir varias celdas.

Propiedades del contenedor Grid

Define filas, columnas, áreas y flujo.

display: grid activa el contenedor.

grid-template-columns y grid-template-rows definen la malla base.

La unidad fr reparte el espacio libre entre columnas o filas.

gap controla el espacio entre filas y columnas.

grid-auto-flow define cómo se colocan los ítems automáticamente (row, column, dense).

grid-auto-columns y grid-auto-rows definen el tamaño de pistas automáticas.

Contenedor Grid básico
.grid {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-rows: 100px auto 100px;
  gap: 20px;
}

Funciones especiales

Atajos y tamaños flexibles para la malla.

1

repeat(n, valor) simplifica patrones repetitivos.

2

minmax(min, max) define un rango de tamaño para pistas flexibles.

3

fit-content(límite) ajusta al contenido sin superar un máximo.

repeat, minmax y fit-content
.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  grid-template-rows: fit-content(240px);
}

Auto-fill vs Auto-fit

Dos comportamientos para grids responsivos.

1

auto-fill crea columnas vacías si hay espacio sobrante.

2

auto-fit colapsa esas columnas y expande las ocupadas.

Grid responsivo
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
}

Grid Template Areas

Define el layout de forma visual.

1

Nombras áreas y dibujas el layout con strings.

2

Cada item se asigna con grid-area.

Áreas nombradas
.layout {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar content"
    "footer footer";
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }

Alineación

Control fino en ejes y celdas.

  • justify-items / align-items: alinea ítems dentro de su celda.
  • justify-content / align-content: alinea toda la cuadrícula en el contenedor.
  • place-items: atajo para align-items + justify-items.

Propiedades de los ítems

Colocación, spans y alineación.

1

grid-column y grid-row controlan en qué líneas empieza y termina un ítem.

2

Puedes usar span para indicar cuántas columnas/filas ocupa.

3

grid-area asigna un ítem a una zona definida en el contenedor.

4

justify-self y align-self permiten alinear un ítem dentro de su celda.

Ítems Grid
.card--destacada {
  grid-column: 1 / span 2;
  grid-row: 1 / 3;
}

Subgrid

Hereda la malla del contenedor padre.

1

subgrid permite que un elemento hijo reutilice la definición de filas/columnas del grid padre.

2

Es ideal para alinear tarjetas internas o secciones con la misma estructura.

3

Actualmente está soportado en navegadores modernos; revisa compatibilidad si necesitas soporte legacy.

Ejemplo de subgrid
.layout {
  display: grid;
  grid-template-columns: 1fr 2fr;
  gap: 16px;
}

.panel {
  display: grid;
  grid-template-columns: subgrid;
  grid-column: 1 / -1;
}

Patrones y usos comunes

Layouts reales con Grid.

  • Layout de página: header, sidebar, contenido y footer con grid-template-areas.
  • Galerías responsivas: repeat(auto-fit, minmax(200px, 1fr)).
  • Dashboard: columnas fijas + filas elásticas.
  • Tarjetas con alineación consistente usando subgrid.
  • Zonas destacadas usando spans para ampliar tarjetas.

🧭 Visuales clave

Estructura de Grid en dos dimensiones

Resume como posicionar items con lineas, areas y spans.

Grid con areas y spans para explicar colocacion en dos ejes.

Flexbox vs Grid según el problema

Encaja aquí porque ayuda a decidir cuándo ya merece la pena pasar de una dimensión a una rejilla completa.

Comparativa visual entre Flexbox y Grid según el tipo de layout

🧪 Aprende probando

Ejemplo Demo interactiva: juega con Grid Cambia columnas, gap y alineación y observa el layout en vivo.
Ejemplo Layout con áreas Un layout típico de web usando grid-template-areas.
Ejemplo Grid auto-fit con tarjetas Redimensiona la ventana y observa cómo se reacomodan las tarjetas.
Ejemplo Grid areas (layout tipo dashboard) Edita las áreas y cambia el layout sin tocar el HTML.

🏁 Retos

Reto Reto: grid-template-areas Define header, main y footer.
Reto Reto: auto-fit + minmax Grid responsive con tarjetas.
Reto Reto: subgrid Alinea columnas internas con subgrid.
Reto Reto: dashboard aplicable con áreas Crea un layout real: cabecera completa, sidebar y contenido principal.

🧰 Recursos

CodePen: Starter layout con CSS Grid
Abrir en CodePen

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .