AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

純 CSS 檢測文本是否溢出

來源: 責(zé)編: 時間:2024-04-28 17:21:05 138觀看
導(dǎo)讀介紹一個CSS實用技巧一直以來,CSS 都無法很好的檢測出一段文本是否溢出。但這又是一個非常普遍的需求,比如多行文本展開,展開按鈕只有在文本溢出的時候才出現(xiàn)。時代在進(jìn)步,CSS也在不斷推出新特性,現(xiàn)在,CSS終于可以完美的解

MzJ28資訊網(wǎng)——每日最新資訊28at.com

介紹一個CSS實用技巧MzJ28資訊網(wǎng)——每日最新資訊28at.com

一直以來,CSS 都無法很好的檢測出一段文本是否溢出。但這又是一個非常普遍的需求,比如多行文本展開,展開按鈕只有在文本溢出的時候才出現(xiàn)。MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

可以看到隨著滾動,左邊文本的顏色也慢慢變化了。MzJ28資訊網(wǎng)——每日最新資訊28at.com

接著激進(jìn)一點,我們在動畫中把起始點都設(shè)置成一樣,這樣還沒開始滾動就自動變色了。MzJ28資訊網(wǎng)——每日最新資訊28at.com

@keyframes check{  from,to {     /*動畫起始點設(shè)置成相同*/    color: #9747FF;  }}

效果如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

這樣即使還沒開始滾動,也能提前知道是否可滾動了。MzJ28資訊網(wǎng)——每日最新資訊28at.com

然后,我們可以設(shè)置超出隱藏,也就是讓滾動容器“不能滾動”。MzJ28資訊網(wǎng)——每日最新資訊28at.com

.txt{%20%20overflow:%20hidden;}

效果如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

也就是說這種情況下,CSS滾動驅(qū)動動畫仍然可以被觸發(fā)。嘗試了一下,只要不是overflow:visible,CSS都認(rèn)為是“可滾動”的,即“溢出”狀態(tài)。MzJ28資訊網(wǎng)——每日最新資訊28at.com

最后,我們將文本設(shè)置成超出顯示省略號。MzJ28資訊網(wǎng)——每日最新資訊28at.com

.txt{%20%20display:%20-webkit-box;%20%20-webkit-box-orient:%20vertical;%20%20-webkit-line-clamp:%203;%20%20overflow:%20hidden;}

效果如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

是不是有點能區(qū)分文本是否溢出了?至少目前從文本顏色可以很好判斷。MzJ28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,僅僅這樣是不夠,還需要更加自由,比如在超出時可以控制其他標(biāo)簽的狀態(tài),這就需要用到%20CSS%20樣式查詢了。MzJ28資訊網(wǎng)——每日最新資訊28at.com

二、CSS%20樣式查詢

下面介紹一下CSS樣式查詢。MzJ28資訊網(wǎng)——每日最新資訊28at.com

@container%20-%20CSS:%20Cascading%20Style%20Sheets%20|%20MDN%20(mozilla.org)[1]MzJ28資訊網(wǎng)——每日最新資訊28at.com

CSS%20樣式查詢是容器查詢的一部分,從名稱也可以看出,它可以查詢元素的樣式,進(jìn)而設(shè)置額外的樣式。MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

比如,我們要查詢顏色為紅色的容器,然后給子元素設(shè)置背景色為黑色,可以這樣。MzJ28資訊網(wǎng)——每日最新資訊28at.com

<style>%20%20div{%20%20%20%20color:red;%20%20}%20%20@container%20style(color:%20red)%20{%20%20%20%20p%20{%20%20%20%20%20%20background:%20black;%20%20%20%20} }</style><div>%20%20<p>%20%20%20%20%20%20</p></div>

有人可能會有疑問,為啥要設(shè)置子元素,直接設(shè)置本身不好嗎?其實是為了避免沖突,假設(shè)查詢到了color:red,然后你又設(shè)置了color:yellow,那瀏覽器該如何渲染呢?有點死循環(huán)了。所以為了避免這種情況,所有容器查詢都只能設(shè)置子元素樣式。MzJ28資訊網(wǎng)——每日最新資訊28at.com

不過這種寫法目前還不支持,僅支持CSS變量的寫法,類似于這樣。MzJ28資訊網(wǎng)——每日最新資訊28at.com

<style>%20%20div{%20%20%20%20--color:red;%20%20}%20%20@container%20style(--color:%20red)%20{%20%20%20%20p%20{%20%20%20%20%20%20background:%20black;%20%20%20%20} }</style><div>%20%20<p>%20%20%20%20%20%20</p></div>

回到前面的例子,我們可以給文本加一個CSS變量,就叫做 --trunc吧,表示截斷。MzJ28資訊網(wǎng)——每日最新資訊28at.com

.txt{%20%20--trunc:%20false;}

然后在滾動驅(qū)動動畫中改變這個變量。MzJ28資訊網(wǎng)——每日最新資訊28at.com

@keyframes%20check{%20%20from,to%20{%20%20%20%20%20/*動畫起始點設(shè)置成相同*/%20%20%20%20color:%20#9747FF;%20%20%20%20--trunc:%20true;%20%20}}

這樣一來,滾動驅(qū)動動畫執(zhí)行的時候,這個變量也被賦值了。MzJ28資訊網(wǎng)——每日最新資訊28at.com

最后我們就可以查詢這個樣式,給子元素設(shè)置樣式了,這里我們就用偽元素代替。MzJ28資訊網(wǎng)——每日最新資訊28at.com

@container%20style(--trunc:%20true)%20{%20%20.txt::after{%20%20%20%20content:%20'';%20%20%20%20position:%20absolute;%20%20%20%20inset:%202px;%20%20%20%20border:%201px%20solid%20red;%20%20}}

這段代碼表示當(dāng)查詢到--trunc:%20true的條件時,設(shè)置相應(yīng)的樣式,這里是畫了一個紅色的邊框,效果如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

是不是非常容易?MzJ28資訊網(wǎng)——每日最新資訊28at.com

你也可以查看以下在線鏈接(注意兼容性,需要 Chrome%20115+,以下相同):MzJ28資訊網(wǎng)——每日最新資訊28at.com

CSS%20animation-timeline%20+%20@%20container%20style%20(codepen.io)[2]CSS%20animation-timeline%20+%20@%20container%20style%20(juejin.cn)[3]

有了這個作為區(qū)分,可做的事情就比較多了,下面來看幾個例子。MzJ28資訊網(wǎng)——每日最新資訊28at.com

三、CSS%20多行文本展開收起

這已經(jīng)是第四次用不同方式來實現(xiàn)這個效果了,前幾次的實現(xiàn)可以參考文章開頭部分。MzJ28資訊網(wǎng)——每日最新資訊28at.com

這次來看新的實現(xiàn)方式。MzJ28資訊網(wǎng)——每日最新資訊28at.com

首先還是把之前的結(jié)構(gòu)拿過來,這些結(jié)構(gòu)是為了實現(xiàn)右下角的“展開”按鈕必不可少的。MzJ28資訊網(wǎng)——每日最新資訊28at.com

<div%20class="text-wrap">%20%20<div%20class="text-content">%20%20%20%20<label%20class="expand"><input%20type="checkbox"%20hidden></label>%20%20%20%20歡迎關(guān)注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。%20%20</div></div>

相關(guān) CSS 如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

.text-wrap{%20%20display:%20flex;%20%20position:%20relative;%20%20width:%20300px;%20%20padding:%208px;%20%20outline:%201px%20dashed%20#9747FF;%20%20border-radius:%204px;%20%20line-height:%201.5;%20%20text-align:%20justify;%20%20font-family:%20cursive;}.expand{%20%20font-size:%2080%;%20%20padding:%20.2em%20.5em;%20%20background-color:%20#9747FF;%20%20color:%20#fff;%20%20border-radius:%204px;%20%20cursor:%20pointer;%20%20float:%20right;%20%20clear:%20both;}.expand::after{%20%20content:%20'展開';}.text-content{%20%20display:%20-webkit-box;%20%20-webkit-box-orient:%20vertical;%20%20-webkit-line-clamp:%203;%20%20overflow:%20hidden;}.text-content::before{%20%20content:%20'';%20%20float:%20right;%20%20height:%20calc(100%%20-%2024px);}.text-wrap:has(:checked)%20.text-content{%20%20-webkit-line-clamp:%20999;}.text-wrap:has(:checked)%20.expand::after{%20%20content:%20'收起';}

這時的效果是這樣的。MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

通過上一節(jié)的原理,我們通過滾動驅(qū)動動畫來判斷是否溢出,并使用CSS變量作為標(biāo)識,然后利用樣式查詢來控制展開按鈕的顯示狀態(tài),關(guān)鍵實現(xiàn)如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

.expand{ /**/%20%20display:%20none;}.text-content{%20%20--trunc:%20false;%20%20animation:%20check%201s;%20%20animation-timeline:%20scroll(self);}@keyframes%20check{%20%20from,to%20{%20%20%20%20--trunc:%20true;%20%20}}@container%20style(--trunc:%20true)%20{%20%20.expand{%20%20%20%20display:%20initial;%20%20}}

展開按鈕默認(rèn)是隱藏的,這樣只有在文本溢出的時候才出現(xiàn),效果如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

效果出來了,不過在點擊展開后按鈕也跟著消失了。這是因為展開后,CSS檢測出這時沒有溢出,所以樣式查詢里的語句就不生效了,自然也就回到了之前的隱藏狀態(tài)。MzJ28資訊網(wǎng)——每日最新資訊28at.com

要解決這個問題也很簡單,在展開的時候始終顯示按鈕就行了,用:checked可以判斷是否展開。MzJ28資訊網(wǎng)——每日最新資訊28at.com

.text-wrap:has(:checked) .expand{  display: initial;}

這樣就正常了,完美!MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

CSS方式的好處是監(jiān)控是實時的,比如手動改變?nèi)萜鞯膶挾龋矔詣语@示或者隱藏這個按鈕。MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

完整demo可以查看以下在線鏈接( Chrome 115+):MzJ28資訊網(wǎng)——每日最新資訊28at.com

  • CSS container style expand (codepen.io)[5]
  • CSS container style expand (juejin.cn)[6]

四、CSS 文本超出時顯示 tooltips

還有一個比較常見的需求,就是希望在文本出現(xiàn)省略號時,鼠標(biāo)hover有tooltips提示,就像這樣。MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

原理和上面幾乎一致,我們一步步來看。MzJ28資訊網(wǎng)——每日最新資訊28at.com

首先還是結(jié)構(gòu),沒什么特別的。MzJ28資訊網(wǎng)——每日最新資訊28at.com

<div class="txt" data-title="這是一段可以自動出現(xiàn)tooltip的文本">  這是一段可以自動出現(xiàn)tooltip的文本</div>

這里加了一個data-title,是用來顯示氣泡的,通過偽元素content獲取屬性內(nèi)容。MzJ28資訊網(wǎng)——每日最新資訊28at.com

.txt{  overflow: hidden;  white-space: nowrap;  text-overflow: ellipsis;  padding: 8px;  outline: 1px dashed #9747FF;  font-family: cursive;  border-radius: 4px;}.txt::after{  content: attr(data-title);  position: absolute;  top: 0;  width: fit-content;  left: 50%;  margin: auto;  transform: translate(-50%,-100%);  background-color: rgba(0,0,0,.6);  padding: .3em 1em;  border-radius: 4px;  color: #fff;  opacity: 0;  visibility: hidden;  transition: .2s .1s;}

效果如下:MzJ28資訊網(wǎng)——每日最新資訊28at.com

MzJ28資訊網(wǎng)——每日最新資訊28at.com

完整demo可以查看以下在線鏈接( Chrome 115+):MzJ28資訊網(wǎng)——每日最新資訊28at.com

  • CSS container style tooltip (codepen.io)[7]
  • CSS container style tooltip (juejin.cn)[8]

五、最后總結(jié)一下

CSS 就是這么神奇,將兩個幾乎不相關(guān)的特性組合起來,就能實現(xiàn)完全不一樣的功能,這可是在其他語言中做不到的,簡單回顧一下CSS檢測代碼。MzJ28資訊網(wǎng)——每日最新資訊28at.com

.content{  --trunc: false;  animation: check 1s;  animation-timeline: scroll(x self); /*注意溢出方向*/}@keyframes check{  from,to {    --trunc: true; /*滾動驅(qū)動動畫*/  }}/*查詢溢出狀態(tài)*/@container style(--trunc: true) { 	}

是不是非常容易,幾乎是無侵入式的,下面總結(jié)一下本文重點。MzJ28資訊網(wǎng)——每日最新資訊28at.com

  • 要實現(xiàn)文本溢出檢測,需要用到兩個新特性,CSS滾動驅(qū)動動畫和CSS樣式查詢。
  • CSS滾動驅(qū)動動畫可以檢測出容器是否可滾動,也就是溢出,即使是在超出隱藏的情況下。
  • CSS樣式查詢可以查詢到CSS變量的變化,從而設(shè)置不同的樣式。
  • 借助CSS滾動驅(qū)動動畫和CSS樣式查詢,可以很輕松的實現(xiàn)文本溢出檢測。
  • 兩個實例:CSS多行文本展開收起和CSS文本超出時顯示 tooltips。

當(dāng)然除了以上一些案例,還可以做的事情很多,比如以前有寫一篇判斷指定高度后就顯示折疊按鈕,也可以用這種方式來實現(xiàn),幾乎所有與溢出相關(guān)的交互都可以純CSS完成。MzJ28資訊網(wǎng)——每日最新資訊28at.com

至于兼容性,目前僅支持 chrome 115+,還是需要多等等,多多關(guān)注,說不定哪一天就能用上了呢,比如5年前推出的CSS scroll snap,現(xiàn)在幾乎可以愉快使用了,再也無需swiper.js這樣的庫了。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[1]@container - CSS: Cascading Style Sheets | MDN (mozilla.org): https://developer.mozilla.org/en-US/docs/Web/CSS/@container。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[2]CSS animation-timeline + @ container style (codepen.io): https://codepen.io/xboxyan/pen/jORrXBe。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[3]CSS animation-timeline + @ container style (juejin.cn): https://code.juejin.cn/pen/7346120235966267427。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[4]CSS 實現(xiàn)多行文本“展開收起”: https://juejin.cn/post/6963904955262435336。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[5]CSS container style expand (codepen.io): https://codepen.io/xboxyan/pen/qBwaaWW。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[6]CSS container style expand (juejin.cn): https://code.juejin.cn/pen/7346120018578374694。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[7]CSS container style tooltip (codepen.io): https://codepen.io/xboxyan/pen/oNOzzYb。MzJ28資訊網(wǎng)——每日最新資訊28at.com

[8]CSS container style tooltip (juejin.cn): https://code.juejin.cn/pen/7346125496281333814。MzJ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-86215-0.html純 CSS 檢測文本是否溢出

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 世界上最厲害的編程神器 ,被大多數(shù)人拋棄了......

下一篇: React 19 終于來了!帶來了諸多新特性和改進(jìn)

標(biāo)簽:
  • 熱門焦點
  • K60至尊版狂暴引擎2.0加持:超177萬跑分?jǐn)孬@性能第一

    Redmi的后性能時代戰(zhàn)略發(fā)布會今天下午如期舉辦,在本次發(fā)布會上,Redmi公布了多項關(guān)于和聯(lián)發(fā)科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 服務(wù)存儲設(shè)計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數(shù)據(jù)從主存儲加載到KV緩存中,加速后續(xù)的訪問。在存在重復(fù)度的場景,Cache-Aside可以提升服務(wù)性能,降低底層存儲的壓力,缺點是緩存和底
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應(yīng)運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • Python異步IO編程的進(jìn)程/線程通信實現(xiàn)

    這篇文章再講3種方式,同時講4中進(jìn)程間通信的方式一、 Python 中線程間通信的實現(xiàn)方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • JVM優(yōu)化:實戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達(dá)路徑來避免垃 圾收集回收機制清除這些對象,當(dāng)這些對象所占空間超過
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產(chǎn)懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風(fēng)頭無兩。你可以說陳思誠的
  • 聯(lián)想YOGA 16s 2022筆記本將要推出,屏幕支持觸控功能

    聯(lián)想此前宣布,將于11月2日19:30召開聯(lián)想秋季輕薄新品發(fā)布會,推出聯(lián)想 YOGA 16s 2022 筆記本等新品。官方稱,YOGA 16s 2022 筆記本將搭載 16 英寸屏幕,并且是一
  • 電博會與軟博會實現(xiàn)"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發(fā)揮展會拉動人流、信息流、資金流實現(xiàn)快速交互流動的作用,繼而推動區(qū)域經(jīng)濟(jì)良性發(fā)展;又可以聚
Top