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

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

嘗試借助CSS @container實現多行文本展開收起

來源: 責編: 時間:2023-12-18 09:46:36 246觀看
導讀之前寫過這樣一篇文章:CSS 實現多行文本“展開收起”,介紹了一些純 CSS 實現多行文本展開收起的小技巧,非常巧妙,有興趣的可以回顧一下。不過展開收起按鈕的隱藏和顯示采用了“障眼法”,也就是通過一個偽元素設置和背景相

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

之前寫過這樣一篇文章:CSS 實現多行文本“展開收起”,介紹了一些純 CSS 實現多行文本展開收起的小技巧,非常巧妙,有興趣的可以回顧一下。ZG228資訊網——每日最新資訊28at.com

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

不過展開收起按鈕的隱藏和顯示采用了“障眼法”,也就是通過一個偽元素設置和背景相同的顏色覆蓋實現的,如下:ZG228資訊網——每日最新資訊28at.com

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

:時代在進步,CSS也在不斷發展。 CSS 容器查詢[1]出來也有一段時間了,能夠動態判斷容器尺寸,趕緊拿來用一下,發現并沒有想象中的那么順利,甚至還有些難用,一起看看吧ZG228資訊網——每日最新資訊28at.com

一、簡單介紹一下容器查詢

CSS 容器查詢,顧名思義,就是可以動態查詢到容器的尺寸,然后設置不同的樣式。ZG228資訊網——每日最新資訊28at.com

比如有這樣一個容器。ZG228資訊網——每日最新資訊28at.com

<div class="card">  <h2>歡迎關注前端偵探</h2></div>

簡單美化一下。ZG228資訊網——每日最新資訊28at.com

