日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

純 CSS 檢測文本是否溢出

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、CSS%20樣式查詢

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

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

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

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

比如,我們要查詢顏色為紅色的容器,然后給子元素設置背景色為黑色,可以這樣。8mw28資訊網——每日最新資訊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,那瀏覽器該如何渲染呢?有點死循環了。所以為了避免這種情況,所有容器查詢都只能設置子元素樣式。8mw28資訊網——每日最新資訊28at.com

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

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

然后在滾動驅動動畫中改變這個變量。8mw28資訊網——每日最新資訊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}}

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

最后我們就可以查詢這個樣式,給子元素設置樣式了,這里我們就用偽元素代替。8mw28資訊網——每日最新資訊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的條件時,設置相應的樣式,這里是畫了一個紅色的邊框,效果如下:8mw28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

首先還是把之前的結構拿過來,這些結構是為了實現右下角的“展開”按鈕必不可少的。8mw28資訊網——每日最新資訊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 如下:8mw28資訊網——每日最新資訊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'收起';}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、CSS 文本超出時顯示 tooltips

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

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

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

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

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

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

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

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

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

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

五、最后總結一下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
一区二区三区产品免费精品久久75 | 玖玖玖国产精品| 裸体素人女欧美日韩| 欧美激情视频在线播放| 欧美午夜理伦三级在线观看| 国产三级精品在线不卡| 91久久精品一区二区三区| 亚洲精品一二| 欧美一级夜夜爽| 久久夜精品va视频免费观看| 欧美精品麻豆| 国产精品久久久99| 亚洲第一精品夜夜躁人人爽| 中文精品在线| 美女日韩在线中文字幕| 欧美天天视频| 在线精品一区| 亚洲中午字幕| 欧美激情按摩在线| 国产日韩欧美综合在线| 亚洲每日在线| 久久久不卡网国产精品一区| 欧美日韩一区在线| 在线观看视频免费一区二区三区| 亚洲午夜精品久久久久久app| 狂野欧美一区| 国产美女精品一区二区三区| 亚洲乱码国产乱码精品精| 久久国产精品99精品国产| 欧美日韩视频第一区| 国产一区二区精品丝袜| 一区二区三区免费在线观看| 久久综合电影一区| 国产精品一二三四| 日韩亚洲精品电影| 久久性天堂网| 国产日韩专区在线| 亚洲天堂第二页| 欧美日韩成人在线播放| 精品999在线播放| 欧美一区二区免费视频| 欧美日韩亚洲综合| 136国产福利精品导航网址| 欧美一区二区三区在线免费观看| 欧美日韩国产综合视频在线| 黄色成人av网| 欧美一区二区三区的| 欧美午夜剧场| 一区二区国产在线观看| 欧美国产另类| 激情六月婷婷综合| 久久9热精品视频| 国产精品久久久999| 亚洲精品一区二区网址 | 欧美激情小视频| 国产一区二区三区av电影| 亚洲私拍自拍| 欧美久久久久| 亚洲成色777777在线观看影院| 亚洲欧美日韩第一区| 欧美性开放视频| 99在线热播精品免费| 欧美福利视频在线| 亚洲国产欧美不卡在线观看| 久久久午夜精品| 国产一区二区三区久久| 午夜久久久久久久久久一区二区| 欧美性猛交99久久久久99按摩| 日韩天天综合| 欧美精品三级日韩久久| 亚洲国产一区二区视频| 美日韩丰满少妇在线观看| 悠悠资源网久久精品| 老司机午夜免费精品视频| 永久555www成人免费| 久久久久久久精| 悠悠资源网亚洲青| 久久综合给合| 亚洲国产清纯| 欧美精品亚洲精品| 99精品热6080yy久久| 欧美精品一区三区| 99这里只有精品| 欧美日韩一二三区| 亚洲一区在线视频| 国产精品一区二区在线观看| 欧美亚洲日本国产| 国产亚洲欧美激情| 久久免费视频在线| 亚洲国产mv| 欧美日韩精选| 亚洲色图制服丝袜| 国产伦精品一区二区三区免费| 欧美一区国产一区| 国内外成人在线视频| 美女精品在线| 欧美日韩精品国产| 亚洲精品久久久久| 欧美日韩在线播| 午夜久久久久| 极品尤物av久久免费看| 欧美成人免费网站| 正在播放亚洲| 国产婷婷97碰碰久久人人蜜臀| 久久精品盗摄| 亚洲激情第一区| 欧美日韩在线一区二区三区| 亚洲欧美国产va在线影院| 国产亚洲欧洲997久久综合| 久久亚洲一区二区三区四区| 亚洲精品中文字幕在线| 国产精品久久久久9999吃药| 欧美一区二区三区四区在线 | 国产一区二区三区直播精品电影 | 欧美性猛交视频| 欧美专区第一页| 亚洲韩国青草视频| 国产精品爱久久久久久久| 欧美一区二区三区成人| 亚洲高清久久久| 欧美视频在线观看免费网址| 欧美一区二视频| 亚洲日本在线观看| 国产精品人人爽人人做我的可爱| 久久蜜桃av一区精品变态类天堂| 亚洲精品乱码久久久久久日本蜜臀 | 久久青草福利网站| 亚洲毛片在线观看.| 免费视频一区二区三区在线观看| 在线视频亚洲| 伊大人香蕉综合8在线视| 欧美日韩亚洲一区二区三区| 久久久青草青青国产亚洲免观| av成人激情| 影音国产精品| 国产精品乱人伦一区二区| 猛男gaygay欧美视频| 亚洲资源在线观看| 亚洲人成高清| 国内揄拍国内精品少妇国语| 欧美日韩国产精品一区二区亚洲| 欧美在线视频一区二区| 亚洲精品综合久久中文字幕| 国产亚洲综合在线| 欧美视频一区二区三区…| 久久综合狠狠综合久久综青草| 亚洲伊人一本大道中文字幕| 亚洲激情欧美激情| 国产一区二区三区奇米久涩| 欧美无砖砖区免费| 欧美成人高清| 久久国产主播| 亚洲一区二区精品| 亚洲国产欧美另类丝袜| 国产亚洲欧美日韩精品| 国产精品xxxxx| 欧美大胆人体视频| 久久精品国语| 亚洲综合另类| 日韩系列欧美系列| 在线免费观看日本一区| 国产欧美日韩精品丝袜高跟鞋| 欧美日韩国产一区二区| 免费观看久久久4p| 久久精品日韩一区二区三区| 午夜日韩福利| 亚洲特色特黄| 中文av一区特黄| 亚洲精品久久久久中文字幕欢迎你| 国产午夜精品一区二区三区视频| 欧美视频免费在线| 欧美日本韩国一区二区三区| 女人天堂亚洲aⅴ在线观看| 久久高清国产| 欧美主播一区二区三区| 亚洲欧美乱综合| 亚洲天堂av高清| 亚洲色无码播放| 一区二区三区毛片| 99精品视频免费观看视频| 亚洲精品社区| 亚洲人成亚洲人成在线观看图片 | 国产精品大全| 欧美视频一二三区| 欧美日韩三级| 欧美日韩一区自拍| 欧美日韩你懂的| 欧美裸体一区二区三区| 欧美日产在线观看| 欧美精品久久久久久久久久| 欧美激情精品久久久久久免费印度| 免费在线成人av| 免费在线一区二区| 男人插女人欧美| 欧美电影在线观看| 欧美精品videossex性护士| 欧美激情第一页xxx| 欧美激情视频一区二区三区不卡| 牛牛国产精品| 欧美精品99| 欧美日韩在线播放三区四区| 欧美三级网址| 国产精品美女一区二区| 国产精品视频免费|