Css эллипсис на второй строке
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 ...
Ответы
Ответ 1
Требование к 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-clampin/
EDIT 2 WebKit/Blink имеет line-clamp
: -webkit-line-clamp: 2
будет помещать многоточие во вторую строку.
Ответ 2
Это должно работать в браузерах webkit:
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
Ответ 3
Как уже ответили другие, чистое решение CSS не существует.
Существует jQuery плагин, который очень прост в использовании, он называется dotdotdot.
Он использует ширину и высоту контейнера для расчета, нужно ли усечь и добавить многоточие.
$("#multilinedElement").dotdotdot();
Вот jsFiddle.
Ответ 4
Я обнаружил, что ответа Skeep недостаточно и нужен стиль overflow
:
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
display: -webkit-box;
-webkit-box-orient: vertical;
Ответ 5
если кто-то использует SASS/SCSS и натыкается на этот вопрос - возможно, этот mixin может помочь:
@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. отдых просто отсекает его.
Ответ 6
Какой позор, что вы не можете заставить его работать над двумя строками! Было бы замечательно, если бы элемент был блоком отображения и имел высоту, установленную на 2 или что-то, и когда текст переполнен, он будет показывать многоточие!
Для одного лайнера вы можете использовать:
.show-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Для нескольких строк, возможно, вы можете использовать Polyfill, например, автотепсис jQuery, который находится на github http://pvdspek.github.com/jquery.autoellipsis/
Ответ 7
Я не профессионал 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, consectetur adipiscing elit. Morbi
elementum thenat 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, consectetur adipiscing elit. Morbi
elementum, следовательно, толерант и эвймод...
Надеюсь, что это поможет.
Вот jsFiddle.
Ответ 8
Просто используйте линейный зажим для браузеров, которые его поддерживают (большинство современных браузеров), и отступите на 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;
}
}
Ответ 9
Я раньше использовал jQuery-condense-plugin, который выглядит так, как будто он может делать то, что вы хотите. Если нет, есть различные плагины, которые могут удовлетворить ваши потребности.
Изменить: сделал вам демонстрацию - обратите внимание, что я связал jquery.condense. js на демо, которая делает магию, так что полная благодарность автору этого плагина:)
Ответ 10
Вот хороший пример в чистом 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 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>
Ответ 11
Это нестандартный CSS, который не рассматривается в текущей версии CSS (Firefox не поддерживает его). Вместо этого попробуйте использовать JavaScript.
Ответ 12
Я встречал эту проблему раньше, и нет чистого решения css
Вот почему я разработал небольшую библиотеку для решения этой проблемы (среди прочего). Библиотека предоставляет объекты для моделирования и выполнения текстового рендеринга на уровне букв. Вы можете, например, эмулировать переполнение текста: многоточие с произвольным лимитом (не обязательно одна строка)
Подробнее о http://www.samuelrossille.com/home/jstext.html для скриншота, учебника и ссылки на dowload.
Ответ 13
Если кто-то пытается заставить линейный зажим работать в flexbox, он немного сложнее - особенно после того, как вы испытываете пытки с действительно длинными словами. Единственными реальными отличиями в этом фрагменте кода являются min-width: 0;
в элементе flex, содержащем усеченный текст, и word-wrap: break-word;
. Совет для https://css-tricks.com/flexbox-truncated-text/ для понимания. Отказ от ответственности: это все еще вебкит, насколько я знаю.
.flex-parent {
display: flex;
}
.short-and-fixed {
width: 30px;
height: 30px;
background: lightgreen;
}
.long-and-truncated {
margin: 0 20px;
flex: 1;
min-width: 0;/* Important for long words! */
}
.long-and-truncated span {
display: inline;
-webkit-line-clamp: 3;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
word-wrap: break-word;/* Important for long words! */
}
<div class="flex-parent">
<div class="flex-child short-and-fixed">
</div>
<div class="flex-child long-and-truncated">
<span>asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd</span>
</div>
<div class="flex-child short-and-fixed">
</div>
</div>
Ответ 14
Чистый CSS способ обрезки многострочного текста с помощью многоточия
Отрегулируйте высоту текстового контейнера,
управляющая линия для разрыва -webkit-line-зажим: 2;
.block-ellipsis {
display: block;
display: -webkit-box;
max-width: 100%;
height: 30px;
margin: 0 auto;
font-size: 14px;
line-height: 1;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
Ответ 15
базовая база чистого css на -webkit-line-clamp, которая работает на webkit:
@-webkit-keyframes ellipsis {/*for test*/
0% { width: 622px }
50% { width: 311px }
100% { width: 622px }
}
.ellipsis {
max-height: 40px;/* h*n */
overflow: hidden;
background: #eee;
-webkit-animation: ellipsis ease 5s infinite;/*for test*/
/**
overflow: visible;
/**/
}
.ellipsis .content {
position: relative;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
font-size: 50px;/* w */
line-height: 20px;/* line-height h */
color: transparent;
-webkit-line-clamp: 2;/* max row number n */
vertical-align: top;
}
.ellipsis .text {
display: inline;
vertical-align: top;
font-size: 14px;
color: #000;
}
.ellipsis .overlay {
position: absolute;
top: 0;
left: 50%;
width: 100%;
height: 100%;
overflow: hidden;
/**
overflow: visible;
left: 0;
background: rgba(0,0,0,.5);
/**/
}
.ellipsis .overlay:before {
content: "";
display: block;
float: left;
width: 50%;
height: 100%;
/**
background: lightgreen;
/**/
}
.ellipsis .placeholder {
float: left;
width: 50%;
height: 40px;/* h*n */
/**
background: lightblue;
/**/
}
.ellipsis .more {
position: relative;
top: -20px;/* -h */
left: -50px;/* -w */
float: left;
color: #000;
width: 50px;/* width of the .more w */
height: 20px;/* h */
font-size: 14px;
/**
top: 0;
left: 0;
background: orange;
/**/
}
<div class='ellipsis'>
<div class='content'>
<div class='text'>text text text text text text text text text text text text text text text text text text text text text </div>
<div class='overlay'>
<div class='placeholder'></div>
<div class='more'>...more</div>
</div>
</div>
</div>
Ответ 16
Все ответы здесь неверны, в них отсутствует важная часть, высота
.container{
width:200px;
height:600px;
background:red
}
.title {
overflow: hidden;
line-height: 20px;
height: 40px;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
<div class="container">
<div class="title">this is a long text you cant cut it in half</div>
</div>
Ответ 17
Не очень простой способ сделать это. Используйте библиотеку Clamp.js.
$clamp(myHeader, {clamp: 3});
Ответ 18
Я нашел решение, но вам нужно знать грубую длину символа, которая будет вписываться в вашу текстовую область, а затем присоединиться к предыдущему пространству.
Как я это сделал:
- возьмем грубую длину символа (в данном случае 200) и перейдем к
функции вместе с текстом
- разделите пробелы, чтобы у вас была одна длинная строка
- используйте jQuery, чтобы получить срез первого "" пространства после вашего персонажа
Длина
- присоединяйтесь к оставшимся...
код:
truncate = function(description){
return description.split('').slice(0, description.lastIndexOf(" ",200)).join('') + "...";
}
вот скрипка - http://jsfiddle.net/GYsW6/1/