Tengo una página web con un diseño elástico que cambia su ancho si la ventana del navegador cambia de tamaño.
En este diseño hay titulares ( h2
) que tendrán una longitud variable (en realidad son titulares de publicaciones de blog sobre los que no tengo control). Actualmente, si son más anchas que la ventana, se dividen en dos líneas.
¿Existe una solución elegante y probada (cross-browser), por ejemplo con jQuery, que acorta el HTML interno de esa etiqueta de título y agrega "..." si el texto fuera demasiado ancho para caber en una línea en la pantalla actual / ancho del contenedor?
Respuestas:
Tengo una solución que funciona en FF3, Safari e IE6 + con texto simple y multilínea
jquery.ellipsis.js
fuente
La siguiente solución CSS única para truncar texto en una sola línea funciona con todos los navegadores enumerados en http://www.caniuse.com a partir de la escritura, con la excepción de Firefox 6.0. Tenga en cuenta que JavaScript es totalmente innecesario a menos que necesite admitir el ajuste de texto multilínea o versiones anteriores de Firefox.
Si necesita soporte para versiones anteriores de Firefox, consulte mi respuesta sobre esta otra pregunta .
fuente
Construí este código usando otras publicaciones, con las siguientes mejoras:
display: block
al estilo, por lo que abarca el trabajoCSS:
jquery.ellipsis.js
fuente
Mi respuesta solo admite texto de una sola línea. Mira el comentario de gfullam a continuación para la bifurcación de varias líneas, parece bastante prometedor.
Reescribí el código de la primera respuesta varias veces, y creo que este debería ser el más rápido.
Primero encuentra una longitud de texto "Estimada" y luego agrega o elimina un carácter hasta que el ancho sea correcto.
La lógica que utiliza se muestra a continuación:
Después de encontrar una longitud de texto "estimada", los caracteres se agregan o eliminan hasta alcanzar el ancho deseado.
Estoy seguro de que necesita algunos ajustes, pero aquí está el código:
fuente
En caso de que terminen aquí en 2013, aquí hay un enfoque CSS puro que encontré aquí: http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
Funciona bien.
fuente
text-overflow
no funciona contextarea
elementos (a partir de 2015). Si necesita ayudatextarea
, puede lograrlo modificando la respuesta aceptada o utilizando esta bifurcación .Hice un plugin jQuery realmente genial para manejar todas las variedades de puntos suspensivos de texto, uno llamado ThreeDots @ http://tpgblog.com/threedots
Es mucho más flexible que los enfoques CSS, y admite comportamientos e interacciones mucho más avanzados y personalizables.
Disfrutar.
fuente
Un complemento jQuery más flexible que le permite mantener un elemento después de los puntos suspensivos (por ejemplo, un botón "leer más") y actualizar onWindowResize. También funciona alrededor del texto con marcado:
http://dotdotdot.frebsite.nl
fuente
El complemento trunk8 jQuery admite varias líneas y puede usar cualquier html, no solo caracteres de elipsis, para el sufijo de truncamiento: https://github.com/rviscomi/trunk8
Demostración aquí: http://jrvis.com/trunk8/
fuente
En realidad, hay una manera bastante sencilla de hacer esto en CSS aprovechando el hecho de que IE extiende esto con soporte no estándar y FF
:after
También puede hacer esto en JS si lo desea inspeccionando el ancho de desplazamiento del objetivo y comparándolo con el ancho de sus padres, pero en mi opinión, esto es menos robusto.
Editar: esto aparentemente está más desarrollado de lo que pensaba. El soporte CSS3 puede existir pronto, y algunas extensiones imperfectas están disponibles para que las pruebe.
Ese último es una buena lectura.
fuente
Había hecho algo similar para un cliente recientemente. Aquí hay una versión de lo que hice por ellos (ejemplo probado en todas las últimas versiones de navegador en Win Vista). No es perfecto en todos los ámbitos, pero podría modificarse con bastante facilidad.
Demostración: http://enobrev.info/ellipsis/
Código:
fuente
Bueno, una solución simple, que no agrega el "...", pero evita que el <h2> se rompa en dos líneas sería agregar este bit de css:
Pensé un poco más, y se me ocurrió esta solución, tienes que envolver el contenido textual de tu etiqueta h2 con otra etiqueta (por ejemplo, un lapso) (o alternativamente envolver los h2 con algo que tenga la altura dada) y luego puedes usar este tipo de javascript para filtrar las palabras innecesarias:
fuente
Aquí hay otra solución de JavaScript. Funciona muy bien y muy rápido.
https://github.com/dobiatowski/jQuery.FastEllipsis
Probado en Chrome, FF, IE en Windows y Mac.
fuente
Hay una solución para texto de varias líneas con CSS puro. Se llama
line-clamp
, pero solo funciona en los navegadores webkit. Sin embargo, hay una manera de imitar esto en todos los navegadores modernos (todo más reciente que IE8). Además, solo funcionará en fondos sólidos porque necesita una imagen de fondo para ocultar las últimas palabras de la última línea. Así es como va:Dado este html:
Aquí está el CSS:
ellipsis_bg.png es una imagen del mismo color de fondo, que tendría aproximadamente 100 píxeles de ancho y la misma altura que la altura de la línea.
No es muy bonito, ya que su texto puede estar cortado en el medio de una carta, pero puede ser útil en algunos casos.
Referencia: http://www.css-101.org/articles/line-clamp/line-clamp_for_non_webkit-based_browsers.php
fuente
Puntos suspensivos de CSS multilínea pura para contenido de texto:
Consulte el fragmento para ver un ejemplo en vivo.
fuente
Esto es similar al de Alex, pero lo hace en tiempo de registro en lugar de lineal, y toma un parámetro maxHeight.
fuente
Hay una solución jQuery simple de Devon Govett :
https://gist.github.com/digulla/5796047
fuente
Reescribí la función de Alex para usar en la biblioteca MooTools. Lo cambié un poco a salto de palabra en lugar de agregar puntos suspensivos en el medio de una palabra.
fuente
No pude encontrar un script que funcionara exactamente como lo quería, así como el mío para jQuery, bastantes opciones para configurar con más en camino :)
https://github.com/rmorse/AutoEllipsis
fuente
Sin embargo, me sorprendió un poco el comportamiento del CSS.
A menos que proporcione el ancho al control al que necesitaba unir los puntos suspensivos, no supuse mi causa. ¿Es el ancho una propiedad imprescindible para agregarse? Por favor, pon tus pensamientos.
fuente
HAGA LA ELIPSIS USANDO SOLO CSS
* Este código funciona en la mayoría de los navegadores actuales. Si tiene algún problema con Opera e IE (que probablemente no tendrá), agréguelos al estilo:
* Esta característica es parte de CSS3. Su sintaxis completa es:
fuente
Aquí hay una buena biblioteca de widgets / complementos que tiene puntos suspensivos incorporados: http://www.codeitbetter.co.uk/widgets/ellipsis/ Todo lo que necesita hacer es hacer referencia a la biblioteca y llamar a lo siguiente:
fuente
puede hacerlo mucho más fácil solo con css, por ejemplo: modo sass
y tienes puntos suspensivos;)
fuente
Al igual que @acSlater, no pude encontrar algo para lo que necesitaba, así que rodé el mío. Compartir en caso de que alguien más pueda usar:
Método: Uso: Código y enlace de demostración: https://gist.github.com/cemerson/10368014fuente
fuente