Clase 2: CSS Flexbox

Organización, alineación y distribución flexible de elementos en una página web

"Flexbox convierte el desorden visual en estructura, alineación y diseño adaptable"

Introducción Modelo Flexbox Propiedades Ejemplos Práctica

1) Introducción a Flexbox

Flexbox es un modelo de diseño de CSS que permite organizar elementos dentro de un contenedor de forma flexible. Sirve para alinear, distribuir y adaptar elementos sin depender de técnicas antiguas como tablas, flotantes o márgenes excesivos.

En una página web moderna es común necesitar que varios elementos aparezcan uno al lado del otro, se centren, tengan espacios uniformes o bajen a otra línea cuando la pantalla es pequeña. Flexbox facilita todo esto con pocas propiedades.

Idea central

Flexbox trabaja con un contenedor padre y varios elementos hijos. Al aplicar display: flex; al contenedor, sus hijos se vuelven elementos flexibles.

Analogía

Imagina una fila de estudiantes en el aula. El docente puede pedirles que se alineen al centro, que se separen uniformemente o que formen otra fila si ya no caben. Eso es similar a lo que hace Flexbox con los elementos HTML.

Uso frecuente

Flexbox se usa para menús, tarjetas, formularios, galerías, secciones de contenido, botones, barras superiores, perfiles y diseños responsivos.

Idea para recordar: Flexbox no se aplica directamente a todos los elementos de la página, sino al contenedor que queremos controlar. Los hijos de ese contenedor son los que se ordenan y alinean.

2) El modelo Flexbox

Para entender Flexbox, primero debemos conocer tres conceptos básicos: contenedor flexible, elementos flexibles y ejes de alineación.

Concepto Descripción Ejemplo sencillo
Contenedor flexible Es el elemento padre al que se le aplica display: flex;. Un div que contiene varias tarjetas.
Elemento flexible Es cada hijo directo dentro del contenedor flexible. Cada tarjeta dentro del contenedor.
Eje principal Es la dirección principal en la que se colocan los elementos. Horizontal si usamos flex-direction: row;.
Eje transversal Es el eje perpendicular al eje principal. Vertical si el eje principal es horizontal.

Ejemplo base

.contenedor { display: flex; }

Con esa sola línea, los elementos hijos dejan de comportarse como bloques normales y pasan a distribuirse según las reglas de Flexbox.

Demostración visual: elementos en fila
1
2
3
En HTML, los div normalmente aparecen uno debajo del otro. Pero cuando su padre tiene display: flex;, pueden colocarse fácilmente en fila.

3) Propiedades principales de Flexbox

Flexbox tiene varias propiedades. Algunas se aplican al contenedor padre y otras a los elementos hijos. En esta clase nos centraremos en las más usadas para construir diseños.

Contenedor

display: flex

Activa Flexbox en el contenedor. Es el punto de partida para usar este modelo de diseño.

.contenedor { display: flex; }
Contenedor

flex-direction

Define la dirección en la que se colocan los elementos: en fila o en columna.

.contenedor { flex-direction: row; }
Contenedor

justify-content

Distribuye los elementos sobre el eje principal. Puede centrarlos o separarlos.

.contenedor { justify-content: center; }
Contenedor

align-items

Alinea los elementos en el eje transversal. Se usa mucho para centrar verticalmente.

.contenedor { align-items: center; }
Contenedor

gap

Agrega separación uniforme entre los elementos sin tener que usar márgenes en cada hijo.

.contenedor { gap: 20px; }
Contenedor

flex-wrap

Permite que los elementos bajen a una nueva línea cuando no caben en una sola fila.

.contenedor { flex-wrap: wrap; }

Valores comunes de justify-content

Valor ¿Qué hace? Uso típico
flex-start Coloca los elementos al inicio del eje principal. Cuando queremos que todo comience desde la izquierda.
center Centra los elementos. Botones, tarjetas o bloques destacados.
space-between Deja el mayor espacio posible entre elementos. Menús con logo a un lado y enlaces al otro.
space-around Coloca espacio alrededor de cada elemento. Distribución visual más abierta.
space-evenly Distribuye espacios iguales entre todos los elementos. Galerías o grupos de botones.

Valores comunes de align-items

