многоточие css на второй строке - PullRequest
168 голосов
/ 11 марта 2011

CSS text-overflow: ellipsis во второй строке, это возможно? Я не могу найти его в сети.

пример:

что я хочу, это так:

I hope someone could help me. I need 
an ellipsis on the second line of...

но что происходит, это:

I hope someone could help me. I ... 

Ответы [ 16 ]

93 голосов
/ 27 сентября 2013

Это должно работать в браузерах webkit :

overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
85 голосов
/ 07 октября 2011

Для работы text-overflow: ellipsis; требуется однострочная версия white-space (pre, nowrap и т. Д.).Это означает, что текст никогда не достигнет второй строки.

Ergo.Невозможно в чистом CSS.

Мой источник, когда я искал ту же самую вещь сейчас: http://www.quirksmode.org/css/textoverflow.html (Quirksmode ftw!)

EDIT Если хорошие боги CSS будут реализовывать http://www.w3.org/TR/css-overflow-3/#max-lines, мы можем использовать это в чистом CSS, используя fragments (новый) и max-lines (новый).Также немного больше информации на http://css -tricks.com / line-fixin /

РЕДАКТИРОВАТЬ 2 WebKit / Blink имеет line-clamp: -webkit-line-clamp: 2 поместит многоточие на 2-ю строку.

32 голосов
/ 15 января 2013

Как уже отвечали другие, чистого решения CSS не существует.Существует плагин jQuery , который очень прост в использовании, он называется dotdotdot .Он использует ширину и высоту контейнера для вычисления необходимости усечения и добавления многоточия.

$("#multilinedElement").dotdotdot();

Вот jsFiddle .

27 голосов
/ 29 октября 2015

Я обнаружил, что ответа Скипа было недостаточно, и ему тоже нужен стиль overflow:

overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
display: -webkit-box;
-webkit-box-orient: vertical;
13 голосов
/ 29 октября 2014

, если кто-то использует SASS / SCSS и натыкается на этот вопрос - возможно, этот миксин мог бы помочь:

@mixin line-clamp($numLines : 1, $lineHeight: 1.412) {
  overflow: hidden;
  text-overflow: -o-ellipsis-lastline;
  text-overflow: ellipsis;
  display: block;
  /* autoprefixer: off */
  display: -webkit-box;
  -webkit-line-clamp: $numLines;
  -webkit-box-orient: vertical;
  max-height: $numLines * $lineHeight + unquote('em');
}

это только добавляет многоточие в браузеры webkit.отдых просто обрезает.

10 голосов
/ 13 февраля 2012

Какой позор, что вы не можете заставить его работать над двумя строками!Было бы здорово, если бы элемент был отображаемым блоком и имел высоту 2em или что-то еще, а при переполнении текста показывался бы многоточие!

Для одного вкладыша вы можете использовать:

.show-ellipsis {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

Для нескольких строк, возможно, вы могли бы использовать Polyfill, такой как автоэллипсис jQuery, который находится на github http://pvdspek.github.com/jquery.autoellipsis/

8 голосов
/ 09 мая 2012

Я не профессионал JS, но я нашел несколько способов сделать это.

HTML:

<p id="truncate">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi elementum consequat tortor et euismod. Nam commodo consequat libero vel lobortis. Morbi ac nisi at leo vehicula consectetur.</p>

Затем с помощью jQuery вы обрезаете его доопределенное количество символов, но оставьте последнее слово следующим образом:

// Truncate but leave last word
var myTag = $('#truncate').text();
if (myTag.length > 100) {
  var truncated = myTag.trim().substring(0, 100).split(" ").slice(0, -1).join(" ") + "…";
  $('#truncate').text(truncated);
}

Результат выглядит следующим образом:

Lorem ipsum dolor sit amet, consitteur adipiscing elit.Morbi
elementum consequat tortor et…

Или, вы можете просто обрезать его до определенного количества символов, например:

// Truncate to specific character
var myTag = $('#truncate').text();
if (myTag.length > 15) {
  var truncated = myTag.trim().substring(0, 100) + "…";
  $('#truncate').text(truncated);
}

Результат выглядит так:

Lorem Ipsum Dolor Sit Amet, Concetetur Adipiscing Elit.Морби
элементум, следствие, пытка и euismod…

Надежда, которая немного помогает.

Вот jsFiddle .

7 голосов
/ 28 мая 2018

Просто используйте линейный зажим для браузеров, которые его поддерживают (большинство современных браузеров), и отступите на 1 строку для старых.

  .text {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;


    @supports (-webkit-line-clamp: 2) {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: initial;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
    }
  }
6 голосов
/ 05 мая 2017

вот хороший пример в чистом CSS.

.container{
  width: 200px;
}
.block-with-text {
  overflow: hidden;
  position: relative; 
  line-height: 1.2em;
  max-height: 3.6em;
  text-align: justify;  
  margin-right: -1em;
  padding-right: 1em;
}
.block-with-text+.block-with-text{
  margin-top:10px;
}
.block-with-text:before {
  content: '...';
  position: absolute;
  right: 0;
  bottom: 0;
}
.block-with-text:after {
  content: '';
  position: absolute;
  right: 0;
  width: 1em;
  height: 1em;
  margin-top: 0.2em;
  background: white;
}
<div class="container">


<div class="block-with-text">
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
</div>

<div class="block-with-text">
Lorem Ipsum is simply dummy text of the printing and typesetting industry
</div>


<div class="block-with-text">
Lorem Ipsum is simply
</div>

</div>
6 голосов
/ 11 марта 2011

Ранее я использовал jQuery-конденс-плагин , который, похоже, может делать то, что вы хотите.Если нет, то есть различных плагинов , которые могут удовлетворить ваши потребности.

Редактировать: Сделал вам демо - обратите внимание, что я связал jquery.condense.js в демоверсии, которая делает магию, так что полная заслуга автора этого плагина:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...