多行文本溢出省略ellipsis...css/scss/js方法全總結(jié)

多行顯示并在最后一行截斷文字?


text-overflow基本知識請看上篇文章:
text-overflow: ellipsis;什么時候可能不生效?

單行文字我們?yōu)榱四軌蚪財辔淖值坝猓褂昧?/p>

white-space: nowrap; // 強制文本在一行顯示

如果我確實有多行并在最后一行截斷文字顯示的需求呢?怎么實現(xiàn)以政?


方法1 -Webkit-line-clamp property

優(yōu)點: 最簡單的方法
缺點: 但是很遺憾银室,它不支持跨瀏覽器(在Firefox和Internet Explorer中不起作用)。

-webkit-line-clamp CSS 屬性 可以把 塊容器 中的內(nèi)容限制為指定的行數(shù).

它只有在 display 屬性設(shè)置成 -webkit-box 或者 -webkit-inline-box 并且 -webkit-box-orient 屬性設(shè)置成 vertical時才有效果

在大部分情況下,也需要設(shè)置 overflow 屬性為 hidden, 否則,里面的內(nèi)容不會被裁減,并且在內(nèi)容顯示為指定行數(shù)后還會顯示省略號(ellipsis ).

當他應用于錨(anchor)元素時,截取動作可以發(fā)生在文本中間,而不必在末尾.

使用方法:

.block-with-text {
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;  
}

方法2 Text-overflow: -o-ellipsis-lastline

從10.60版開始,Opera增加了在多行塊上剪切文本的功能挟纱。 老實說,我從未嘗試過黄琼,理論上只在Opera 10.6以后可以使用樊销,不建議使用。

方法3 JavaScript

#block-with-text { 
    height: 3.6em; 
}
function ellipsizeMultiLineText(id) {
    var element = document.getElementById(id);
    var words = element.innerHTML.split(' ');
    while(element.scrollHeight > element.offsetHeight) {
        words.pop();
        element.innerHTML = words.join(' ') + '...';
     }
}
ellipsizeMultiLineText('block-with-text');

方法4 純CSS解決 & 跨瀏覽器

優(yōu)點

  1. 純CSS
  2. 自適應 Responsive
  3. 改變大小后或者 字體加載事件后 不需要重新計算
  4. 跨瀏覽器

缺點

  1. 文字小于指定行數(shù)的時候脏款,我們需要一個背景色來掩蓋‘…’
  2. 我們需要空間來放‘…’, 而且如果父節(jié)點overflow: hidden 或者 overflow: auto 我們需要去掉style margin-right: -1em;.

實現(xiàn)方法

/* styles for '...' */ 
.block-with-text {
  /* hide text if it more than N lines  */
  overflow: hidden;
  /* for set '...' in absolute position */
  position: relative; 
  /* use this value to count block height */
  line-height: 1.2em;
  /* max-height = line-height (1.2) * lines max number (3) */
  max-height: 3.6em; 
  /* fix problem when last visible word doesn't adjoin right side  */
  text-align: justify;  
  /* place for '...' */
  margin-right: -1em;
  padding-right: 1em;
}
/* create the ... */
.block-with-text:before {
  /* points in the end */
  content: '...';
  /* absolute position */
  position: absolute;
  /* set position to right bottom corner of block */
  right: 0;
  bottom: 0;
}
/* hide ... if we have text, which is less than or equal to max lines */
.block-with-text:after {
  /* points in the end */
  content: '';
  /* absolute position */
  position: absolute;
  /* set position to right bottom corner of text */
  right: 0;
  /* set width and height */
  width: 1em;
  height: 1em;
  margin-top: 0.2em;
  /* bg color = bg color under block */
  background: white;
}

實現(xiàn)原理

  1. 大于3行時
    :before 的內(nèi)容"..." 在右下角, 因為文字被justify (text-align: justify;)不會看到文字與"..."之間有空隙:

去除CSS text-align: justify;會看到文字與"..."之間有空隙:

  1. 小于3行時
    看不到"..."


  2. 等于3行時
    看不到"..."


方法5 純SCSS解決 & 跨瀏覽器

