- flex-basis: Definiendo el tamaño inicial
- flex-shrink: Controlando la reducción del tamaño
- flex: atajo
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
yflex-basis
en una sola propiedad:flex
.
Materiales adicionales
¿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.