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

當前位置:首頁 > 科技  > 軟件

純 CSS 檢測文本是否溢出

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

oRE28資訊網——每日最新資訊28at.com

介紹一個CSS實用技巧oRE28資訊網——每日最新資訊28at.com

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

oRE28資訊網——每日最新資訊28at.com

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

接著激進一點,我們在動畫中把起始點都設置成一樣,這樣還沒開始滾動就自動變色了。oRE28資訊網——每日最新資訊28at.com

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

效果如下:oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

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

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

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

效果如下:oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

也就是說這種情況下,CSS滾動驅動動畫仍然可以被觸發。嘗試了一下,只要不是overflow:visible,CSS都認為是“可滾動”的,即“溢出”狀態。oRE28資訊網——每日最新資訊28at.com

最后,我們將文本設置成超出顯示省略號。oRE28資訊網——每日最新資訊28at.com

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

效果如下:oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

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

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

二、CSS%20樣式查詢

下面介紹一下CSS樣式查詢。oRE28資訊網——每日最新資訊28at.com

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

CSS%20樣式查詢是容器查詢的一部分,從名稱也可以看出,它可以查詢元素的樣式,進而設置額外的樣式。oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

比如,我們要查詢顏色為紅色的容器,然后給子元素設置背景色為黑色,可以這樣。oRE28資訊網——每日最新資訊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>

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

不過這種寫法目前還不支持,僅支持CSS變量的寫法,類似于這樣。oRE28資訊網——每日最新資訊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吧,表示截斷。oRE28資訊網——每日最新資訊28at.com

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

然后在滾動驅動動畫中改變這個變量。oRE28資訊網——每日最新資訊28at.com

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

這樣一來,滾動驅動動畫執行的時候,這個變量也被賦值了。oRE28資訊網——每日最新資訊28at.com

最后我們就可以查詢這個樣式,給子元素設置樣式了,這里我們就用偽元素代替。oRE28資訊網——每日最新資訊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}}

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

oRE28資訊網——每日最新資訊28at.com

是不是非常容易?oRE28資訊網——每日最新資訊28at.com

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

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

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

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

這已經是第四次用不同方式來實現這個效果了,前幾次的實現可以參考文章開頭部分。oRE28資訊網——每日最新資訊28at.com

這次來看新的實現方式。oRE28資訊網——每日最新資訊28at.com

首先還是把之前的結構拿過來,這些結構是為了實現右下角的“展開”按鈕必不可少的。oRE28資訊網——每日最新資訊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歡迎關注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。%20%20</div></div>

相關 CSS 如下:oRE28資訊網——每日最新資訊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'收起';}

這時的效果是這樣的。oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

通過上一節的原理,我們通過滾動驅動動畫來判斷是否溢出,并使用CSS變量作為標識,然后利用樣式查詢來控制展開按鈕的顯示狀態,關鍵實現如下:oRE28資訊網——每日最新資訊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}}

展開按鈕默認是隱藏的,這樣只有在文本溢出的時候才出現,效果如下:oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

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

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

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

這樣就正常了,完美!oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

CSS方式的好處是監控是實時的,比如手動改變容器的寬度,也會自動顯示或者隱藏這個按鈕。oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

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

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

四、CSS 文本超出時顯示 tooltips

還有一個比較常見的需求,就是希望在文本出現省略號時,鼠標hover有tooltips提示,就像這樣。oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

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

首先還是結構,沒什么特別的。oRE28資訊網——每日最新資訊28at.com

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

這里加了一個data-title,是用來顯示氣泡的,通過偽元素content獲取屬性內容。oRE28資訊網——每日最新資訊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;}

效果如下:oRE28資訊網——每日最新資訊28at.com

oRE28資訊網——每日最新資訊28at.com

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

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

五、最后總結一下

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

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

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

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

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

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

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

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

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

[4]CSS 實現多行文本“展開收起”: https://juejin.cn/post/6963904955262435336。oRE28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top