Valor ¿Qué hace? Ejemplo de uso
stretch Estira los elementos para ocupar el alto disponible. Diseños donde las tarjetas deben tener una altura uniforme.
center Centra los elementos en el eje transversal. Centrar elementos verticalmente dentro de una caja.
flex-start Alinea los elementos al inicio del eje transversal. Cuando todos deben iniciar arriba.
flex-end Alinea los elementos al final del eje transversal. Cuando se desea alineación inferior.

4) Ejemplos visuales con Flexbox

Ejemplo 1: Dirección en fila

Con flex-direction: row;, los elementos se colocan de izquierda a derecha. Este es el comportamiento predeterminado.

.fila { display: flex; flex-direction: row; gap: 12px; }
HTML
CSS
JS

Ejemplo 2: Dirección en columna

Con flex-direction: column;, los elementos se colocan de arriba hacia abajo.

.columna { display: flex; flex-direction: column; gap: 12px; }
Paso 1
Paso 2
Paso 3

Ejemplo 3: Centrado horizontal y vertical

Uno de los usos más populares de Flexbox es centrar elementos fácilmente.

.caja { display: flex; justify-content: center; align-items: center; }
Centro

Ejemplo 4: Separar elementos con space-between

Este valor es muy útil para barras de navegación: coloca un elemento al inicio y otro al final.

.navbar { display: flex; justify-content: space-between; align-items: center; }
Logo
Menú

Ejemplo 5: Tarjetas responsivas con flex-wrap

Cuando los elementos no caben en una sola línea, flex-wrap: wrap; permite que bajen automáticamente a otra fila.

.cards { display: flex; gap: 18px; flex-wrap: wrap; } .card { flex: 1 1 180px; }
Tarjeta 1
Tarjeta 2
Tarjeta 3
Tarjeta 4
Tarjeta 5

5) Aplicaciones reales de Flexbox

Flexbox no es solo una teoría. Se usa constantemente en páginas reales porque resuelve problemas comunes de diseño.

Aplicación 1: Barra de navegación

Ricaldone
.menu { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }

Aplicación 2: Tarjeta de perfil

RW

Estudiante de Diseño Web

Esta tarjeta usa Flexbox para colocar el avatar a la izquierda y la información a la derecha. Si la pantalla es pequeña, los elementos pueden acomodarse mejor.

.perfil { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }

Aplicación 3: Contenido principal y barra lateral

Contenido principal

Aquí podría ir el contenido más importante de una página: una noticia, una clase, un artículo o una explicación.

Barra lateral

Aquí podrían ir enlaces, avisos, recursos o información complementaria.

.layout { display: flex; gap: 18px; flex-wrap: wrap; } .main { flex: 2 1 420px; } .aside { flex: 1 1 240px; }
Observación importante: la propiedad flex puede controlar cuánto crece, cuánto se reduce y cuál es el tamaño base de un elemento.

6) Errores comunes al usar Flexbox

Error 1: aplicar Flexbox al elemento equivocado

Flexbox debe aplicarse al contenedor padre. Si se aplica a un hijo individual, no ordenará a sus hermanos.

Error 2: olvidar flex-wrap

Si hay muchos elementos en una fila y no se usa flex-wrap, pueden comprimirse demasiado o desbordarse.

Error 3: confundir los ejes

justify-content trabaja sobre el eje principal y align-items sobre el eje transversal. Si cambia flex-direction, también cambia la lógica.

Consejo práctico: antes de escribir muchas propiedades, identifica primero cuál es el contenedor, cuáles son los hijos y en qué dirección quieres ordenarlos.

7) Práctica de repaso

Responde las preguntas y luego verifica tus respuestas.

1. ¿Qué propiedad activa Flexbox en un contenedor?
2. ¿Qué propiedad se usa para separar elementos de forma uniforme?
3. ¿Qué propiedad permite que los elementos bajen a otra línea si no caben?
4. ¿Qué propiedad distribuye elementos en el eje principal?
5. ¿Cuál es un uso común de Flexbox?

8) Cierre

Flexbox es una herramienta fundamental para el diseño web moderno. Permite organizar elementos con mayor facilidad, mejorar la presentación visual y construir interfaces que se adapten mejor a diferentes tamaños de pantalla.

Lo más importante es recordar que Flexbox funciona a partir de una relación entre un contenedor padre y sus elementos hijos. Al comprender esta relación, propiedades como justify-content, align-items, gap y flex-wrap se vuelven mucho más fáciles de aplicar.

Para recordar: Flexbox no solo sirve para “poner elementos en fila”. Sirve para pensar el diseño de forma más ordenada, flexible y adaptable.