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

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

純 CSS 實現標簽自動顯示超出數量

來源: 責編: 時間:2024-05-09 09:26:18 164觀看
導讀現代CSS強大的令人難以置信。這次我們來用 CSS 實現這樣一個功能:有多個寬度不同的標簽水平排列,當外層寬度不足時,會提示超出的數量,演示效果如下圖片如果讓我用 JavaScript來實現估計都有點折騰,畢竟寬度都是動態的,要監

現代CSS強大的令人難以置信。5cO28資訊網——每日最新資訊28at.com

這次我們來用 CSS 實現這樣一個功能:有多個寬度不同的標簽水平排列,當外層寬度不足時,會提示超出的數量,演示效果如下5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

如果讓我用 JavaScript來實現估計都有點折騰,畢竟寬度都是動態的,要監聽各部分的尺寸變化,包括標簽的位置和外層的寬度,總之不是一兩行代碼就能搞定的。5cO28資訊網——每日最新資訊28at.com

現如今,純CSS也能完美的實現這樣的效果,而且比 JS 實現更加簡單,一起來看看吧5cO28資訊網——每日最新資訊28at.com

一、CSS 實現思路

很多時候,CSS并沒有直接的實現方式,需要“繞”點彎路,將需求拆分成很多小點,然后逐一突破。5cO28資訊網——每日最新資訊28at.com

回到本文這里,其實有幾個問題需要考慮:5cO28資訊網——每日最新資訊28at.com

  1. CSS 如何動態累計數字?
  2. CSS 如何知道哪些元素在容器之外?
  3. CSS 如何區分是否溢出(顯示數量)

關于第3點,其實在之前這篇文章中有詳細介紹,有興趣可以回顧一下,非常有意思5cO28資訊網——每日最新資訊28at.com

純 CSS 檢測文本是否溢出5cO28資訊網——每日最新資訊28at.com

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

那么第一點,CSS有沒有什么方式可以統計數量呢?5cO28資訊網——每日最新資訊28at.com

沒錯,相信很多小伙伴已經猜到了,就是利用 CSS計數器,示意如下5cO28資訊網——每日最新資訊28at.com

counter-reset: num var(--num);counter-increment: num;::after{	content: "+"counter(num);}

關于計數器,我之前也在很多文章中有用到5cO28資訊網——每日最新資訊28at.com

你可能不需要 JS!CSS實現一個計時器5cO28資訊網——每日最新資訊28at.com

如何讓CSS計數器支持小數的動態變化?5cO28資訊網——每日最新資訊28at.com

還在使用定時器嗎?CSS 也能實現電子時鐘5cO28資訊網——每日最新資訊28at.com

動畫合成小技巧!CSS 實現動感的倒計時效果5cO28資訊網——每日最新資訊28at.com

自定義計數器小技巧!CSS 實現長按點贊累積動畫5cO28資訊網——每日最新資訊28at.com

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

然后是第二點,CSS有什么方式可以知道元素是出去了還是在視野之內呢?5cO28資訊網——每日最新資訊28at.com

如果是用 JS來判斷的話,最穩妥的方式應該Intersection Observer(交叉觀察者),相信很多同學都用過,這個在圖片懶加載非常有用5cO28資訊網——每日最新資訊28at.com

交叉觀察器 API - Web API 接口參考 | MDN (mozilla.org)[1]5cO28資訊網——每日最新資訊28at.com

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

那么,CSS中有什么類似的呢?沒錯,還是之前提到過的CSS滾動驅動動畫。5cO28資訊網——每日最新資訊28at.com

不過這里用到的是視圖進度,也就是關注的是元素自身位置,元素進入到容器范圍之內就會觸發動畫,非常類似 JS中的Intersection Observer5cO28資訊網——每日最新資訊28at.com

