1. 程式人生 > 其它 >小程式長文字限制顯示行數

小程式長文字限制顯示行數

前言

檢視(View)渲染長文字時,受限於檢視的寬度(Width),長文字可能需要顯示多行,才可以將長文字的內容全部展示出來;也就是說,文字行高(FontSize * LineHeight)一定的情況下,檢視的高度(Height)取決於長文字渲染完成之後的行數(Line)。如果頁面佈局要求檢視的高度必須是固定的,本質上就可以通過限制長文字的顯示行數來實現。

本文介紹兩種長文字限制顯示行數的方案。

CSS -webkit-line-clamp

這個 CSS 屬性的名稱有點兒與眾不同,前面帶有 -webkit- 字首,先說一下這個屬性為什麼能夠被使用。

官方文件中關於 小程式執行環境 的介紹:

WKWebView、chromium定製核心 和 Chrome WebView 都是基於 WebKit

構建的。

WebKit 是什麼?WebKit 是一個跨平臺的 Web 瀏覽器引擎,相當於小程式頁面的渲染都是通過 WebKit 完成的。WebKit 除了支援 CSS 的標準屬性之外,還支援不少擴充套件屬性,這些屬性的名稱以 -webkit- 為字首,-webkit-line-clamp 就是其中之一,它可以把塊容器(Block Container)中的內容限制為指定的行數,使用時需要和其它幾個屬性聯合使用:

.clamp {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 6;
  overflow: hidden;
}

<view class="clamp">
  <text>長文字內容</text>
</view>

-webkit-line-clamp: 6; 表示限制文字最多顯示為 6 行,如果文字實際顯示超過 6 行,第 6 行末尾會出現省略號(...),從第 7 行開始的內容會被隱藏,效果如下:

目前使用這種文案,文字末尾的省略號是不支援修改或移除的(社群已有同學反饋些問題,官方尚無回覆),如果不能滿足需求,就需要使用第二種方案。

JavaScript

檢視中的文字內容按預設方式渲染完成之後,獲取檢視的高度,如果檢視的高度超過預定高度,使用 CSS 設定檢視高度值為預定高度,以及隱藏溢位文字內容;如果檢視的高度未超過預定高度,什麼也不做。

使用檢視 iview 渲染長文字:

.default {
  font-size: 15px;
  line-height: 1.6;
  
  word-break: break-all;
}

<view id="iview" class="default">
  <text>長文字內容</text>
</view>

獲取檢視 iview 的高度:

const query = wx.createSelectorQuery()

query.select('#iview').boundingClientRect()

query.exec(function (res) {
  // 檢視高度
  const viewHeight = res[0].height
  
  ...
})

如果檢視文字限制最多顯示 6 行,預定高度應該如何計算?

其餘內容請參考 小程式長文字限制顯示行數