Как я могу показать точки («…») в промежутке со скрытым переполнением?

166

Мой CSS:

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

Теперь он показывает контент

Но я хочу показать контент как контент ...

Мне нужно показать точки после содержимого. Содержимое поступает динамически из базы данных.

Prashobh
источник

Ответы:

382

Для этого вы можете использовать text-overflow: ellipsis;собственность. Напишите так

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

Сандип
источник
4
Я бы предложил изменить 'width' на 'max-width'
Амир Мог
4
А как насчет адаптивных макетов? Моя ширина не фиксирована, ни максимальная ширина.
Jp_
1
как я могу расширить это сейчас, используя onclick?
Анкуш Риши
2
Это не работает в IE11 и Firefox. Любое отличное решение для этого?
techie_questie
19

Если вы используете text-overflow: ellipsis, браузер покажет содержимое того содержимого, которое возможно в этом контейнере. Но если вы хотите указать количество букв перед точками или удалить некоторое содержимое и добавить точки, вы можете использовать функцию ниже.

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

называть как

add3Dots("Hello World",9);

выходы

Hello Wor...

Смотрите это в действии здесь

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
источник
14

Я думаю, что вы ищете text-overflow: ellipsisв сочетании сwhite-space: nowrap

Смотрите более подробную информацию здесь

Ando
источник
12

Попробуй это,

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

добавить .truncateкласс к вашему элементу.


РЕДАКТИРОВАТЬ ,

Выше решение не работает во всех браузерах. Вы можете попробовать следующий плагин jQuery с поддержкой нескольких браузеров.

(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);

как позвонить,

$("#content_right_head span").ellipsis();
Чамика Сандамал
источник
widthсвойство может быть 100%. Я думаю , что лучше так: .truncate { display:inline-block; width:100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
мессия
4

Ну, «text-overflow: ellipsis» работал для меня, но просто, если мой лимит был основан на «ширине», я нуждался в решении, которое можно применить к линиям (на «высоте» вместо «ширины»), так Я сделал этот скрипт:

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()+'...');
    }
}

И когда я должен, например, чтобы у моего h3 было только 2 строки, я делаю:

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

Я не знаю, была ли это лучшая практика для нужд производительности, но сработала для меня.

Луис Густаво Батиста
источник
2

Вы можете попробовать это:

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

Кану Шарма
источник
0
 var tooLong = document.getElementById("longText").value;
    if (tooLong.length() > 18){
        $('#longText').css('text-overflow', 'ellipsis');
    }
Lina
источник
-3

Большое спасибо @sandeep за его ответ.

Моя проблема была в том, что я хочу показать / скрыть текст на промежутке с помощью мыши. Таким образом, по умолчанию отображается короткий текст с точками, и при нажатии появляется длинный текст. Повторное нажатие скрывает этот длинный текст и снова показывает короткий.

Это довольно просто сделать: просто добавьте / удалите класс с переполнением текста: многоточие.

HTML:

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

CSS (так же, как @sandeep с добавленным .cursorPointer)

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

.cursorPointer {
  cursor: pointer;
}

Часть JQuery - в основном просто удаляет / добавляет класс cSpanShortText.

  function ShowHideTextOnSpan(element) {
    var cSpanShortText = 'spanShortText';
    var $el = $(element);
    if ($el.hasClass(cSpanShortText)) {
      $el.removeClass(cSpanShortText)
    } else {
      $el.addClass(cSpanShortText);
    }
  }
FrenkyB
источник