¿Hay alguna buena manera de truncar texto con HTML y CSS simples, de modo que el contenido dinámico pueda caber en un diseño de ancho y alto fijo?
He estado truncando el lado del servidor por el ancho lógico (es decir, un número de caracteres adivinado a ciegas), pero dado que una 'w' es más ancha que una 'i', esto tiende a ser subóptimo y también requiere que vuelva a adivinar ( y sigue ajustando) el número de caracteres para cada ancho fijo. Idealmente, el truncamiento ocurriría en el navegador, que conoce el ancho físico del texto renderizado.
Descubrí que IE tiene una text-overflow: ellipsis
propiedad que hace exactamente lo que quiero, pero necesito que sea un navegador cruzado. Esta propiedad parece ser (¿algo?) Estándar pero no es compatible con Firefox. He encontrado varias soluciones basadas en overflow: hidden
, pero no muestran puntos suspensivos (quiero que el usuario sepa que el contenido se truncó) o lo muestran todo el tiempo (incluso si el contenido no se truncó).
¿Alguien tiene una buena manera de ajustar el texto dinámico en un diseño fijo, o el truncamiento del lado del servidor por ancho lógico es tan bueno como voy a obtener por ahora?
Respuestas:
Actualización:
text-overflow: ellipsis
ahora es compatible a partir de Firefox 7 (lanzado el 27 de septiembre de 2011). ¡Hurra! Mi respuesta original sigue como un registro histórico.Justin Maxwell tiene una solución CSS de navegador cruzado. Sin embargo, viene con la desventaja de no permitir que el texto se seleccione en Firefox. Echa un vistazo a su publicación de invitado en el blog de Matt Snider para obtener todos los detalles sobre cómo funciona
Tenga en cuenta que esta técnica también impide actualizar el contenido del nodo en JavaScript utilizando la
innerHTML
propiedad en Firefox. Vea el final de esta publicación para una solución alternativa.CSS
ellipsis.xml
contenido del archivoActualización del contenido del nodo
Para actualizar el contenido de un nodo de una manera que funcione en Firefox, use lo siguiente:
Vea la publicación de Matt Snider para obtener una explicación de cómo funciona esto .
fuente
text-overflow
no indica la compatibilidad conoption
elementos (consulte la sección Se aplica a en msdn.microsoft.com/en-us/library/ms531174(VS.85).aspx ).Marzo de 2014: truncamiento de cadenas largas con CSS: una nueva respuesta centrada en el soporte del navegador
Demostración en http://jsbin.com/leyukama/1/ (uso jsbin porque es compatible con la versión anterior de IE).
La propiedad CSS -ms-text-overflow no es necesaria: es sinónimo de la propiedad CSS text-overflow, pero las versiones de IE del 6 al 11 ya admiten la propiedad CSS text-overflow.
Probado con éxito (en Browserstack.com) en el sistema operativo Windows, para navegadores web:
Firefox: como señaló Simon Lieschke (en otra respuesta), Firefox solo admite la propiedad CSS de desbordamiento de texto desde Firefox 7 en adelante (lanzado el 27 de septiembre de 2011).
Verifiqué este comportamiento en Firefox 3.0 y Firefox 6.0 (no se admite el desbordamiento de texto).
Se necesitarían algunas pruebas adicionales en los navegadores web de Mac OS.
Nota: es posible que desee mostrar una información sobre herramientas en el mouse cuando se aplica una elipsis, esto se puede hacer a través de javascript, consulte estas preguntas: Detección de puntos suspensivos de HTML con desbordamiento de texto y HTML: ¿cómo puedo mostrar información sobre herramientas SOLAMENTE cuando se activa la elipsis?
Recursos:
fuente
Si está de acuerdo con una solución de JavaScript, hay un complemento jQuery para hacer esto de manera cruzada en el navegador: consulte http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for -firefox-via-jquery /
fuente
OK, Firefox 7 implementado
text-overflow: ellipsis
tan bien comotext-overflow: "string"
. El lanzamiento final está previsto para el 27/09/2011.fuente
Otra solución al problema podría ser el siguiente conjunto de reglas CSS:
El único inconveniente con el CSS anterior es que agregaría el "..." independientemente de si el texto desborda el contenedor o no. Aún así, si tiene un caso en el que tiene un montón de elementos y está seguro de que el contenido se desbordará, este sería un conjunto de reglas más simple.
Mis dos centavos. Felicitaciones a la técnica original de Justin Maxwell
fuente
position: absolute; right: 0;
(y no olvideposition: relative
el elemento real para que funcione). Sin embargo, se superpondrá con el texto, por lo que es posible que también desee agregar un color de fondo.