Si alguna vez has trabajado con layouts flexibles en CSS, seguramente te habrás topado con este problema: un elemento que se estira demasiado, empuja todo lo demás y rompe el diseño. Esto se vuelve aún más frustrante cuando quieres truncar texto largo con los famosos puntos suspensivos (...
) y, por algún motivo, simplemente no funciona.
Imagina este escenario:
<div class="track-row">
<div class="badge">E</div>
<div class="track-artists">
Alemán, Canserbero, Kase.O, santa suerte, Santa Fe Klan, Al2 El Aldeano, Akapellah, Foyone, Toño Lizarraga, Solitario Mondragon & Norick
</div>
<div class="actions">...</div>
</div>
Le aplicamos las propiedades de truncado más comunes:
.track-artists {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Pero sorpresa: el texto sigue empujando el contenedor como si nuestras reglas no existieran.
(ya no se produce overflow)
width: 0
+ flex: 1
La clave está en añadir dos propiedades que trabajan en conjunto:
.track-artists {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 0; /* Fuerza un ancho inicial de cero */
flex: 1; /* Ocupa el espacio disponible sin excederse */
}
width: 0
— Obliga al elemento a comenzar con ancho cero, ignorando el tamaño de su contenido.flex: 1
— Permite que crezca para ocupar el espacio disponible, pero sin empujar más de la cuenta.Es equivalente a:
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
Con esta combinación, el elemento:
...
) cuando el contenido no cabe.Antes:
Después:
Este patrón no solo sirve para truncar texto. Aquí tienes más casos útiles:
.container {
display: flex;
}
.column {
width: 0;
flex: 1; /* Todas ocupan el mismo espacio */
}
.layout {
display: flex;
}
.sidebar {
width: 250px;
flex-shrink: 0; /* No se encoge */
}
.content {
width: 0;
flex: 1; /* Se adapta al resto del espacio */
}
.form-row {
display: flex;
}
.input {
width: 0;
flex: 1; /* El input se expande */
}
.button {
flex-shrink: 0; /* El botón mantiene su tamaño */
}
width: 0
+ flex: 1
es una de esas pequeñas joyas de CSS que, aunque sencilla, resuelve problemas muy comunes en diseños flexibles. No solo arregla el truncado de texto, sino que también te permite crear layouts más predecibles y controlados.
La próxima vez que un texto largo arruine tu flex layout, ya sabes la fórmula mágica:
width: 0;
flex: 1;
I am particularly drawn to developing applications that are not only functional but also visually appealing and easy to use. I accomplish this by implementing SOLID principles and clean architecture, and applying testing to ensure quality.