因為方法4中的缺點,所以寫了個SCSS mixin裤园。這樣的話使用起來也更方便撤师,也有復用性。

CodePen multiline例子鏈接

<p class="block-with-text">1.大于三行例子:最簡單的方法拧揽,但是很遺憾剃盾,它不支持跨瀏覽器,在Firefox和Internet Explorer中不起作用. CSS屬性可以把塊容器中的內(nèi)容限制為指定的行數(shù).它只有在 display屬性設(shè)置成-webkit-box或者-webkit-inline-box并且-webkit-box-orient屬性設(shè)置成vertical時才有效果在大部分情況下,也需要設(shè)置overflow屬性為hidden, 否則,里面的內(nèi)容不會被裁減,并且在內(nèi)容顯示為指定行數(shù)后還會顯示省略號(ellipsis )</p>
<p class="block-with-text">2.小于一行的例子,不會出現(xiàn)“...”在文末</p>
<p class="block-with-text" style="width: 250px;">3. 2.5 行的例子: 最簡單的方法淤袜,但是很遺憾痒谴,它不支持跨瀏覽器,在Firefox和Internet Explorer中不起作用.</p>

body {
  margin: 0;
  padding: 50px;
  font: 400 14px/1.2em sans-serif; 
  background: white;
}

p {
  width: 500px;
}

/* mixin for multiline */
@mixin multiLineEllipsis($lineHeight: 1.2em, $lineCount: 1, $bgColor: white){
  overflow: hidden;
  position: relative;
  line-height: $lineHeight;
  max-height: $lineHeight * $lineCount; 
  text-align: justify;
  margin-right: -1em;
  padding-right: 1em;
  &:before {
    content: '...';
    position: absolute;
    right: 0;
    bottom: 0;
  }
  &:after {
    content: '';
    position: absolute;
    right: 0;
    width: 1em;
    height: 1em;
    margin-top: 0.2em;
    background: $bgColor;
  }
}

.block-with-text {
  @include multiLineEllipsis($lineHeight: 1.2em, $lineCount: 2, $bgColor: white);  
}

The reference link

MDN text-overflow

微信公眾號:嵐坤爺
個人博客地址:http://liyuankun.top
知乎專欄:嵐坤爺?shù)那岸?機器學習知識庫
簡書:Muzilan
Github:catherineliyuankun

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铡羡,隨后出現(xiàn)的幾起案子积蔚,更是在濱河造成了極大的恐慌,老刑警劉巖烦周,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尽爆,死亡現(xiàn)場離奇詭異怎顾,居然都是意外死亡,警方通過查閱死者的電腦和手機漱贱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門槐雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幅狮,你說我怎么就攤上這事募强。” “怎么了崇摄?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵钻注,是天一觀的道長。 經(jīng)常有香客問我配猫,道長幅恋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任泵肄,我火速辦了婚禮捆交,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腐巢。我一直安慰自己品追,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布冯丙。 她就那樣靜靜地躺著肉瓦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胃惜。 梳的紋絲不亂的頭發(fā)上泞莉,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音船殉,去河邊找鬼鲫趁。 笑死,一個胖子當著我的面吹牛利虫,可吹牛的內(nèi)容都是我干的挨厚。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼糠惫,長吁一口氣:“原來是場噩夢啊……” “哼疫剃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硼讽,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤巢价,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹄溉,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡咨油,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柒爵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片役电。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棉胀,靈堂內(nèi)的尸體忽然破棺而出法瑟,到底是詐尸還是另有隱情,我是刑警寧澤唁奢,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布霎挟,位于F島的核電站,受9級特大地震影響麻掸,放射性物質(zhì)發(fā)生泄漏酥夭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一脊奋、第九天 我趴在偏房一處隱蔽的房頂上張望熬北。 院中可真熱鬧,春花似錦诚隙、人聲如沸讶隐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巫延。三九已至,卻和暖如春地消,著一層夾襖步出監(jiān)牢的瞬間炉峰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工犯建, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讲冠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓适瓦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谱仪。 傳聞我的和親對象是個殘疾皇子玻熙,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容