1. 程式人生 > >超詳細的文本溢出添加省略號。。。。

超詳細的文本溢出添加省略號。。。。

有一個 使用 增加 元素 發生 會有 如何 follow 分享

前言

  需求:富文本溢出隱藏,超出用省略號表示。

  博主:文本溢出倒是做過不少,這富文本溢出什麽鬼?老夫今天就好好研究一下這個省略號。

  ps:富文本溢出,不也是文本溢出麽?空格處理?多段落?

正文

  1.css寫法

  1.1最簡單的省略號(單行,溢出隱藏)

  

p{
overflow: hidden; text
-overflow:ellipsis; white-space: nowrap;

}

  效果:

技術分享圖片

1.2 多行省略號

p{
display: -webkit-box; -webkit-box-orient: vertical;
/*設置省略號在容器第四行文本後*/
-webkit-line-clamp: 4; 
overflow: hidden;
}

效果如下:

技術分享圖片

局限性:

  使用webkit的css擴展屬性(webkit是私有屬性)-webkit-line-clamp

  因使用了WebKit的CSS擴展屬性,該方法適用於WebKit瀏覽器及移動端

  -webkit-line-clamp用來限制在一個塊元素顯示的文本的行數。限定了在第幾行後面增加省略號。超出必須隱藏。

  將height設置為line-height的整數倍,防止超出的文字露出。

1.3多行省略號進階版:

p{
position:relative;
line
-height:1.4em; /*設置容器高度為3倍行高就是顯示3行*/ height:4.2em; overflow:hidden; } p::after{ content:‘...‘; font-weight:bold; position:absolute; bottom:0; right:0; padding:0 20px 1px 35px; background:#fff;
/*可加可不加,就是在省略號之前加模糊,效果圖為沒加*/
background: -webkit-linear-gradient(left, transparent, #fff 55%); background: -o-linear-gradient(right, transparent, #fff 55%);
background: -moz-linear-gradient(right, transparent, #fff 55%); background: linear-gradient(to right, transparent, #fff 55%);
}

效果:

技術分享圖片

原理:

  在右下角生產一個表示省略號的偽元素,絕對定位到指定寬高的容器右下角,實現多行溢出點點點。

  適用範圍廣泛,多瀏覽器兼容,不過不可表示富文本溢出

2.js實現超出文本省略號

  方法一:多瀏覽器兼容,可表示富文本的文本溢出

  2.1.clientHeight、scrollHeight

  首先熟系入幾個屬性:ScrollTop、ScrollHeight、ClientHeight、OffsetHeight

  想搞懂這幾個的請移步:https://github.com/iuap-design/blog/issues/38

  最後附上這些屬性的詳細解釋的文檔:

  • clientHeight
  • offsetHeight
  • offsetTop
  • scrollHeight
  • scrollTop

 其實我們就用到兩個,clientHeight、scrollHeight,哈哈,想不到吧。

  clientHeight你可以簡單的理解為元素的總的高度,當然也包括overflow樣式屬性導致的視圖中不可見內容

  scrollHeight為元素內部的高度(單位像素),包含內邊距,但不包括水平滾動條、邊框和外邊距。不包括overflow樣式屬性導致的視圖中不可見內容

  2.2 代碼

<div id="aboutUs-content">在前端開發中,有一個非常好用的工具,Visual Studio Code,簡稱VS code。
    都不用我安利VS code,大家就會乖乖的去用,無數個大言不慚的攻城獅,都被VS code比德芙還絲滑的強大功能所折服。
    我是來給大家安利插件的,想做個比較全面的插件集合給大家。網上的我也看過一些,但是都比較零散,時間也久了一些,我結合最近的情況,總結一下
造福大家,才是我想做的。手動比心?。</div>

//js代碼,獲取元素的clientHeight、scrollHeight,當clientHeight < scrollHeight時,發生了溢出,
 let clientHeight = document.getElementById(‘aboutUs-content‘).clientHeight 
let scrollHeight
= document.getElementById(‘aboutUs-content‘).scrollHeight
console.log(clientHeight)
console.log(scrollHeight)

if (clientHeight < scrollHeight) {
  console.log(
‘發生了文字溢出‘)
/*我們可以在這裏,為元素後面添加省略號,或者用vue項目的v-if顯示出省略號*/
}

方法二,使用插件

1. Clamp.js

var module = document.getElementById("clamp-this-module");
$clamp(module, {clamp: 3});

2. jQuery.dotdotdot

$(document).ready(function() {
    $("#wrapper").dotdotdot({
        //    configuration goes here
    });
});

方法三:其他大神的做法:

  多行溢出隱藏顯示省略號功能的JS實現

  javascript超過容器後顯示省略號效果的方法(兼容一行或者多行)

結尾

  富文本溢出是一個坑,它裏面有時會有多個段落等等。最好用js的方法。兼容多瀏覽器。

  看到這裏的你,有沒有更好的辦法解決富文本溢出呢?假如富文本中有圖片,需要判斷富文本只有文字溢出時添加省略號,這又如何是好?

技術分享圖片

歡迎大家關註公眾號,不定時幹貨,只做有價值的輸出

作者:Dawnzhang
出處:https://www.cnblogs.com/clwydjgs/p/10311768.html
版權:本文版權歸作者
轉載:歡迎轉載,但未經作者同意,必須保留此段聲明;

超詳細的文本溢出添加省略號。。。。