CSS: Overflow ellipsis con varias lineas de texto

Este es un truco que aprendí hace algún tiempo y que me ha hecho lidiar mejor con los diseñadores en varias ocasiones. Se trata de un contenedor con texto que tiene siempre un tamaño fijo, pero el texto no es siempre el mismo. Por ejemplo una versión resumida de la biografía de un usuario, que puede tener entre 10 y 1000 caracteres.

El diseñador quiere que tenga siempre el mismo alto, pero estamos en el año 2015, el mundo se ha movido y la maquetación es responsive, es decir que no entiende de tamaños fijos por muy sencillos que parezcan. Todo es relativo: los altos, los anchos y si se hace bien de verdad, hasta los tamaños de letra. Los numeros sólo sirven para indicar porcentajes o se usan para mantener proporciones, no para indicar tamaños.

Lo ideal es usar text-overflow: ellipspsis; para poner los tres puntos al final del texto resumido y ocultar el resto, pero por defecto sólo permite aplicarlo a una linea. Y acortar el texto con PHP o similares tampoco sería una opción, porque entienden de carácteres pero no del tamaño que ocupan, por ejemplo: 3 L minúsculas podría ocupar lo mismo que una M.

Así se hace con CSS

En realidad es SCSS, pero no es nada que no entendería cualquiera que sepa CSS.

$font-size: 20px;
$line-height: 1.4;
$lines: 3;

.biography{
    display: block;
    display: -webkit-box;
    height: $font-size * $line-height * $lines;
    font-size: $font-size;
    line-height: $line-height;
    -webkit-line-clamp: $lines;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}

Y el HTML

<div class="biography">...</div>

Hay que tener en cuenta que si dentro de ese div se usan <p> u otros elementos con estilos, tendrán que modificarse también el tamaño de letra y alto de linea de esos elementos.

Y aquí un ejemplo de uso.




Josep Viciana

Programador de 29 años con una década de experiencia como programador. interesado en el diseño, ilustración y nuevas tecnologías. Dedicado desde siempre a la programación Web y desde hace algunos años también a la móvil.

5 comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.