我知道这个答案很老,但我想我会分享一个类似的问题和解决方案,因为它非常相关。
我有一个响应式网站,其中有一些段落需要在 3 行后截断,并添加一个链接,该链接在单击时基本上会暴露剩余的文本,出于美学原因。
因此,我将所有文本放在手边,而不是在每次屏幕尺寸发生变化时刷新页面(这是响应式的目的),这一点至关重要。
无论如何,这是我优雅的解决方案:
/**
* @name - Ellipsify
* @desc - trims and adds ellipsis to element when element text height is greater than element height
* @param - [required] (string)identity - string containing jquery selector used to create object group (array) based on selector
* @function : _init - calculates each element and determines need for ellipsis, then truncates text as needed
*/
var Ellipsify = function(identity) {
if (identity) {
this.identity = identity;
this.group = $(this.identity);
if (this.group.length > 0) {
this._init();
}
}
};
Ellipsify.prototype = {
_init : function() {
var that = this;
that.group.each(function() {
if ($(this).children('.hidden').length > 0) {
$(this).children(':not(.hidden)').text($(this).children(':not(.hidden)').text().replace('...',' ') + $(this).children('.hidden').text());
$(this).children('.hidden').remove();
}
if ($(this).children().outerHeight() > $(this).innerHeight()) {
$(this).append('<span class="hidden"></span>');
while ($(this).children(':not(.hidden)').outerHeight() > $(this).innerHeight()) {
var paragraph = $(this).children(':not(.hidden)').text().replace('...', '');
var lastword = paragraph.substring(paragraph.lastIndexOf(' '));
$(this).children(':not(.hidden)').text(paragraph.substring(0, paragraph.lastIndexOf(' ')) + '...');
$(this).children('.hidden').text(lastword + $(this).children('.hidden').text());
}
}
});
},
};
HTML 如下所示:
<p><span>Big paragraph of text goes here.</span></p>
CSS很简单:
p {
font-size:1em;
line-height:1.5em;
height:4.5em;
width:100%;
overflow:hidden;
}
.hidden {
display:none;
}