我一直在尝试,直到我成功地实现了接近这个的东西。但有几点需要注意:
It's not pure CSS; you have to add a few HTML elements. There's however no JavaScript required.
The ellipsis is right-aligned on the last line. This means that if your text isn't right-aligned or justified, there may be a noticable gap between the last visible word and the ellipsis (depending on the length of the first hidden word).
The space for the ellipsis is always reserved. This means that if the text fits in the box almost precisely, it may be unnecessarily truncated (the last word is hidden, although it technically wouldn't have to).
Your text needs to have a fixed background color, since we're using colored rectangles to hide the ellipsis in cases where it's not needed.
我还应该注意,文本将在单词边界处断开,而不是字符边界处断开。这是有意为之(因为我认为这对较长的文本更好),但因为它不同于text-overflow: ellipsis,所以我认为我应该提到它。
如果你可以接受这些警告,HTML看起来是这样的:
<div class="ellipsify">
<div class="pre-dots"></div>
<div class="dots">…</div>
<!-- your text here -->
<span class="hidedots1"></span>
<div class="hidedots2"></div>
</div>
这是相应的CSS,以一个150像素宽的盒子为例,在白色背景上有三行文本。它假设你有一个CSS重置或类似的设置,在必要的地方将边距和填充设置为零。
/* the wrapper */
.ellipsify {
font-size:12px;
line-height:18px;
height: 54px; /* 3x line height */
width: 150px;
overflow: hidden;
position: relative; /* so we're a positioning parent for the dot hiders */
background: white;
}
/* Used to push down .dots. Can't use absolute positioning, since that
would stop the floating. Can't use relative positioning, since that
would cause floating in the wrong (namely: original) place. Can't
change height of #dots, since it would have the full width, and
thus cause early wrapping on all lines. */
.pre-dots {
float: right;
height: 36px; /* 2x line height (one less than visible lines) */
}
.dots {
float: right; /* to make the text wrap around the dots */
clear: right; /* to push us below (not next to) .pre-dots */
}
/* hides the dots if the text has *exactly* 3 lines */
.hidedots1 {
background: white;
width: 150px;
height: 18px; /* line height */
position: absolute; /* otherwise, because of the width, it'll be wrapped */
}
/* hides the dots if the text has *less than* 3 lines */
.hidedots2 {
background: white;
width: 150px;
height: 54px; /* 3x line height, to ensure hiding even if empty */
position: absolute; /* ensures we're above the dots */
}
结果如下所示:
为了阐明它是如何工作的,下面是相同的图像,除了.hidedots1用红色突出显示,而.hidedots2用青色突出显示。当没有看不见的文本时,这些矩形隐藏了省略号:
在IE9, IE8(模拟),Chrome, Firefox, Safari和Opera中测试。IE7不支持。