¿Es posible limitar la longitud de un texto a "n" líneas usando CSS (o cortarlo cuando se desborda verticalmente)?
text-overflow: ellipsis;
solo funciona para texto de 1 línea.
texto original:
Ultrices natoque mus mattis, aliquam, cras en pellentesque
tincidunt elit purus lectus, vel ut aliquet, elementum nunc
nunc rhoncus placerat urna! Siéntate est sed! Ut penatibus turpis
mus tincidunt! Dapibus sed aenean, magna sagittis, lorem velit
salida deseada (2 líneas):
Ultrices natoque mus mattis, aliquam, cras en pellentesque
tincidunt elit purus lectus, vel ut aliquet, elementum ...
Respuestas:
Hay una manera de hacerlo usando la sintaxis no oficial de abrazadera de línea , y comenzando con Firefox 68, funciona en todos los principales navegadores.
A menos que te preocupes por los usuarios de IE, no hay necesidad de hacer
line-height
ymax-height
retroceder.fuente
-webkit-box-orient: vertical;
estar oculto al compilar scss, intente esto/* autoprefixer: ignore next */ -webkit-box-orient: vertical;
Lo que puedes hacer es lo siguiente:
donde
max-height:
=line-height:
×<number-of-lines>
enem
.fuente
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
para que aparezcan los puntos suspensivos. Pero esto solo funcionará en Chrome. Para una solución que también funcione en Firefox, mira aquí: stackoverflow.com/a/20595073/1884158 Y aquí hay un tutorial útil sobre el tema: css-tricks.com/line-clampinSolución de trabajo entre navegadores
Este problema nos ha estado afectando a todos por años.
Para ayudar en todos los casos, he presentado el enfoque solo CSS y un enfoque jQuery en caso de que las advertencias css sean un problema.
Aquí hay una solución de CSS que se me ocurrió que funciona en todas las circunstancias, con algunas advertencias menores.
Los conceptos básicos son simples, oculta el desbordamiento del tramo y establece la altura máxima en función de la altura de la línea como lo sugiere Eugene Xa.
Luego hay una pseudo clase después del div que contiene que coloca bien los puntos suspensivos.
Advertencias
Esta solución siempre colocará los puntos suspensivos, independientemente de si es necesario.
Si la última línea termina con una oración final, terminarás con cuatro puntos ...
Deberá estar contento con la alineación de texto justificada.
Los puntos suspensivos estarán a la derecha del texto, que puede verse descuidado.
Código + Fragmento
jsfiddle
Enfoque jQuery
En mi opinión, esta es la mejor solución, pero no todos pueden usar JS. Básicamente, jQuery verificará cualquier elemento .text, y si hay más caracteres que el valor máximo predeterminado var, cortará el resto y agregará puntos suspensivos.
No hay advertencias para este enfoque, sin embargo, este ejemplo de código solo pretende demostrar la idea básica: no usaría esto en producción sin mejorarlo por dos razones:
1) Reescribirá el html interno de .text elems. si es necesario o no 2) No hace ninguna prueba para verificar que el html interno no tenga elementos anidados, por lo que confía mucho en el autor para usar el .text correctamente.
Editado
Gracias por la captura @markzzz
Fragmento de código
jsfiddle
fuente
Por lo que puedo ver, esto sería posible solo usando
height: (some em value); overflow: hidden
e incluso entonces no tendría la fantasía...
al final.Si esa no es una opción, creo que es imposible sin algún preprocesamiento del lado del servidor (difícil porque el flujo de texto es imposible de predecir de manera confiable) o jQuery (posible pero probablemente complicado).
fuente
.mytext
utilizando jQuery, averiguar si tiene más contenido del que es visible y agregar uno...
manualmente. De esa manera, eres compatible con clientes sin JS, y los clientes con JS pueden tener la decoración. Quizás valga la pena una pregunta separada para que un jQuery Guru responda; podría ser posible hacerlo con relativa facilidadLa solución de este hilo es usar el plugin jquery dotdotdot . No es una solución CSS, pero le ofrece muchas opciones para enlaces "leer más", cambio de tamaño dinámico, etc.
fuente
La siguiente clase CSS me ayudó a obtener puntos suspensivos de dos líneas.
fuente
Actualmente no puedes, pero en el futuro podrás usarlo
text-overflow:ellipis-lastline
. Actualmente está disponible con el prefijo de proveedor en Opera 10.60+: ejemplofuente
Tengo una solución que funciona bien, pero en lugar de puntos suspensivos, usa un gradiente. Funciona cuando tiene texto dinámico, por lo que no sabe si será lo suficientemente largo como para necesitar una elipse. Las ventajas son que no tiene que hacer ningún cálculo de JavaScript y funciona para contenedores de ancho variable, incluidas las celdas de la tabla, y es un navegador cruzado. Utiliza un par de divs adicionales, pero es muy fácil de implementar.
Margen:
CSS:
entrada en el blog: http://salzerdesign.com/blog/?p=453
página de ejemplo: http://salzerdesign.com/test/fade.html
fuente
fuente
Realmente me gusta el bloqueo de línea, pero aún no hay soporte para Firefox ... así que voy con un cálculo matemático y simplemente oculto el desbordamiento
ahora digamos que desea eliminar y agregar esta clase a través de jQuery con un enlace, necesitará tener un píxel adicional para que la altura máxima sea de 63 px, esto se debe a que debe verificar cada vez si la altura es mayor que 62px, pero en el caso de 4 líneas obtendrá un falso verdadero, por lo que un píxel adicional lo solucionará y no creará ningún problema adicional
pegaré un coffeescript para esto solo para ser un ejemplo, usa un par de enlaces que están ocultos por defecto, con clases read-more y read-less, eliminará los que el desbordamiento no necesita y eliminará el cuerpo clases de desbordamiento
fuente
Si quieres enfocarte en cada
letter
uno, puedes hacer eso, me refiero a esta preguntaMostrar fragmento de código
Si quieres concentrarte en cada
word
uno, puedes hacerlo así + espacioMostrar fragmento de código
Si quieres enfocarte en cada
word
uno, puedes hacerlo así + sin espacioMostrar fragmento de código
fuente
Código de ejemplo básico, aprender a codificar es fácil. Verifique los comentarios de estilo CSS.
fuente
He estado buscando esto, pero luego me doy cuenta de que mi sitio web usa php. ¿Por qué no utilizar la función de recorte en la entrada de texto y jugar con la longitud máxima ...
Aquí hay una posible solución también para aquellos que usan php: http://ideone.com/PsTaI
fuente