Fundamentos de CSS Grid Layout
Todo lo que necesitas saber para dominar el nuevo sistema de diseño de CSS y crear interfaces modernas, responsivas y accesibles.
1. ¿Qué es CSS Grid?
CSS Grid Layout es un módulo de CSS que permite crear rejillas bidimensionales (filas y columnas) de forma declarativa. A diferencia de Flexbox, que está orientado a una sola dimensión, Grid facilita la construcción de diseños complejos con menos código y mayor control.
El modelo se basa en líneas, trackes (carriles), celdas y áreas. Cada uno de estos conceptos se traduce en una propiedad CSS específica.
2. Principios básicos
- Líneas: números implícitos que delimitan los bordes de filas y columnas.
- Trackes: espacios entre dos líneas (p.ej., una columna o una fila).
- Celdas: intersección de un track de fila y uno de columna.
- Áreas: conjunto de celdas que forman un bloque rectangular.
3. Propiedades del contenedor Grid
display
.grid-container {
display: grid; /* o inline-grid */
}
Activa el contexto de Grid para los hijos directos.
grid-template-columns / grid-template-rows
.grid-container {
grid-template-columns: repeat(3, 1fr); /* 3 columnas iguales */
grid-template-rows: 200px auto 100px; /* alturas distintas */
}
Define la cantidad, tamaño y comportamiento de columnas y filas.
gap (grid-gap)
.grid-container {
gap: 1.5rem; /* espacio entre filas y columnas */
}
grid-template-areas
.grid-container {
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
4. Propiedades de los ítems Grid
grid-column / grid-row
.item {
grid-column: 2 / 4; /* inicia en la línea 2 y termina antes de la 4 */
grid-row: 1 / span 2; /* ocupa 2 filas */
}
justify-self / align-self
.item {
justify-self: center; /* alineación horizontal */
align-self: end; /* alineación vertical */
}
5. Ejemplos prácticos
5.1 Layout básico de 3 columnas
<div class="grid-container" style="display:grid; grid-template-columns:repeat(3,1fr); gap:1rem;">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
</div>
Resultado: tres bloques iguales con espacio de 1 rem entre ellos.
5.2 Layout responsivo con auto-fill y minmax()
.grid-responsive {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 1rem;
}
El contenedor adapta automáticamente el número de columnas según el ancho disponible, manteniendo un ancho mínimo de 250 px.
5.3 Header‑Sidebar‑Main‑Footer con áreas nombradas
<div class="grid-container" style="display:grid; grid-template-columns:250px 1fr; grid-template-rows:auto 1fr auto; grid-template-areas:\'header header\'\'sidebar main\'\'footer footer\'; gap:1rem;">
<header class="header" style="grid-area:header; background:#007bff; color:#fff; padding:1rem;">Header</header>
<aside class="sidebar" style="grid-area:sidebar; background:#6c757d; color:#fff; padding:1rem;">Sidebar</aside>
<main class="main" style="grid-area:main; background:#f8f9fa; padding:1rem;">Main Content</main>
<footer class="footer" style="grid-area:footer; background:#343a40; color:#fff; padding:1rem;">Footer</footer>
</div>
Este patrón es el punto de partida para la mayoría de los dashboards y sitios corporativos.
6. Grid vs Flexbox: Comparativa rápida
Flexbox
- Orientado a una dimensión (fila o columna).
- Ideal para alineación y distribución de elementos en una sola línea.
- Menos control sobre estructuras complejas.
CSS Grid
- Bidimensional: filas y columnas simultáneamente.
- Permite crear áreas nombradas y posicionar ítems de forma absoluta dentro de la rejilla.
- Más adecuado para layouts de página completa (header, sidebar, main, footer).
7. Buenas prácticas, accesibilidad y performance
7.1 Uso de unidades relativas
Prefiere fr, minmax(), clamp() y % para que el layout se ajuste a cualquier viewport.
7.2 Evita anidaciones excesivas
Demasiadas sub‑rejillas pueden afectar al rendimiento del renderizado. Mantén la profundidad a 2‑3 niveles máximo.
7.3 Accesibilidad (ARIA y orden visual)
- El orden DOM sigue siendo la base para lectores de pantalla. No dependas solo de
orderogrid‑columnpara re‑ordenar contenido crítico. - Usa
role="region"yaria‑labelen áreas principales comoheaderynav.
7.4 Depuración
Herramientas como Firefox Grid Inspector y la pestaña Layout de Chrome DevTools facilitan la visualización de líneas y áreas.
8. Compatibilidad y soporte de navegadores
CSS Grid está soportado en todos los navegadores modernos (Chrome ≥ 57, Edge ≥ 16, Firefox ≥ 52, Safari ≥ 10.1). Para versiones antiguas se puede usar
Navegador Versión mínima Estado Chrome 57 ✔️ Soporte completo Firefox 52 ✔️ Soporte completo Safari 10.1 ✔️ Soporte completo Edge (Chromium) 79 ✔️ Soporte completo Internet Explorer — ❌ No soporta Grid (usa Flexbox o fallback)
9. Preguntas frecuentes (FAQ)
- ¿Puedo combinar Grid y Flexbox en el mismo proyecto?
- Sí. Usa Grid para la estructura global de la página y Flexbox para la alineación interna de componentes.
- ¿Cuál es la diferencia entre
grid-gapymargin? gapcrea espacio entre filas/columnas sin afectar el tamaño del contenedor, mientras quemarginañade espacio externo al elemento.- ¿Cómo hago que una columna sea “sticky” al hacer scroll?
- Aplica
position: sticky; top: 0;al ítem y mantén la columna dentro de la rejilla.
Fundamentos de CSS Grid Layout: Guía Completa con Ejemplos Prácticos