tag{  animation: appear;  animation-timeline: view(inline);  animation-range: contain;}@keyframes appear{  to {    background-color: #9747FF;  }}

這里就不詳細介紹了,有興趣回顧之前這篇文章5cO28資訊網——每日最新資訊28at.com

CSS 滾動驅動動畫終于正式支持了~ 5cO28資訊網——每日最新資訊28at.com

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

好了,關鍵原理就這些了,我們需要做的就是想辦法將「計數器」和「元素進出容器范圍」關聯起來就行了,接著往下看5cO28資訊網——每日最新資訊28at.com

二、CSS 計數器

利用 CSS 計數器,我們可以很輕松的統計元素的數量。5cO28資訊網——每日最新資訊28at.com

先簡單布局一下文章開頭的例子,HTML如下所示5cO28資訊網——每日最新資訊28at.com

<div class="con">  <a class="tag">HTML</a>  <a class="tag">CSS</a>  <a class="tag">JavaScript</a>  <a class="tag">Flutter</a>  <a class="tag">Vue</a>  <a class="tag">React</a>  <a class="tag">Svelte</a></div><span class="num"></span><!--用來計數的標簽-->

然后美化一下5cO28資訊網——每日最新資訊28at.com

.con{  display: flex;  gap: 5px;  padding: 5px;  overflow: hidden;}.tag{  padding: .2em .5em;  background-color: #c49ef5;  color: #fff;  border-radius: 4px;  animation: appear;}.num::after{  content: "+0";  padding: .2em .5em;  background-color: #FFE8A3;  color: #191919;  border-radius: 4px;}

這樣就得到了水平排列的 tag 布局(超出隱藏),后面跟一個數字5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

現在我們定義一個計數器,然后通過每個tag進行累計,有多個tag相當于多少次累加,最后在::after中顯示出來5cO28資訊網——每日最新資訊28at.com

.con{  counter-reset: num;  /*計數器初始值,默認為0*/}.tag{  counter-increment: num; /*計數器增量值,默認為1*/}.num::after{  content: "+"counter(num); }

默認計數器的起始值是 0,每次累計是1,所以這里最后得到了7,這樣就能實時統計元素的數量了5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

當然,我們也可以自定義這些默認值,比如5cO28資訊網——每日最新資訊28at.com

.con{  counter-reset: num 10;}.tag{  counter-increment: num -1;}

這種情況下,起始值是10,增量值是-1,所以最后得到了3,如下5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

那么,該如何統計容器之外的標簽數量呢?5cO28資訊網——每日最新資訊28at.com

三、CSS 滾動驅動動畫

這里我們要利用CSS 視圖進度時間軸,也就是觀察元素自身的位置,在進入到容器范圍之內執行動畫。5cO28資訊網——每日最新資訊28at.com

拿上面這個例子,我們給標簽添加一個動畫,讓標簽在進入到容器之內時變個顏色,實現如下5cO28資訊網——每日最新資訊28at.com

.tag{  animation: appear;  animation-timeline: view(inline);}@keyframes appear{  to {    background-color: #4d47ff;  }}

由于是水平方向,所以這里需要設置view(inline) ,效果如下5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

好像不是很明顯?這是因為動畫是在整個視區內過渡的,我們可以改變動畫時間線的區間animation-range,讓這個動畫在進出的一瞬間就變化5cO28資訊網——每日最新資訊28at.com

.tag{  animation: appear;  animation-timeline: view(inline);  animation-range: contain;}@keyframes appear{  from,to {    background-color: #4d47ff;  }}

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

圖片圖片5cO28資訊網——每日最新資訊28at.com

那么,這個效果和前面的計數器有什么關聯呢?5cO28資訊網——每日最新資訊28at.com

從效果上來看,在視區內會執行一個動畫,如果在這個動畫中加入計數器的累加會怎么樣呢?先去除原先的累加器5cO28資訊網——每日最新資訊28at.com

.tag{  /* counter-increment: num; */}@keyframes appear{  from,to {    background-color: #4d47ff;    counter-increment: num;  }}

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

圖片圖片5cO28資訊網——每日最新資訊28at.com

可以看到計數器已經生效了,不過現在統計的在「可視區內」標簽的數量。而我們要統計的是「可視區外」的數量,好像反過來了,如何實現呢?5cO28資訊網——每日最新資訊28at.com

這里有兩種思路。5cO28資訊網——每日最新資訊28at.com

第一種,用總數減去可視區內的數量,不就行了嗎?由于現在動畫是針對可視區內的,我們可以給計數器設置一個初始值,就是總量,然后動畫中給累加值設置為-1,就相當于減去當前數量了,實現如下5cO28資訊網——每日最新資訊28at.com

.con{	counter-reset: num 7;}@keyframes appear{  from,to {    background-color: #4d47ff;    counter-increment: num -1;  }}

這樣就完美統計出了可視區外的數量了5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

還有一種方式,我覺得更加巧妙,需要反向思考。原理是重置當前的累加值,比如默認情況下,正常累加,進入可視范圍,把累加值設置為0,不就相當于可視區外的正常累加了嗎?5cO28資訊網——每日最新資訊28at.com

.tag{  counter-increment: num;}@keyframes appear{  from,to {    background-color: #4d47ff;    counter-increment: num 0;  }}

同樣能達到相同的效果5cO28資訊網——每日最新資訊28at.com

圖片圖片5cO28資訊網——每日最新資訊28at.com

現在基本已經達到我們需要的效果了5cO28資訊網——每日最新資訊28at.com

四、其他細節修正

首先是,在超出范圍時,需要在邊緣出添加一個半透明蒙層,這樣體驗效果會更好。5cO28資訊網——每日最新資訊28at.com

半透明蒙層很好實現,只需要添加一個水平漸變的mask遮罩就行了5cO28資訊網——每日最新資訊28at.com

.con{  -webkit-mask: linear-gradient(to right, #fff calc(100% - 30px), transparent);}

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

那么,如何在沒有超出時,不出現這個遮罩呢?5cO28資訊網——每日最新資訊28at.com

這個其實在之前的文章中有詳細介紹了,建議回顧一下5cO28資訊網——每日最新資訊28at.com

純 CSS 檢測文本是否溢出5cO28資訊網——每日最新資訊28at.com

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

利用CSS滾動驅動動畫,可以檢測容器是否可滾動,也就是是否超出。所以我們只需要將遮罩放在滾動驅動動畫里就行了,關鍵實現如下5cO28資訊網——每日最新資訊28at.com

.con{  animation: check;  animation-timeline: scroll(x self);}@keyframes check{  from,to {    -webkit-mask: linear-gradient(to right, #fff calc(100% - 30px), transparent);  }}

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

還有一個問題,希望在沒有超出的時候不顯示后面的數量。5cO28資訊網——每日最新資訊28at.com

關于這個,我本來是打算用樣式查詢來實現,但是遇到了一個問題,由于樣式查詢只能匹配到子元素,所以不得不將顯示數量的標簽放到.con容器內。但是這樣一來,mask遮罩就會出現問題,就像這樣5cO28資訊網——每日最新資訊28at.com

遮罩層連同數量標簽一起被裁剪了!5cO28資訊網——每日最新資訊28at.com

于是又想出了另一種方案,這個在以前的布局中其實用到的更多,那就是負margin。5cO28資訊網——每日最新資訊28at.com

實現很簡單,給標簽容器一個的負margin-right,這樣,右邊的數量就會被左邊的標簽蓋住,比如5cO28資訊網——每日最新資訊28at.com

.con{  margin-right: -20px;}

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

是不是已經被蓋住一部分了?我們繼續向左偏移5cO28資訊網——每日最新資訊28at.com

.con{  margin-right: -50px;}

這樣就完全看不到右邊的數量了5cO28資訊網——每日最新資訊28at.com

那么,如何在超出時顯示數量呢?這里就體現出負margin的好處了,可以借助前一個元素來隱藏后一個元素,在這里,我們直接在前面的動畫中還原margin就行了5cO28資訊網——每日最新資訊28at.com

.con{  animation: check;  animation-timeline: scroll(x self);}@keyframes check{  from,to {    -webkit-mask: linear-gradient(to right, #fff calc(100% - 30px), transparent);    margin-right: 0;  }}

這樣就完美實現了文章開頭所示效果了5cO28資訊網——每日最新資訊28at.com

你也可以訪問以下鏈接來體驗真實效果(Chrome115+)5cO28資訊網——每日最新資訊28at.com

  • CSS auto tag num (juejin.cn)[2]
  • CSS auto tag num (codepen.io)[3]

五、總結一下

以上就是本文的全部內容了,不知道你學會了嗎?下面總結一下實現重點:5cO28資訊網——每日最新資訊28at.com

  1. 很多時候,CSS并沒有直接的實現方式,需要“繞”點彎路
  2. CSS計數器可以實現數字累加
  3. CSS滾動驅動動畫可以檢測元素是否在可視范圍之內
  4. CSS滾動驅動動畫還能檢測元素是否內容超出
  5. 計數累加器可以放在滾動驅動動畫中,這樣在動畫觸發時也就相當于計數器生效了,這樣就能統計可視區的標簽數量了
  6. 樣式查詢只能匹配到子元素,但是用子元素會受到mask遮罩的影響
  7. 負margin可以借助前一個元素來隱藏后一個元素

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

本文鏈接:http://www.tebozhan.com/showinfo-26-87492-0.html純 CSS 實現標簽自動顯示超出數量

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

上一篇: RabbitMQ如何保證消息可靠性?

下一篇: 如何在Ollama創建自定義模型?構建本地大模型

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top