亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 網頁設計 > 正文

關于帶有"顯示更多"按鈕的多行文本截斷思考

2024-08-30 08:33:28
字體:
來源:轉載
供稿:網友

剛好最近遇到這個小需求,記得很早之前都是用 JS 處理,畢竟那時候年少無知。 切換類的操作 可以用 Checked 偽類實現,成本會比較低一點,那么先來列一下功能要點:

  1. 多行文本截斷,顯示省略號
  2. "顯示更多" 按鈕可以展開所有文本
  3. 展開文本后,按鈕的文字變成 "收起文本"
  4. 按鈕的出現條件為當文本 被截斷 時(如果你文本只有 一行 ,那就沒必要顯示了吧:sweat:)

疑問點: text-overflow: ellipsis 不支持多行 截斷 。按鈕文字切換, CSS 該如何切換文本? 按鈕的出現條件又如何判斷? 下面我將逐一講解:balloon:

多行文本截斷

假設現有的 HTML 結構如下:

 

<div class="box">  <p>文本內容</p></div>

如果需要單行 截斷 ,一般的做法是:

 

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

效果如下:

 

多行文本需要用到 line-clamp ,定義 被截斷 文本的行數:

 

p {  display: -webkit-box;  -webkit-line-clamp: 3;  -webkit-box-orient: vertical;  overflow: hidden;}

效果如下:

 

按鈕點擊展示所有文本

現在 HTML 結構改造成如下:

 

<div class="box">  <input type="checkbox" name="toggle" id="toggle" style="display: none;">  <p>文本內容</p>  <label for="toggle">顯示更多</label></div>

監聽按鈕的點擊行為則用文首說的 Checked 偽類:

 

input[name="toggle"]:checked { & + p {   -webkit-line-clamp: unset; }}

這樣當用戶點擊(選中)的時候,將 展示 所有文本,未選中則 收起 文本:

 

按鈕文字動態化

講道理,當展示所有文本之后,按鈕的文字應該要切換成 "收起文本" , CSS 怎么修改文本啊,其實用偽元素的 content 就行了。

把 HTML 中的文字去掉,然后換成 CSS 控制:

 

<label for="toggle"></label>label {  &::after {    content: "顯示更多";  }}

 

同理可得:

 

input[name="toggle"]:checked {  & ~ label {    &::after {      content: "收起文本";    }  }}

效果如下:

 

按鈕樣式丑的那就自己調一下咯:sweat:

按鈕出現的條件

當文本少于 三行 時,按鈕不應該出現,因為沒必要:

 

出大問題,網上沖浪后,發現沒有任何 偽類 可以判斷文本是否 被截斷 ,如果有,我們可以這樣做:

 

p { &:truncated {   & + label {    display: block;   } }   }label {  display: none;}

truncated 意思是 截斷 的。

不過就算這樣,也無法實現我們的需求,因為當你顯示所有文本后,你的文本就沒有 被截斷 了,所以按鈕會消失:

 

以上是依靠一段 JS 實現的 模擬效果 ,源碼如下:

 

let list = document.querySelectorAll("p");let observer = new ResizeObserver(entries => {  entries.forEach(item => {    item.target.classList[item.target.scrollHeight > item.contentRect.height ? "add" : "remove"]("truncated");  });});list.forEach(p => {  observer.observe(p);});

 

原理就是 監聽 文本元素的大小變化,然后動態增加 truncated 類名:joy:

所以,你的 CSS 中的 truncated 偽類應該改成 truncated 類:sweat:

 

p { &.truncated {   & + label {    display: block;   } }   }

我們希望 切換 的時候,按鈕一直都在,而不是文本沒 被截斷 的時候就不顯示按鈕,因此,我們不需要一直 監聽 文本元素的大小改變,我們只需要一個初始值(文本初始化的時候到底有沒有 被截斷 ),也就是只監聽一次!

 

