¿Cómo puedo mostrar puntos ("...") en un lapso con desbordamiento oculto?

166

Mi CSS:

#content_right_head span
{
  display:inline-block;
  width:180px;
  overflow:hidden !important;
}

Ahora muestra contenido contenido

Pero quiero mostrar como contenido de contenido ...

Necesito mostrar puntos después del contenido. Los contenidos provienen dinámicamente de la base de datos.

Prashobh
fuente

Respuestas:

382

Para esto puedes usar la text-overflow: ellipsis;propiedad. Escribe así

span {
    display: inline-block;
    width: 180px;
    white-space: nowrap;
    overflow: hidden !important;
    text-overflow: ellipsis;
}
<span>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book</span>

JSFiddle

sandeep
fuente
44
Sugeriría cambiar el 'ancho' a 'ancho máximo'
Amir Mog
44
¿Qué pasa con los diseños receptivos? Mi ancho no es fijo, ni el ancho máximo.
Jp_
1
¿Cómo puedo expandir esto ahora usando onclick?
Ankush Rishi
2
Esto no funciona en IE11 y Firefox. ¿Alguna gran solución para esto?
techie_questie
19

Si está utilizando text-overflow: ellipsis, el navegador mostrará el contenido que sea posible dentro de ese contenedor. Pero si desea especificar el número de letras antes de los puntos o eliminar algunos contenidos y agregar puntos, puede usar la función siguiente.

function add3Dots(string, limit)
{
  var dots = "...";
  if(string.length > limit)
  {
    // you can also use substr instead of substring
    string = string.substring(0,limit) + dots;
  }

    return string;
}

llamar como

add3Dots("Hello World",9);

salidas

Hello Wor...

Véalo en acción aquí

function add3Dots(string, limit)
{
  var dots = "...";
  if(string.length > limit)
  {
    // you can also use substr instead of substring
    string = string.substring(0,limit) + dots;
  }

    return string;
}



console.log(add3Dots("Hello, how are you doing today?", 10));

kiranvj
fuente
14

Creo que estás buscando text-overflow: ellipsisen combinación conwhite-space: nowrap

Vea algunos detalles más aquí

Ando
fuente
12

Prueba esto,

.truncate {
    display:inline-block;
    width:180px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

agregue .truncateclase a su elemento.


EDITAR ,

La solución anterior no funciona en todos los navegadores. puede intentar seguir el complemento jQuery con soporte de navegador cruzado.

(function ($) {
    $.fn.ellipsis = function () {
        return this.eachAsync({
            delay: 100,
            bulk: 0,
            loop: function (index) {
                var el = $(this);

                if (el.data("fullText") !== undefined) {
                    el.html(el.data("fullText"));
                } else {
                    el.data("fullText", el.html());
                }

                if (el.css("overflow") == "hidden") {
                    var text = el.html();
                    var t = $(this.cloneNode(true))
                                        .hide()
                                        .css('position', 'absolute')
                                        .css('overflow', 'visible')
                                        .width('auto')
                                        .height(el.height())
                                        ;

                    el.after(t);

                    function width() { return t.width() > el.width(); };

                    var func = width;
                    while (text.length > 0 && width()) {
                        text = text.substr(0, text.length - text.length * 25 / 100);
                        t.html(text + "...");
                    }

                    el.html(t.html());
                    t.remove();
                }
            }
        });
    };
})(jQuery);

como llamar,

$("#content_right_head span").ellipsis();
Chamika Sandamal
fuente
La widthpropiedad puede ser 100%. Creo que es mejor así: .truncate { display:inline-block; width:100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
mahdi
4

Bueno, el "desbordamiento de texto: puntos suspensivos" funcionó para mí, pero solo si mi límite se basaba en 'ancho', necesitaba una solución que se pueda aplicar en las líneas (en la 'altura' en lugar del 'ancho') así que Hice este script:

function listLimit (elm, line){
    var maxHeight = parseInt(elm.css('line-Height'))*line;

    while(elm.height() > maxHeight){
        var text = elm.text();
        elm.text(text.substring(0,text.length-10)).text(elm.text()+'...');
    }
}

Y cuando debo, por ejemplo, que mi h3 tiene solo 2 líneas que hago:

$('h3').each(function(){
   listLimit ($(this), 2)
})

No sé si esa fue la mejor práctica para las necesidades de rendimiento, pero funcionó para mí.

Luís Gustavo Batista
fuente
2

Puedes probar esto:

.classname{
    width:250px;
    overflow:hidden;
    text-overflow:ellipsis;
}

Kanu Sharma
fuente
0
 var tooLong = document.getElementById("longText").value;
    if (tooLong.length() > 18){
        $('#longText').css('text-overflow', 'ellipsis');
    }
Lina
fuente
-3

Muchas gracias @sandeep por su respuesta.

Mi problema fue que quiero mostrar / ocultar texto en el lapso con un clic del mouse. Entonces, de manera predeterminada, se muestra texto corto con puntos y al hacer clic en texto largo aparece. Al hacer clic nuevamente, se oculta ese texto largo y se muestra uno corto nuevamente.

Una cosa bastante fácil de hacer: simplemente agregue / elimine la clase con desbordamiento de texto: puntos suspensivos.

HTML:

<span class="spanShortText cursorPointer"  onclick="fInventoryShippingReceiving.ShowHideTextOnSpan(this);">Some really long description here</span>

CSS (igual que @sandeep con .cursorPointer agregado)

.spanShortText {
  display: inline-block;
  width: 100px;
  white-space: nowrap;
  overflow: hidden !important;
  text-overflow: ellipsis;
}

.cursorPointer {
  cursor: pointer;
}

Parte JQuery: básicamente solo elimina / agrega la clase cSpanShortText.

  function ShowHideTextOnSpan(element) {
    var cSpanShortText = 'spanShortText';
    var $el = $(element);
    if ($el.hasClass(cSpanShortText)) {
      $el.removeClass(cSpanShortText)
    } else {
      $el.addClass(cSpanShortText);
    }
  }
FrenkyB
fuente