
CSS Flexbox: Arquitectura del Layout Flexible
Flexbox es clave para layouts modernos. Aprende a usar su sistema de ejes, distribuye el espacio y alinea elementos para crear interfaces responsive, limpias y profesionales con total control.
Domina CSS Grid para crear layouts bidimensionales complejos. Aprende a controlar filas, columnas y áreas para diseñar interfaces web profesionales, ordenadas y mantenibles.
A diferencia de Flexbox, Grid permite controlar simultáneamente filas y columnas. Esto lo hace ideal para layouts complejos donde los elementos ocupan áreas específicas y no solo se alinean en una dirección.

Antes de definir tamaños o posiciones, es necesario contar con un contenedor y elementos hijos. Grid trabaja siempre desde el elemento padre, que es quien define las reglas de distribución.
<!-- Contenedor que se convertirá en grilla -->
<section class="grid-container">
<!-- Cada div será un ítem de la grilla -->
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
<div class="grid-item">Item 4</div>
</section>HTML, estilos modernos con CSS y diseño rápido con Tailwind para lanzar tus primeros sitios responsivos y profesionales.10 clases en vivo con profesores expertosVer próximas fechasLa grilla se activa aplicando display grid al contenedor padre. Desde ese momento, todos los hijos directos pasan a comportarse como ítems de la grilla y responden a sus reglas.
/* Contenedor principal de la grilla */
.grid-container {
/* Activa el sistema de grilla */
display: grid;
}
Cuando se definen filas y columnas explícitas, cada ítem ocupa automáticamente una celda. El orden visual depende de la estructura de la grilla y no solo del orden del HTML.
<!-- Grilla con estructura definida por CSS -->
<div class="grid-container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
</div>Grid permite definir tamaños exactos o proporcionales. Las unidades fr reparten el espacio disponible de forma flexible, adaptándose al tamaño del contenedor.
/* Definición explícita de la grilla */
.grid-container {
display: grid;
/* Dos columnas: una ocupa el doble que la otra */
grid-template-columns: 2fr 1fr;
/* Dos filas: la primera es más alta que la segunda */
grid-template-rows: 3fr 1fr;
}
Cuando se trabaja con grillas grandes y regulares, el HTML se mantiene simple. Grid se encarga de distribuir los elementos automáticamente según la cantidad de filas y columnas definidas.
<!-- Contenedor preparado para una grilla de muchas columnas y filas -->
<div class="grid-container">
<!-- Cada div ocupa una celda automáticamente -->
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
<div>Item 4</div>
<div>Item 5</div>
<div>Item 6</div>
<div>Item 7</div>
<div>Item 8</div>
<div>Item 9</div>
</div>repeat()La función repeat() evita escribir valores repetidos manualmente. Permite definir cuántas columnas o filas se crean y qué tamaño tendrá cada una, haciendo el código más claro y escalable.
/* Grilla con múltiples columnas y filas iguales */
.grid-container {
display: grid;
/*3 columnas del mismo tamaño */
grid-template-columns: repeat(3, 1fr);
/* 3 filas del mismo tamaño */
grid-template-rows: repeat(3, 1fr);
}
Aunque la grilla exista, solo se ocuparán las celdas necesarias según la cantidad de elementos. El resto del espacio queda disponible para futuros ítems o reordenamientos.
<!-- Grilla lista para alojar múltiples elementos -->
<section class="grid-container">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
<div>Item 4</div>
<div>Item 5</div>
<div>Item 6</div>
<div>Item 7</div>
<div>Item 8</div>
<div>Item 9</div>
<div>Item 10</div>
<div>Item 11</div>
<div>Item 12</div>
</section>Definir filas y columnas explícitas permite pensar el diseño como una matriz completa. Cada celda existe aunque no tenga contenido, facilitando layouts complejos y consistentes.
/* Grilla explícita con muchas divisiones */
.grid-container {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(3, 1fr);
}
Grid por áreas se apoya en una estructura HTML clara. Cada etiqueta representa una sección lógica del layout, que luego será posicionada desde CSS sin alterar el orden del marcado.
<!-- Contenedor principal del layout -->
<div class="layout">
<header>Header</header>
<nav>Navegación</nav>
<section id="productos">Productos</section>
<section id="servicios">Servicios</section>
<aside>Publicidad</aside>
<footer>Footer</footer>
</div>
grid-template-areasLas áreas permiten diseñar el layout de forma visual, usando nombres. Cada fila del grid se escribe como texto, facilitando la lectura y el mantenimiento del diseño.
/* Layout definido por áreas */
.layout {
display: grid;
/* Definición visual del layout */
grid-template-areas:
"nav header header"
"nav productos publicidad"
"nav servicios publicidad"
"nav footer footer";
grid-template-columns: 20% auto 15%;
grid-template-rows: 80px 1fr 1fr 60px;
}
header { grid-area: header; }
nav { grid-area: nav; }
#productos { grid-area: productos; }
#servicios { grid-area: servicios; }
aside { grid-area: publicidad; }
footer { grid-area: footer; }
El espaciado entre elementos debe resolverse desde la grilla y no con márgenes individuales. Esto mantiene una separación uniforme y controlada en todo el layout.
<!-- Grilla con múltiples elementos -->
<div class="grid">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>gapLa propiedad gap define la distancia entre filas y columnas. Es la forma correcta de separar celdas en Grid sin romper la estructura ni depender de márgenes individuales.
/* Grilla con separación controlada */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* Espacio horizontal entre columnas */
column-gap: 10px;
/* Espacio vertical entre filas */
row-gap: 15px;
}
Para entender la alineación en Grid, primero necesitamos una grilla con ítems más pequeños que sus celdas. Esto permite ver claramente cómo se acomodan dentro de cada celda.
<!-- Contenedor que define una grilla -->
<section class="grid-container">
<!-- Ítems intencionalmente pequeños -->
<div class="grid-item">Item 1</div>
<div class="grid-item">Item 2</div>
<div class="grid-item">Item 3</div>
<div class="grid-item">Item 4</div>
</section>Las propiedades justify-items y align-items controlan cómo se posiciona cada ítem dentro de su propia celda. No mueven la grilla, sino el contenido interno.
/* Grilla con celdas visibles */
.grid-container {
display: grid;
grid-template-columns: repeat(2, 150px);
grid-template-rows: repeat(2, 100px);
gap: 10px;
/* Alineación horizontal dentro de la celda */
justify-items: center;
/* Alineación vertical dentro de la celda */
align-items: center;
}
/* Ítems más pequeños que la celda */
.grid-item {
padding: 5px;
border: 1px solid black;
}
Para que justify-content tenga efecto, la grilla debe ocupar menos ancho que su contenedor. Esto permite distribuir el conjunto de columnas dentro del espacio sobrante.
<!-- Contenedor con ancho mayor al de la grilla -->
<div class="wrapper">
<div class="grid-container">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>
</div>HTML, estilos modernos con CSS y diseño rápido con Tailwind para lanzar tus primeros sitios responsivos y profesionales.10 clases en vivo con profesores expertosVer próximas fechasjustify-content define cómo se distribuye el conjunto completo de columnas dentro del contenedor. Requiere espacio sobrante para que sus valores sean visibles.
/* Contenedor externo */
.wrapper {
width: 100%;
}
/* Grilla más angosta que su contenedor */
.grid-container {
display: grid;
grid-template-columns: repeat(2, 120px);
grid-template-rows: repeat(2, 80px);
gap: 10px;
/* Distribuye la grilla horizontalmente */
justify-content: center;
}
Para que align-content funcione, el contenedor debe tener más altura que la grilla. Esto permite distribuir el conjunto de filas dentro del espacio vertical sobrante.
<!-- Contenedor con altura definida -->
<div class="wrapper">
<div class="grid-container">
<div class="box">A</div>
<div class="box">B</div>
<div class="box">C</div>
<div class="box">D</div>
</div>
</div>align-content controla cómo se posiciona el conjunto completo de filas dentro del contenedor. Funciona de forma análoga a justify-content, pero en el eje vertical.
/* Contenedor externo con altura */
.wrapper {
height: 400px;
}
/* Grilla más baja que su contenedor */
.grid-container {
display: grid;
grid-template-columns: repeat(2, 120px);
grid-template-rows: repeat(2, 80px);
gap: 10px;
/* Distribuye la grilla verticalmente */
align-content: center;
}
Usando la misma estructura HTML, podemos observar cómo cambian los resultados según alineemos los ítems individualmente o el contenido completo de la grilla.
<!-- Misma estructura para distintas pruebas de alineación -->
<div class="grid-container">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>justify-items y align-items trabajan sobre cada celda. justify-content y align-content mueven la grilla completa. Entender esta diferencia evita errores comunes en layouts.
.grid-container {
display: grid;
grid-template-columns: repeat(2, 120px);
grid-template-rows: repeat(2, 80px);
gap: 10px;
/* Alinea ítems dentro de su celda */
justify-items: center;
align-items: center;
/* Alinea la grilla completa */
justify-content: space-evenly;
align-content: space-between;
}
justify-self y align-self se aplican a un ítem puntual. El resto de los elementos mantiene la alineación definida por el contenedor, lo que permite excepciones controladas.
<!-- Grilla con un ítem destacado -->
<div class="grid-container">
<div class="item item-a">Item A</div>
<div class="item">Item B</div>
<div class="item">Item C</div>
<div class="item">Item D</div>
</div>justify-self y align-selfEstas propiedades permiten alinear un ítem dentro de su celda sin afectar a los demás. Son el equivalente individual de justify-items y align-items.
/* Grilla base */
.grid-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 120px);
gap: 10px;
/* Alineación general para todos los ítems */
justify-items: stretch;
align-items: stretch;
}
/* Estilo común */
.item {
border: 1px solid black;
padding: 8px;
}
/* Alineación individual del ítem A */
.item-a {
/* Alineación horizontal dentro de su celda */
justify-self: center;
/* Alineación vertical dentro de su celda */
align-self: start;
}
Hasta ahora trabajamos sobre el contenedor. En Grid, cada ítem hijo también puede modificar su propio comportamiento. Este HTML sirve como base para aplicar reglas específicas a un solo elemento.
<!-- Contenedor principal de la grilla -->
<div class="grid-container">
<!-- Ítems hijos de la grilla -->
<div class="item item-a">
<h3>Item A</h3>
<p>Description A</p>
</div>
<div class="item item-b">
<h3>Item B</h3>
<p>Description B</p>
</div>
<div class="item item-c">
<h3>Item C</h3>
<p>Description C</p>
</div>
<div class="item item-d">
<h3>Item D</h3>
<p>Description D</p>
</div>
</div>HTML, estilos modernos con CSS y diseño rápido con Tailwind para lanzar tus primeros sitios responsivos y profesionales.10 clases en vivo con profesores expertosVer próximas fechasAlgunas propiedades de Grid no se aplican al contenedor, sino a cada ítem. Esto permite modificar alineación o asignar áreas específicas sin romper la estructura general del layout.
/* Grilla base */
.grid-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 120px);
gap: 10px;
}
/* Estilo común para visualizar los ítems */
.item {
border: 1px solid black;
padding: 8px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

Flexbox es clave para layouts modernos. Aprende a usar su sistema de ejes, distribuye el espacio y alinea elementos para crear interfaces responsive, limpias y profesionales con total control.

Domina CSS Grid para crear layouts bidimensionales complejos. Aprende a controlar filas, columnas y áreas para diseñar interfaces web profesionales, ordenadas y mantenibles.

CSSDomina el diseño responsive con Media Queries: define breakpoints, aplica Mobile First y adapta layouts y tipografía para interfaces perfectas en cualquier pantalla.