1. 程式人生 > >css實現多行文字截斷效果

css實現多行文字截斷效果

背景:在做響應式系統設計的時候,經常遇到需要對標題進行文字擷取的效果,如下圖所示:

一、先從單行文字截斷入手

      一般,實現單行文字截斷比較容易,使用文字溢位text-overflow:ellipsis;就可以實現單行文字截斷了,示例如下:

div {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

   在單行文字截斷的基礎上,我們模擬多行文字,使用overflow:hidden進行省略;

<style>
height:40px;
line-height:20px;
overflow:hidden;
</style>
<p>希望是一個好東西,希望是一個好東西,也許是最好的,好東西是不會,希望是一個好東西,也許是最好的,
好東西是不會,希望是一個好東西,也許是最好的,好東西是不會</p>

  此情況,適用於多行列數已知,使用overflow:hidden進行省略,但是無法達到自適應多行,進行自動省略,並且沒有省略號出現。

二、使用-webkit-line-clamp實現,適用於移動端

div {
    display: -webkit-box;
    overflow: hidden;
    -webkit-lin-clamp: 2;
    -webkit-box-orient: vertical;
    text-overflow: ellipsis;
}

 它需要和display、-webkit-box-orient和overflow結合使用:

 display:-webkit-box;必須結合的屬性,將物件作為彈性伸縮盒子模型顯示;

-webkit-box-orient;必須結合的屬性,設定或檢索伸縮盒物件的子元素的排列方式;

text-overflow:ellipsis;可選屬性,可以用來多行文字的情況下,用省略號“...”隱藏超出範圍的文字。

從效果上來看,它的優點有:

①響應式截斷,根據不同寬度做出調整;

②文字超出範圍才顯示省略號,否則不顯示省略號;

③遊覽器原生實現,所以省略號位置顯示的剛好。

使用場景:多用於移動端頁面,因為移動裝置遊覽器更多是基於webkit核心,除了相容性不好,實現截斷的效果不錯。(因為-webkit-line-clamp是一個不規範的屬性,只有webkit核心的遊覽器才支援這個屬性,像Firefox,IE遊覽器系統都不支援這個屬性,遊覽器相容性不好。)

三、定位元素實現多行文字截斷

這種方法就是設定相對定位的容器高度,用包含省略號(...)的元素模擬實現,實現方式如下:

p {
    position: relative;
    line-height: 18px;
    height: 36px;
    overflow: hidden;
}
p::after {
    content: "...";
    font-weight: bold;
    position: absolute;
    bottom: 0;
    right: 0;
    padding: 0 20px 1px 45px;
    /*為了展示更好的效果*/
    background: -webkit-gradient(linear,left top,right   top,from(rgba(255,255,255,0)),to(white),color-stop(50%,white));
    background: -moz-linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
    background: -o-linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
    background: -ms-linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
    background: linear-gradient(to right,rgba(255,255,255,0),white 50%,white);    
}

  通過偽元素絕對定位到行尾並遮住文字,再通過overflow:hidden隱藏多餘文字。

  從實現效果來看,它所具備的優點:

  ①相容性好,對各大主流遊覽器有較好的支援;

  ②響應式截斷,根據不同寬度做出調整。

  使用場景:文字內容較多,確定文字內容一定會超過容器的,那麼選擇這種方式不錯。