Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Propiedades de los elementos Flex. Flexibilidad CSS: Fundamentos de Flex

En la lección anterior, aprendimos cómo la propiedad flex-grow nos permite distribuir el espacio adicional dentro de un contenedor flexible.

Ahora, vamos a conocer dos propiedades adicionales que nos ayudarán a controlar mejor el tamaño de los elementos flexibles: flex-basis y flex-shrink.


flex-basis: Definiendo el tamaño inicial

La propiedad flex-basis establece un tamaño base para un elemento antes de que se aplique la distribución flexible. Esto significa que le indicamos al navegador cuánto debería medir el elemento inicialmente, sin considerar el espacio disponible o el crecimiento de otros elementos dentro del contenedor.

Podrías pensar que se comporta igual que width o height, pero hay una diferencia clave: flex-basis solo funciona en un contenedor flexible y afecta al eje principal (horizontal si el contenedor usa flex-direction: row).

Ejemplo 1: Todos los elementos con el mismo flex-basis

Vamos a establecer los elementos con un flex-basis de 200px dentro de un contenedor de 600px de ancho:

Como la suma de los flex-basis de los elementos es exactamente 600px, encajan perfectamente en el contenedor.

Ejemplo 2: Cuando los elementos no encajan en el contenedor

¿Qué pasaría si cambiamos el flex-basis del primer bloque a 400px?

Como los tres elementos ahora suman 800px pero el contenedor solo tiene 600px de ancho, el navegador reduce automáticamente los elementos para que encajen.


flex-shrink: Controlando la reducción del tamaño

Cuando el espacio dentro del contenedor es menor que la suma de los tamaños de sus elementos, estos deben reducirse para encajar. Aquí es donde entra en juego la propiedad flex-shrink.

Por defecto, todos los elementos tienen flex-shrink: 1, lo que significa que se encogen proporcionalmente. Veamos cómo se calcula la reducción de cada elemento cuando el espacio no es suficiente.

Ejemplo de reducción automática

Tomemos el caso anterior, donde los tres elementos sumaban 800px en total, pero el contenedor solo tenía 600px. Queremos calcular cuánto disminuirá cada elemento:

1️⃣ Calculamos el ancho negativo, es decir, la cantidad de espacio que falta:

  • Tamaño del contenedor (600px) - Tamaño total de los elementos (800px) = -200px

2️⃣ Calculamos el peso total, usando la fórmula:

   Peso total = (flex-shrink * tamaño_base) de cada elemento

Para nuestro ejemplo:

   1 * 400px + 1 * 200px + 1 * 200px = 800px

3️⃣ Calculamos cuánto se reducirá cada elemento:

  • Primer bloque: (-200 * 1) * (400 / 800) = -100px
  • Segundo y tercer bloque: (-200 * 1) * (200 / 800) = -50px

Esto significa que después de la reducción:

Elemento Tamaño Base Reducción Tamaño Final
1° bloque 400px -100px 300px
2° bloque 200px -50px 150px
3° bloque 200px -50px 150px

Si queremos evitar que un elemento se reduzca, podemos usar flex-shrink: 0 en ese elemento.


flex: atajo

En lugar de escribir individualmente flex-grow, flex-shrink y flex-basis, podemos combinarlas en una sola propiedad:

.elemento {
  flex: 1 1 200px; /* grow: 1, shrink: 1, basis: 200px */
}

Resumen

  • La propiedad flex-basis define el tamaño base de un elemento antes de cualquier ajuste del contenedor flexible.
  • Podemos escribir flex-grow, flex-shrink y flex-basis en una sola propiedad: flex.

Materiales adicionales

  1. Webinar de Códica 🎬 Diseños flexibles con Flexbox

¿Dudas sobre la lección? Pregunta en el chat del grupo

Te responderán tu mentor o tus compañeros.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY