Обрезать строку на основе ширины пикселей
Я пытаюсь сделать строку подходящей в определенной области (td
) без разрыва строки. Проблема в том, что она должна...
- При изменении размера
- Установить
N
виды разрешения
- Добавить
...
в конце, когда это необходимо (и не нужно, когда это не нужно)
- Примите изменения
font-size
, font-weight
и font-family
Основываясь на ответах на вопрос Новона, я сделал следующий код:
CSS (//Просто добавление некоторых стилей для разрыва строки)
.truncated { display:inline-block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
jQuery (//Найдите все td, содержащие элемент .truncated
. Получив реальную ширину (удалив содержимое и добавив его снова) в td
. Применяя, если необходимо, minWidth на td
)
jQuery('.truncated').closest('td').each(function() {
var text = jQuery(this).text();
var widthOriginal = jQuery(this).width();
var widthEmpty = jQuery(this).text('').width();
jQuery(this).text(text);
if(widthOriginal >= widthEmpty){
var width = (parseInt(widthEmpty) - 10) + 'px';
jQuery(this).css('maxWidth', width);
jQuery(this).text(text + '...');
}
});
результат (как и ожидалось из приведенного выше кода):
![result]()
но это должно быть:
![how it should be]()
Я думал, может быть, попытаюсь найти первый line
строки и удалить остальные, но не нашел способ сделать это (и это много "обходного пути" на мой вкус). Есть ли лучший способ сделать это?
Ответы
Ответ 1
Вы можете сделать это с помощью чистого CSS, см. ссылку для ссылки:
line clampin
Добавьте их в свой css:
.truncated {
display: -webkit-box;
-webkit-line-clamp: 1; // amount of line you want
-webkit-box-orient: vertical;
}
Или вы можете попробовать clamp.js
https://github.com/josephschmitt/Clamp.js
Ответ 2
Усечение однострочного текста может быть легко достигнуто с использованием свойства css text-overflow
, которое поддерживается всеми основными браузерами, включая IE с версии 6.
Дело в том, что только text-overflow
мало что делает. Он определяет только то, что произойдет , когда текст переполняется контейнером. Поэтому, чтобы увидеть результаты, сначала нужно сделать переполнение текста, заставив его в одну строку. Также важно установить свойство overflow
контейнера:
.truncated {
display: block;
white-space: nowrap; /* forces text to single line */
overflow: hidden;
text-overflow: ellipsis;
}
Пример jsFiddle: https://jsfiddle.net/x95a4913/
документация по переполнению текста: https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow
Ответ 3
text-overflow: ellipsis
кажется чистым решением CSS
http://www.w3schools.com/cssref/css3_pr_text-overflow.asp
Ответ 4
Оберните текст дважды, чтобы добиться этого:
<style type="text/css">
.relative_wrap {
height: 1em;
position: relative;
}
.absolute_wrap {
position: absolute;
left: 0px;
right: 0px;
bottom: 0px;
overflow: hidden;
text-overflow: ellipsis;
top: 0px;
white-space: nowrap;
}
</style>
<table>
<tbody>
<tr>
<td>
<div class="relative_wrap">
<div class="absolute_wrap">
LONG TEXT HERE
</div>
</div>
</td>
</tr>
</tbody>
</table>
Поскольку вы используете jQuery, это легко:
$('.truncated').wrap('<div class="relative_wrap"><div class="absolute_wrap"></div></div>');
Ответ 5
Если вы установите фиксированный формат таблицы и переполнение td
как hidden
, вы можете добавить эллипсис как float-right div
, когда ширина прокрутки td
больше его клиентской ширины.
Здесь CSS, который включает стили, чтобы предотвратить просачивание в таблице:
table {
table-layout:fixed;
white-space:nowrap;
width:500px;
border-spacing: 0px;
border-collapse: separate;
}
td {
overflow:hidden;
border:1px solid #ddd;
padding:0px;
}
.hellip {
padding-left:0.2em;
float:right;
background:white;
position:relative;
}
JQuery
$('td').each(function() {
if($(this)[0].scrollWidth > $(this).width()) {
$(this).prepend('<div class="hellip"">…</div>');
}
});
Демо на: http://jsfiddle.net/5h798ojf/3/