仅使用 javascript 完美计算所有因子的算法过于复杂。
css3有line-clamp
但这仅适用于现代浏览器。
p{
margin:20px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
演示
http://jsfiddle.net/MM29r/
这允许您在添加 3 个点之前设置要显示的行数。
现在你想要 300px...所以:
var p=document.getElementsByTagName('p')[0],
lineheight=parseInt(window.getComputedStyle(p).getPropertyValue("line-height"));
var lines=Math.floor(300/lineheight);
p.style['-webkit-line-clamp']=lines;
所以这会给你一个小于或等于 300 像素的元素
演示
http://jsfiddle.net/MM29r/1/
http://jsfiddle.net/MM29r/2/
需要的值:line-height
现在,如果您想让框的高度正好为 300 像素,只需在段落中添加边距或填充。但这取决于您的偏好。
如果您有任何问题,尽管问。
注意
每个通过计算单词在末尾添加 3 个点的 js 函数都将占用大量资源以应用于现实世界的网站。
更好的方法是计算每个段落一次,并将钳制结果添加到数据库或将其存储在静态网站中。
但是每个浏览器都会以不同的方式显示字体。
编辑
这是一种显示部分内容的不同方式。
使用最大高度 & -webkit-column-count
https://stackoverflow.com/a/20691677/2450730
演示
http://jsfiddle.net/HNF3d/10/
支持度略高于line-clamp,你可以展示全部内容。
EDIT2
底部的图像褪色。
p{
width:300px;
max-height:300px;
overflow:hidden;
}
p:before{
content:"";
display:block;
position:absolute;
margin-top:240px;
background:-webkit-linear-gradient(top,rgba(255,255,255,0) 0%,rgba(255,255,255,1) 80%);
height:60px;
width:300px;
}
http://jsfiddle.net/MM29r/9/
EDIT3
褪色图像旧浏览器(使用真实图像链接,而不是 base64)
http://jsfiddle.net/MM29r/13/