CSS Grid: Layouts Modernos sin Frameworks
12 de diciembre de 2025
Osman Jimenez
CSS Diseño Web Frontend
Dominando CSS Grid
CSS Grid revolucionó el diseño web. Aprende a crear layouts complejos sin necesidad de frameworks pesados.
Conceptos Básicos
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
gap: 20px;
}Grid Template Areas
La forma más intuitiva de crear layouts:
.layout {
display: grid;
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
grid-template-columns: 250px 1fr 1fr;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
gap: 20px;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }Responsive Grid sin Media Queries
/* Auto-fit: Crea tantas columnas como quepan */
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
/* Auto-fill: Mantiene el número de columnas */
.grid-fill {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
}Grid Avanzado: Masonry Layout
.masonry {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-auto-rows: 20px;
gap: 10px;
}
.masonry-item {
/* Calcula el span basado en la altura del contenido */
grid-row-end: span var(--row-span);
}Alineación y Justificación
.grid {
display: grid;
/* Alinear items en el eje vertical */
align-items: start | end | center | stretch;
/* Justificar items en el eje horizontal */
justify-items: start | end | center | stretch;
/* Alinear el grid completo */
align-content: start | end | center | space-between | space-around;
justify-content: start | end | center | space-between | space-around;
}
/* Para items individuales */
.item {
align-self: start | end | center | stretch;
justify-self: start | end | center | stretch;
}Grid con Named Lines
.container {
display: grid;
grid-template-columns:
[full-start] 1fr
[content-start] minmax(0, 1200px)
[content-end] 1fr
[full-end];
}
.full-width {
grid-column: full-start / full-end;
}
.content {
grid-column: content-start / content-end;
}Layouts Prácticos
1. Dashboard Layout
.dashboard {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: 60px 1fr;
grid-template-areas:
"sidebar header"
"sidebar main";
height: 100vh;
}
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main";
}
.sidebar {
display: none;
}
}2. Card Grid Responsive
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
gap: 2rem;
padding: 2rem;
}
.card {
display: grid;
grid-template-rows: auto 1fr auto;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}3. Holy Grail Layout
.holy-grail {
display: grid;
grid-template:
"header header header" auto
"nav main aside" 1fr
"footer footer footer" auto
/ 200px 1fr 200px;
min-height: 100vh;
gap: 10px;
}
@media (max-width: 768px) {
.holy-grail {
grid-template:
"header" auto
"nav" auto
"main" 1fr
"aside" auto
"footer" auto
/ 1fr;
}
}Trucos y Técnicas
1. Centrado Perfecto
.center {
display: grid;
place-items: center;
min-height: 100vh;
}2. Grid con Subgrid
.parent {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.child {
display: grid;
grid-template-columns: subgrid;
grid-column: span 3;
}3. Aspect Ratio con Grid
.aspect-ratio-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}
.aspect-ratio-item {
aspect-ratio: 16 / 9;
overflow: hidden;
}Debugging Grid
/* En DevTools de Chrome/Firefox */
/* Activa el overlay de Grid para visualizar */
/* O usa este CSS temporal */
.grid-debug {
background:
repeating-linear-gradient(
90deg,
rgba(255,0,0,0.1) 0px,
rgba(255,0,0,0.1) 1px,
transparent 1px,
transparent 100px
);
}Mejores Prácticas
- Mobile First: Diseña primero para móvil
- Usa minmax(): Para flexibilidad sin media queries
- Named Areas: Más legible que números
- Gap en lugar de margin: Más predecible
- fr units: Mejor que porcentajes
Conclusión
CSS Grid es increíblemente poderoso y elimina la necesidad de frameworks de layout en muchos casos. Con estas técnicas puedes crear layouts complejos, responsivos y mantenibles usando solo CSS nativo.