CSS Grid
Layouts bidimensionales potentes
¿Qué es CSS Grid?
CSS Grid es un sistema de layout bidimensional diseñado para crear diseños complejos de páginas web. A diferencia de Flexbox (que es unidimensional), Grid puede manejar tanto filas como columnas simultáneamente, haciéndolo ideal para layouts de páginas completas.
Conceptos Básicos
Contenedor Grid: El elemento padre con display: grid
Items Grid: Los hijos directos del contenedor grid
Líneas Grid: Las líneas divisorias (numeradas desde 1)
Tracks: Las filas y columnas
Celdas: La intersección de una fila y columna
Áreas: Regiones nombradas del grid
.container {
display: grid;
grid-template-columns: 200px 1fr 200px; /* 3 columnas */
grid-template-rows: auto 1fr auto; /* 3 filas */
gap: 20px; /* Espacio entre items */
}
Propiedades del Contenedor
grid-template-columns / grid-template-rows
/* Tamaños fijos */
grid-template-columns: 100px 200px 100px;
/* Unidad fr (fracción del espacio disponible) */
grid-template-columns: 1fr 2fr 1fr;
/* Mezcla de unidades */
grid-template-columns: 250px 1fr 250px;
/* repeat() para patrones */
grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(4, 100px);
/* auto-fill y auto-fit para grids responsivos */
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap
.container {
gap: 20px; /* Filas y columnas */
gap: 20px 10px; /* Fila | Columna */
row-gap: 20px;
column-gap: 10px;
}
Alineación
/* Alinear items dentro de sus celdas */
.container {
justify-items: start | end | center | stretch;
align-items: start | end | center | stretch;
}
/* Alinear el grid completo dentro del contenedor */
.container {
justify-content: start | end | center | space-between | space-around;
align-content: start | end | center | space-between | space-around;
}
grid-template-areas
.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; }
Propiedades de los Items
Posicionamiento por Líneas
.item {
grid-column: 1 / 3; /* Desde línea 1 hasta línea 3 */
grid-row: 1 / 2; /* Desde línea 1 hasta línea 2 */
/* Atajo */
grid-column: 1 / span 2; /* Empieza en 1, abarca 2 columnas */
grid-row: 2 / span 3; /* Empieza en 2, abarca 3 filas */
}
Auto-alineación
.item {
justify-self: start | end | center | stretch;
align-self: start | end | center | stretch;
}
Patrones Comunes de Grid
Layout de Página Clásico
.page {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
grid-template-columns: 250px 1fr;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}
Grid de Tarjetas Responsivo
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
Galería de Imágenes
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.featured {
grid-column: span 2;
grid-row: span 2;
}
Grid vs Flexbox
- • Flexbox: Layout unidimensional (fila O columna)
- • Grid: Layout bidimensional (filas Y columnas)
- • Usa Flexbox para componentes (navbars, botones, cards)
- • Usa Grid para layouts de página completa
- • ¡Pueden usarse juntos! Grid para el layout, Flexbox dentro de las celdas