多行省略

一个多行省略需求

文字默认多行展示,当超过n行后,在第n行最后显示...更多,原有第三行...更多处的文字自动隐藏

简单有效line-clamp

首先的反应是-webkit-line-clamp,当只显示省略号,且在webkit内核的时候非常完美,css代码也相对容易理解:

.line-clamp {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
}

经典总结

然而当要增加一个更多链接时就变得棘手了,-webkit-line-clamp是webkit的私有属性,且无法自定义省略时的...css-tricks里进行了经典总结,里面提供了六种方法(哇!),来筛选一下:

getRowRects方案

计算行数

function getRowRects(element) {
    var rects = [],
        clientRects = element.getClientRects(),
        len = clientRects.length,
        clientRect, top, rectsLen, rect, i;

    for(i=0; i<len; i++) {
        has = false;
        rectsLen = rects.length;
        clientRect = clientRects[i];
        top = clientRect.top;
        while(rectsLen--) {
            rect = rects[rectsLen];
            if (rect.top == top) {
                has = true;
                break;
            }
        }
        if(has) {
            rect.right = rect.right > clientRect.right ? rect.right : clientRect.right;
            rect.width = rect.right - rect.left;
        }
        else {
            rects.push({
                top: clientRect.top,
                right: clientRect.right,
                bottom: clientRect.bottom,
                left: clientRect.left,
                width: clientRect.width,
                height: clientRect.height
            });
        }
    }
    return rects;
}

下挤文字

得到了行数也就得到了是否显示...更多的控制权,再看显示更多问题。直接遮盖会导致遮盖不全,达到挤出文字的效果就该浮动了。只要设定...更多浮动到指定位置即可。利用一个右浮动元素占位,将...更多右浮动同时清除右浮动即可定位。得到示例

结合应用