Como posso mostrar pontos (“…”) em um intervalo com estouro oculto?

166

Meu CSS:

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

Agora está mostrando o conteúdo

Mas eu quero mostrar como conteúdo de conteúdo ...

Eu preciso mostrar pontos após o conteúdo. O conteúdo vem dinamicamente do banco de dados.

Prashobh
fonte

Respostas:

382

Para isso, você pode usar a text-overflow: ellipsis;propriedade Escreva assim

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
fonte
4
Sugiro mudar o 'width' para 'max-width'
Amir Mog
4
E os layouts responsivos? Minha largura não é fixa, nem a largura máxima.
Jp_
1
como posso expandir isso agora usando o onclick?
Ankush Rishi
2
Isso não funciona no IE11 e no Firefox. Alguma ótima solução para isso?
TechTools #
19

Se você estiver usando reticências de excesso de texto:, o navegador mostrará o conteúdo o máximo possível dentro desse contêiner. Mas se você quiser especificar o número de letras antes dos pontos ou retirar algum conteúdo e adicionar pontos, poderá usar a função abaixo.

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;
}

ligue como

add3Dots("Hello World",9);

saídas

Hello Wor...

Veja em ação aqui

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
fonte
14

Eu acho que você está procurando text-overflow: ellipsis em combinação comwhite-space: nowrap

Veja mais alguns detalhes aqui

Ando
fonte
12

Tente isso,

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

adicione .truncateclasse ao seu elemento.


EDITAR ,

A solução acima não está funcionando em todos os navegadores. você pode tentar seguir o plugin jQuery com suporte a vários navegadores.

(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 ligar,

$("#content_right_head span").ellipsis();
Chamika Sandamal
fonte
a widthpropriedade pode ser 100%. Eu acho que é melhor assim: .truncate { display:inline-block; width:100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
mahdi
4

Bem, o "overflow de texto: reticências" funcionou para mim, mas apenas se meu limite fosse baseado em 'width', eu precisava de uma solução que pudesse ser aplicada em linhas (na 'altura' em vez da 'largura'), então Eu fiz 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()+'...');
    }
}

E quando devo, por exemplo, que meu h3 tenha apenas 2 linhas, eu faço:

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

Não sei se essa era a melhor prática para as necessidades de desempenho, mas funcionou para mim.

Luís Gustavo Batista
fonte
2

Você pode tentar isso:

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

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

Muito obrigado @sandeep por sua resposta.

Meu problema era que eu queria mostrar / ocultar o texto no intervalo com o clique do mouse. Assim, por padrão, o texto curto com pontos é mostrado e, ao clicar em texto longo, é exibido. Clicar novamente oculta o texto longo e mostra um texto breve novamente.

Uma coisa bem fácil de fazer: basta adicionar / remover classe com reticências de texto em excesso:

HTML:

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

CSS (o mesmo que @sandeep com .cursorPointer adicionado)

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

.cursorPointer {
  cursor: pointer;
}

Parte JQuery - basicamente apenas remove / adiciona a classe cSpanShortText.

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