.card{  display: grid;  place-content: center;  width: 350px;  height: 200px;  background-color: #FFE8A3;  border-radius: 8px;  border: 1px dashed #9747FF;}

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

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

現在這個容器寬度是 350px,現在希望在寬度小于 250px時文字顏色變為綠色,要怎么做呢?ZG228資訊網——每日最新資訊28at.com

非常簡單,只需要規定一下容器的類型,然后寫一個查詢語句就行了,關鍵實現如下:ZG228資訊網——每日最新資訊28at.com

.card{  /**/  container-type: size;}@container (width < 250px){  .card h2{    color: #14AE5C;  }}

這樣在動態改變元素尺寸時就會自動改變顏色了,效果如下ZG228資訊網——每日最新資訊28at.com

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

是不是非常簡單?ZG228資訊網——每日最新資訊28at.com

可事實是這樣嗎,其實還有很多局限。ZG228資訊網——每日最新資訊28at.com

二、容器查詢的局限

主要是有兩點局限。ZG228資訊網——每日最新資訊28at.com

第一點,容器查詢不可更改容器本身樣式,比如像這樣,直接改顏色是不生效的。ZG228資訊網——每日最新資訊28at.com

.card{  /**/  container-type: size;}@container (width < 250px){  .card{    color: #14AE5C;  }}

白白浪費了一層標簽。ZG228資訊網——每日最新資訊28at.com

也無法通過:has去匹配父級。ZG228資訊網——每日最新資訊28at.com

.card{  /**/  container-type: size;}@container (width < 250px){  body:has(.card h2){    color: #14AE5C;  }}

還有一點問題更大,容器必須手動指明尺寸,不可以由內容撐開,也就是自適應內容尺寸,比如我們將上面的寬高去除ZG228資訊網——每日最新資訊28at.com

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

可以看到,在設置成容器查詢類型后,「容器的寬高都變成了 0」,必須手動設置寬高。ZG228資訊網——每日最新資訊28at.com

所以,在實際應用中,必須要想辦法規避這兩個問題。ZG228資訊網——每日最新資訊28at.com

三、多行文本展開收起中的應用

現在回頭看多行文本的例子,通過之前的文章,我們可以很“輕松”的實現這樣一個布局,如果不太清楚的可以回顧一下,這里就不多描述了ZG228資訊網——每日最新資訊28at.com

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

相關樣式如下:ZG228資訊網——每日最新資訊28at.com

.text-wrap{  display: flex;  position: relative;  width: 300px;  padding: 8px;  outline: 1px dashed #9747FF;  border-radius: 4px;  line-height: 1.5;  text-align: justify;  font-family: cursive;}.expand{  font-size: 80%;  padding: .2em .5em;  background-color: #9747FF;  color: #fff;  border-radius: 4px;  cursor: pointer;}.expand::after{  content: '展開';}.text-content{  display: -webkit-box;  -webkit-box-orient: vertical;  -webkit-line-clamp: 3;  overflow: hidden;}.text-content::before{  content: '';  float: right;  height: calc(100% - 24px);}.expand{  float: right;  clear: both;  position: relative;}.text-wrap:has(:checked) .text-content{  -webkit-line-clamp: 999;}.text-wrap:has(:checked) .expand::after{  content: '收起';}

這樣就得到了一個“右下角”可以展開收起的布局,不過目前按鈕是始終可見的。ZG228資訊網——每日最新資訊28at.com

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

我們嘗試用容器查詢來判斷一下:ZG228資訊網——每日最新資訊28at.com

.text-wrap{  /**/  container-type: size;}

結果...高度都變成了 0。ZG228資訊網——每日最新資訊28at.com

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

所以直接添加是不行的。ZG228資訊網——每日最新資訊28at.com

有什么辦法可以讓容器查詢可以自適應內容高度呢?我這里想到的辦法是,外層用一個自適應內容高度的容器,然后容器查詢盒子用絕對定位的方式,高度跟隨外層,原理如下:ZG228資訊網——每日最新資訊28at.com

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

因此,我們需要添加兩層,一層作為自適應內容的容器,一層作為容器查詢盒子,自適應內容的文本可以用偽元素來代替,和真實內容保持一致就行了。ZG228資訊網——每日最新資訊28at.com

<div class="text-wrap">    <div class="text" title="歡迎關注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。">      <div class="text-size">        <div class="text-flex">          <div class="text-content">            <label for="check" class="expand"><input type="checkbox" id="check" hidden></label>            歡迎關注前端偵探,這里有一些有趣的、你可能不知道的HTML、CSS、JS小技巧技巧。          </div>        </div>      </div>    </div>  </div>

然后把.text-size座位容器查詢盒子。ZG228資訊網——每日最新資訊28at.com

.text-size{  position: absolute;  inset: 0;  container-type: size;}@container (height <= 4.5em) {  .text-size .expand{    display: none;  }}

雖然現在有點亂,但容器查詢已經生效了,在小于等于4.5em(3行)的時候,右下角按鈕已經消失了。ZG228資訊網——每日最新資訊28at.com

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

如果隱藏占位偽元素,其實是這樣的。ZG228資訊網——每日最新資訊28at.com

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

空出一大段空白確實不雅,由于我們需要查詢的高度是最大高度,所以外層自適應高度不能再變了,相當于 JS 中的 scrollHeight,因此,這層容器需要設置絕對定位,從而不影響最外層容器。ZG228資訊網——每日最新資訊28at.com

.text{  position: absolute}

同時將占位偽元素隱藏后,效果如下:ZG228資訊網——每日最新資訊28at.com

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

現在高度都回到了0,因此我們需要額外一份文本來自適應最外層容器,而且也能展開收起。ZG228資訊網——每日最新資訊28at.com

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

我們只需要它的高度,所以可以設置為不可見。ZG228資訊網——每日最新資訊28at.com

.text-place{  visibility: hidden;}

這樣容器的高度其實是由text-place這一層撐開的,效果如下:ZG228資訊網——每日最新資訊28at.com

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

總算實現了動態查詢自適應文本容器高度,效果如下:ZG228資訊網——每日最新資訊28at.com

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

還有很多細節,可以查看以下 demo。ZG228資訊網——每日最新資訊28at.com

  • CSS @container clamp (juejin.cn)[2]
  • CSS @container clamp (codepen.io)[3]

四、總結:容器查詢還是不太適合

總的來說,容器查詢并沒有想象中那么“好用”,甚至有些難用,也有可能使用過場景并不在這里,雖然最終勉強實現了,但是代價太大了,多了兩份相同的文本內容,HTML結構也復雜了好多。下面總結一下ZG228資訊網——每日最新資訊28at.com

  • 容器查詢可以根據容器的尺寸匹配不同的樣式。
  • 容器查詢并沒有那么“好用”,有兩個局限性。
  • 一個是容器查詢不可更改容器本身樣式,導致白白浪費一層標簽。
  • 還有一個是容器必須手動指明尺寸,不可以由內容撐開,也就是自適應內容尺寸,否則容器尺寸就是 0。
  • 為了規避容器查詢的局限性,使用一層額外的文本充當容器查詢。
  • 使用另一層額外的文本來撐開最外層容器。

僅僅作為嘗試,實際并不推薦,最終結構還是過于復雜,3份相同的內容有些過于冗余,其實HTML結構實現到右下角按鈕那里就可以了,動態高度還是交給 JS去判斷吧。ZG228資訊網——每日最新資訊28at.com

[1]容器查詢: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Container_Queries。ZG228資訊網——每日最新資訊28at.com

[2]CSS @container clamp (juejin.cn): https://code.juejin.cn/pen/7312418754502066214。ZG228資訊網——每日最新資訊28at.com

[3]CSS @container clamp (codepen.io): https://codepen.io/xboxyan/pen/oNmRbvR。ZG228資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-48343-0.html嘗試借助CSS @container實現多行文本展開收起

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

上一篇: 為什么不建議交付靜態鏈接的可執行文件給用戶?

下一篇: 使用 Sidecar CRD 優化 Istio 性能

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創始人雷軍在其微博上發布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
  • iQOO Neo8 Pro搶先上架:首發天璣9200+ 安卓性能之王

    經過了一段時間的密集爆料,昨日iQOO官方如期對外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱這是一款擁有旗艦級性能調校的作品。隨著發布時
Top