entries.forEach(item => {  //... 原來的代碼    observer.unobserve(item.target); // 移除監聽});

或者根本不需要用這個 API ,直接頁面初始化的時候,遍歷判斷一遍就行拉!

 

let list = document.querySelectorAll("p");list.forEach(item => {  item.classList[item.scrollHeight > item.offsetHeight ? "add" : "remove"]("truncated");});

 

這樣, P 元素在頁面初始化的時候,會自動加上 truncated 類名,而按鈕又可以一直顯示:

 

擴展

比如你可以自定義按鈕樣式、在底部增加一個透明漸變的蒙層、切換時候的過渡效果:grin:

總結
 

checked 偽類是個好東西,能滿足很多需求而不用寫 JS ,因此凡是有關 切換類的操作 都可以考慮用它。

以上所述是小編給大家介紹的關于帶有"顯示更多"按鈕的多行文本截斷思考,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品丝袜一区二区三区| 97在线视频免费播放| 日韩av在线网页| 亚洲综合中文字幕在线| 久久久国产一区二区三区| 国产精品爽爽爽爽爽爽在线观看| 国产精品视频一区国模私拍| 日韩视频免费中文字幕| 亚洲第一区第二区| 亚洲精品动漫久久久久| 久久久欧美一区二区| 欧美日韩一区二区三区在线免费观看| 久久国产精品久久久久| 欧美精品电影在线| 中文字幕日韩欧美在线视频| 俺去了亚洲欧美日韩| 国内伊人久久久久久网站视频| 午夜精品久久久久久久久久久久| 亚洲成av人乱码色午夜| 亚洲小视频在线| 最近2019年日本中文免费字幕| 亚洲第一av在线| 91精品国产高清久久久久久| 久久亚洲欧美日韩精品专区| 亚洲国产精品美女| xxx一区二区| 国产亚洲人成网站在线观看| 亚洲免费视频在线观看| 日韩欧美在线字幕| 欧美精品激情在线观看| 日韩av有码在线| 午夜精品久久久久久99热| 久久久久久亚洲精品不卡| 亚洲日本成人女熟在线观看| 国产精品日韩欧美综合| 欧美精品电影免费在线观看| 亚洲欧美自拍一区| 欧美性精品220| 欧美日韩国产综合新一区| 2019最新中文字幕| 日韩国产欧美精品在线| 国产91成人在在线播放| 在线观看欧美日韩| 91亚洲精华国产精华| 久久91亚洲精品中文字幕| 粉嫩av一区二区三区免费野| 亚洲欧美综合另类中字| 久久久人成影片一区二区三区| 亚洲精品午夜精品| 欧美激情一区二区三区在线视频观看| 国产综合久久久久| 在线国产精品视频| 97在线免费视频| 日韩欧美在线视频免费观看| 欧美精品免费播放| 欧美日韩在线视频一区二区| 亚洲三级免费看| 亚洲国产日韩欧美在线99| 91精品国产乱码久久久久久久久| 在线色欧美三级视频| 日韩欧美国产黄色| 日韩欧美国产一区二区| 国产欧美日韩中文字幕在线| 国产成人短视频| 在线播放国产一区中文字幕剧情欧美| 欧美黄色小视频| 久久久国产视频| 91视频九色网站| 久久久久久av| 成人福利在线视频| 亚洲福利影片在线| 欧美在线视频导航| 日韩精品免费在线视频| 国产午夜精品视频免费不卡69堂| 国产精品久久国产精品99gif| 欧美成人免费小视频| 成人免费观看49www在线观看| 欧美精品制服第一页| 伊人亚洲福利一区二区三区| 欧美极度另类性三渗透| 日韩美女视频中文字幕| 日韩av在线电影网| 欧美激情手机在线视频| 亚洲视频在线看| 中国人与牲禽动交精品| 免费91麻豆精品国产自产在线观看| 国产精品网站入口| 亚洲伊人成综合成人网| 亚洲毛片在线免费观看| 亚洲国产精彩中文乱码av在线播放| 日韩精品免费在线观看| 国产成人福利网站| 国产一区二区三区在线视频| 国产视频自拍一区| 91欧美精品成人综合在线观看| 欧美激情精品在线| 全色精品综合影院| 在线视频精品一| 91在线无精精品一区二区| 国产精品视频一区二区三区四| 俺去亚洲欧洲欧美日韩| 国产欧美精品在线播放| 国产成人精品久久| 日韩av手机在线观看| 欧美激情在线观看视频| 97在线免费观看| 亚洲毛片一区二区| 日韩视频永久免费观看| 97视频在线观看成人| 日韩成人激情影院| 在线一区二区日韩| 91亚洲国产成人久久精品网站| 久久精品久久久久电影| 成人写真福利网| 亚洲欧洲av一区二区| 精品在线欧美视频| 欧美日韩国产在线播放| 中文字幕亚洲综合久久| 国产精品久久久av| 欧美日韩精品国产| 欧美激情中文字幕在线| 久久精品成人欧美大片古装| 欧洲精品久久久| 色妞色视频一区二区三区四区| 国产色视频一区| 亚洲免费福利视频| 欧美在线中文字幕| 88xx成人精品| 国产精品欧美日韩久久| 日本伊人精品一区二区三区介绍| 久久久中文字幕| 久久久精品一区二区| 中文.日本.精品| 成人黄色网免费| 国产日韩欧美中文在线播放| 3344国产精品免费看| 国产精品com| 国产一级揄自揄精品视频| 自拍偷拍免费精品| 亚洲成人免费在线视频| 欧美成人h版在线观看| 亚洲天堂一区二区三区| 亚洲一级黄色片| 亚洲成人激情在线观看| 精品视频在线导航| 久久国产精品亚洲| 欧美电影免费观看高清完整| 中文字幕日韩在线观看| 欧美激情影音先锋| 亚洲欧洲激情在线| 色在人av网站天堂精品| 国产精品一区二区性色av| 97国产真实伦对白精彩视频8| 日韩精品在线免费播放| 国产成人亚洲综合91精品| 久久免费视频观看| 97久久国产精品| 欧美日韩加勒比精品一区| 久久人91精品久久久久久不卡| 日韩欧美aⅴ综合网站发布| 精品久久久久久久久久久久| 欧美激情国产日韩精品一区18| 国产成+人+综合+亚洲欧洲| 日韩欧美极品在线观看|