精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發 前端
時代在進步,CSS也在不斷發展。 CSS 容器查詢出來也有一段時間了,能夠動態判斷容器尺寸,趕緊拿來用一下,發現并沒有想象中的那么順利,甚至還有些難用,一起看看吧!

之前寫過這樣一篇文章:CSS 實現多行文本“展開收起”,介紹了一些純 CSS 實現多行文本展開收起的小技巧,非常巧妙,有興趣的可以回顧一下。

不過展開收起按鈕的隱藏和顯示采用了“障眼法”,也就是通過一個偽元素設置和背景相同的顏色覆蓋實現的,如下:

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

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

CSS 容器查詢,顧名思義,就是可以動態查詢到容器的尺寸,然后設置不同的樣式。

比如有這樣一個容器。

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

簡單美化一下。

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

效果如下:

現在這個容器寬度是 350px,現在希望在寬度小于 250px時文字顏色變為綠色,要怎么做呢?

非常簡單,只需要規定一下容器的類型,然后寫一個查詢語句就行了,關鍵實現如下:

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

這樣在動態改變元素尺寸時就會自動改變顏色了,效果如下

是不是非常簡單?

可事實是這樣嗎,其實還有很多局限。

二、容器查詢的局限

主要是有兩點局限。

第一點,容器查詢不可更改容器本身樣式,比如像這樣,直接改顏色是不生效的。

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

白白浪費了一層標簽。

也無法通過:has去匹配父級。

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

還有一點問題更大,容器必須手動指明尺寸,不可以由內容撐開,也就是自適應內容尺寸,比如我們將上面的寬高去除

可以看到,在設置成容器查詢類型后,「容器的寬高都變成了 0」,必須手動設置寬高。

所以,在實際應用中,必須要想辦法規避這兩個問題。

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

現在回頭看多行文本的例子,通過之前的文章,我們可以很“輕松”的實現這樣一個布局,如果不太清楚的可以回顧一下,這里就不多描述了

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

相關樣式如下:

.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: '收起';
}

這樣就得到了一個“右下角”可以展開收起的布局,不過目前按鈕是始終可見的。

我們嘗試用容器查詢來判斷一下:

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

結果...高度都變成了 0。

所以直接添加是不行的。

有什么辦法可以讓容器查詢可以自適應內容高度呢?我這里想到的辦法是,外層用一個自適應內容高度的容器,然后容器查詢盒子用絕對定位的方式,高度跟隨外層,原理如下:

因此,我們需要添加兩層,一層作為自適應內容的容器,一層作為容器查詢盒子,自適應內容的文本可以用偽元素來代替,和真實內容保持一致就行了。

<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座位容器查詢盒子。

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

雖然現在有點亂,但容器查詢已經生效了,在小于等于4.5em(3行)的時候,右下角按鈕已經消失了。

如果隱藏占位偽元素,其實是這樣的。

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

.text{
  position: absolute
}

同時將占位偽元素隱藏后,效果如下:

現在高度都回到了0,因此我們需要額外一份文本來自適應最外層容器,而且也能展開收起。

<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>

我們只需要它的高度,所以可以設置為不可見。

.text-place{
  visibility: hidden;
}

這樣容器的高度其實是由text-place這一層撐開的,效果如下:

總算實現了動態查詢自適應文本容器高度,效果如下:

還有很多細節,可以查看以下 demo。

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

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

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

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

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

[1]容器查詢: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Container_Queries。

[2]CSS @container clamp (juejin.cn): https://code.juejin.cn/pen/7312418754502066214。

[3]CSS @container clamp (codepen.io): https://codepen.io/xboxyan/pen/oNmRbvR。

責任編輯:姜華 來源: 前端偵探
相關推薦

2021-07-27 07:31:16

CSS 元素切換

2023-03-27 09:25:21

CSS自定義彩色字體

2017-04-07 11:45:25

CSSDIV前端

2023-07-28 10:21:46

CSS前端

2022-08-02 06:39:06

多行文本CSS

2025-08-11 09:13:31

2010-09-09 10:23:23

DIVCSS垂直居中

2025-08-18 09:18:46

2024-04-15 09:22:48

CSS鎖定overflow

2023-02-20 09:48:00

CSS浮動布局

2022-10-24 17:57:06

CSS容器查詢

2014-10-24 17:01:15

微軟Docker

2023-02-19 09:02:22

2023-05-24 16:39:30

CSS技巧開發

2010-08-24 14:47:48

CSS居中

2020-12-31 05:37:05

HiveUDFSQL

2018-03-27 13:33:48

百度

2021-08-30 07:57:26

OpenAttack文本對抗攻擊

2012-05-09 10:22:44

JavaMEJava

2014-11-17 15:20:07

SAPSAP HANA業務轉型
點贊
收藏

51CTO技術棧公眾號

国产盗摄在线观看| 国产乱淫a∨片免费观看| 亚洲区小说区图片区qvod按摩 | 综合一区中文字幕| 风流老熟女一区二区三区| 香蕉国产精品偷在线观看不卡| 在线视频一区二区| 精品久久久久久无码人妻| 樱桃视频成人在线观看| 亚洲视频一二三区| 免费久久久一本精品久久区| av网站在线免费看| 日韩av一二三| 91福利视频网| www.色小姐com| 国产精品羞羞答答在线观看 | 国产精品久久久久久久久久| 欧美日韩大片在线观看| 中文字幕精品影院| 日韩三级免费观看| av动漫免费看| 欧美精品videossex少妇| 中文字幕欧美日本乱码一线二线 | 久久av免费| 精品欧美黑人一区二区三区| 天天干天天综合| 北岛玲heyzo一区二区| 亚洲综合区在线| 一区二区三区av在线| 日韩欧美亚洲系列| 不卡视频一二三| 96成人在线视频| 91在线视频国产| 日韩精品五月天| 欧美一级bbbbb性bbbb喷潮片| 国产亚洲成人精品| 综合天堂av久久久久久久| 色七七影院综合| 黄大色黄女片18免费| 久久97视频| 亚洲欧美日韩在线一区| 精品人妻一区二区三区香蕉| 久久这里只有精品一区二区| 欧美成人r级一区二区三区| 涩多多在线观看| 色8久久久久| 欧美日韩在线观看一区二区| 不卡av免费在线| 欧美二三四区| 在线亚洲一区二区| 亚洲色欲综合一区二区三区| 欧美a级在线观看| 午夜电影网一区| 久久综合九色综合88i| 毛片在线导航| 亚洲不卡一区二区三区| 国产精品又粗又长| 日本三级一区| 欧美日韩另类视频| 一本色道无码道dvd在线观看| 少妇视频一区| 在线免费观看日韩欧美| 最新中文字幕免费视频| 日韩在线你懂得| 日韩欧美一二区| 国产成人av无码精品| 另类ts人妖一区二区三区| 日韩高清有码在线| 91网站免费入口| 成人av国产| 久久亚洲综合国产精品99麻豆精品福利| 亚洲怡红院在线观看| 午夜电影亚洲| 97色在线视频| 无码视频在线观看| 久久aⅴ国产欧美74aaa| 98国产高清一区| 天堂а√在线8种子蜜桃视频| 久久久久久亚洲综合| 色一情一乱一伦一区二区三欧美| 91官网在线| 一区二区三区在线观看欧美| heyzo亚洲| 日本成人福利| 欧美一二三四在线| 制服丝袜第二页| 国产大片一区| 91成人在线播放| 97成人免费视频| 99热精品一区二区| 一本久道久久综合| √8天堂资源地址中文在线| 91精品91久久久中77777| 日本久久久久亚洲中字幕| 99re国产在线| 国产精品影音先锋| 蜜桃麻豆91| 高清全集视频免费在线| 欧美日韩中国免费专区在线看| av污在线观看| 91精品丝袜国产高跟在线| 亚洲欧美国产精品| 欧美成人黄色网| 日韩中文字幕一区二区三区| 99高清视频有精品视频| 国产永久免费高清在线观看视频| 亚洲人成精品久久久久久| 欧美成人xxxxx| 一区二区三区高清在线观看| 在线观看国产精品91| 日韩黄色一级大片| 国产成人av资源| 亚洲国产精品一区二区第一页 | 国产美女视频免费看| 少妇精品导航| 欧美裸体xxxx极品少妇| 最新中文字幕免费| 99re热这里只有精品免费视频| 一区二区在线观| 精品欧美一区二区三区在线观看| 亚洲成人精品视频在线观看| 国产精品99久久久久久成人| 日日夜夜一区二区| 黑人中文字幕一区二区三区| av激情在线| 欧美人狂配大交3d怪物一区| 中文字幕人妻一区二区三区在线视频| 狠狠爱成人网| 91gao视频| 超碰在线观看免费版| 欧美人xxxx| 538精品视频| 久久久夜夜夜| 欧美日产一区二区三区在线观看| 看黄在线观看| 日韩精品一区二区视频| 久久久久久久伊人| 国产成人av福利| 国产一级大片免费看| 成人在线日韩| 久久久91精品国产| 在线免费看av片| 国产精品久久久久桃色tv| www.激情小说.com| 日本在线电影一区二区三区| 国产精品自拍小视频| 91涩漫在线观看| 欧美性欧美巨大黑白大战| 免费看黄色av| 人人爽香蕉精品| 一区二区三区四区欧美日韩| 亚洲青青久久| 欧美另类极品videosbestfree| 99久久国产免费| 一区二区在线观看视频| 成人啪啪18免费游戏链接| 亚洲午夜电影| 精品视频第一区| 一区二区三区短视频| 亚洲美女喷白浆| 在线免费一区二区| 中文字幕亚洲电影| 久久黄色一级视频| 亚洲一区二区三区四区五区午夜| 久久精品国产99精品国产亚洲性色| 深夜成人在线| 国产亚洲xxx| 国产精品无码在线播放| 亚洲一二三区不卡| 欧美黄色一级生活片| 久久 天天综合| 欧美国产日韩激情| 国产欧美高清视频在线| 成人伊人精品色xxxx视频| 日本一本在线免费福利| 日韩国产精品视频| 最新国产中文字幕| 亚洲一区在线播放| 熟女俱乐部一区二区| 精品午夜久久福利影院| 国产成人永久免费视频| 免费一区二区| 亚洲wwwav| 中文字幕在线视频久| 日韩专区中文字幕| 欧美 日韩 国产 在线| 欧美在线制服丝袜| 久久久久久天堂| 国产亚洲精品7777| 宇都宫紫苑在线播放| 免费久久99精品国产自在现线| 一区二区三区四区欧美日韩| 欧美色图婷婷| 亚洲wwwav| 日韩欧美一区二区三区在线观看| 欧美成年人视频| 黄色在线播放| 精品99一区二区三区| 中文字幕人妻一区二区三区视频 | 在线观看毛片av| 亚洲成人午夜电影| 999精品在线视频| 久久精品欧美日韩精品| 少妇献身老头系列| 青青草97国产精品免费观看无弹窗版 | 欧洲一区二区视频| 国产欧美黑人| 中文字幕精品网| 亚洲色偷精品一区二区三区| 91精品国产综合久久精品 | 欧美日韩国产影片| 国产女同在线观看| 一个色综合av| 中日韩一级黄色片| 国产日产亚洲精品系列| 老司机免费视频| 国产一区二区h| 男女污污的视频| 亚洲在线成人| 97碰在线视频| 久久精品亚洲人成影院| 婷婷精品国产一区二区三区日韩| 久久a爱视频| 成人黄色在线免费观看| 亚洲男人在线| 国产精品一区二区久久国产| 日韩成人亚洲| 日韩免费观看网站| 捆绑调教日本一区二区三区| 久久久视频精品| 日韩伦理电影网站| 欧美精品一本久久男人的天堂| 美女写真理伦片在线看| 日韩中文在线不卡| gogogo高清在线观看免费完整版| 亚洲人成在线观看| 九色在线观看视频| 精品亚洲精品福利线在观看| 五月婷婷在线播放| 亚洲女人天堂色在线7777| 日本福利午夜视频在线| 亚洲国产精品视频在线观看| 欧美一级免费片| 亚洲国产精品久久久久久| 蜜桃在线一区二区| 亚洲国产美女久久久久| 亚洲 欧美 自拍偷拍| 日韩精品亚洲元码| 美女毛片在线看| 中文字幕在线精品| 黄色视屏免费在线观看| 欧美成人合集magnet| 青草影视电视剧免费播放在线观看| 欧美日韩国产成人| 欧美videosex性极品hd| 国模精品系列视频| 三级在线观看视频| 日本午夜人人精品| 欧美与亚洲与日本直播| 成人免费看黄网站| 视频一区日韩| 精品一区久久久久久| 精品中文一区| 亚洲日本精品| 欧美三区在线| 精品99在线视频| 理论片日本一区| www日本在线观看| 91亚洲精品久久久蜜桃| 一级肉体全黄裸片| 综合中文字幕亚洲| 亚州国产精品视频| 欧美艳星brazzers| 国产高清在线免费| 日韩精品在线观看一区| √新版天堂资源在线资源| 久久91亚洲精品中文字幕| 欧美aa免费在线| 91精品啪aⅴ在线观看国产| 91成人噜噜噜在线播放| 久久精品日韩| 国产精品7m凸凹视频分类| 成人免费播放器| 免费成人美女在线观看| 苍井空张开腿实干12次| 久久久久久久久一| 免费国产羞羞网站美图| 欧美日韩精品二区| 91亚洲国产成人精品一区| 日韩精品在线观看视频| av毛片在线| 国产精品海角社区在线观看| 亚洲一区二区免费在线观看| 日韩激情视频| 亚洲高清av| 老司机午夜性大片| aa级大片欧美| 黄色香蕉视频在线观看| 色综合久久综合网欧美综合网 | 亚洲日本韩国在线| 欧美日韩大陆在线| 天堂成人在线| 欧美激情二区三区| 日韩一区二区三区四区五区 | 巨大荫蒂视频欧美大片| 2018中文字幕一区二区三区| 麻豆精品国产| 天天爽天天狠久久久| 亚洲深夜激情| 中文字幕第六页| 国产精品久99| 亚洲精品久久久久久久蜜桃| 精品伦理精品一区| 国产三区在线观看| 国产精品日韩一区| 中文字幕亚洲影视| 欧美 日韩 亚洲 一区| 国产精品一区二区黑丝| 亚洲AV成人无码网站天堂久久| 欧美日韩中文字幕在线| 色综合视频在线| 色综合视频网站| 粉嫩一区二区三区在线观看| 四虎永久国产精品| 蜜乳av另类精品一区二区| 老司机免费视频| 亚洲高清中文字幕| 国模人体一区二区 | 色是在线视频| 国产青春久久久国产毛片| 欧美国产91| 国产成人精品综合久久久久99| 综合欧美亚洲日本| 国产免费av电影| 欧美精品免费在线| 日韩高清一区| 91嫩草国产丨精品入口麻豆| 韩国v欧美v日本v亚洲v| 91精品少妇一区二区三区蜜桃臀| 欧美性xxxxxxxx| 在线视频91p| 成人国产精品久久久| 国产国产精品| 久久黄色一级视频| 亚洲成人一区二区| 亚洲欧美综合一区二区| 57pao国产精品一区| 香蕉久久99| www.xxx亚洲| 最新国产成人在线观看| 91精品国产乱码久久久| 久久天天躁狠狠躁老女人| 久久在线观看| av网站手机在线观看| eeuss影院一区二区三区| 永久免费看片在线播放| 亚洲欧美中文另类| 欧美综合社区国产| 天天综合五月天| 粉嫩久久99精品久久久久久夜| 久草视频精品在线| 日韩精品在线观| 国产成人精品一区二区三区免费| 做爰高潮hd色即是空| 国产成人精品www牛牛影视| 国产情侣在线视频| 一区二区三区精品99久久| 亚洲国产伊人| 国产3p露脸普通话对白| 久久久噜噜噜久久人人看| 91国内精品久久久| 久久久亚洲福利精品午夜| 一本久久青青| 天堂在线中文在线| 亚洲国产欧美一区二区三区丁香婷| 手机看片一区二区三区| 国产精品成人aaaaa网站| 99久久.com| 亚洲国产果冻传媒av在线观看| 欧美丝袜美女中出在线| 日本在线观看网站| 国产尤物99| 久久99精品视频| 日韩精品手机在线| 中文字幕av一区二区| 婷婷视频一区二区三区| 欧美三级午夜理伦三级| 亚洲日韩欧美一区二区在线| 午夜国产在线视频| 成人淫片在线看| 久久天堂成人| 免费人成视频在线| 在线精品国产成人综合| 北条麻妃在线一区二区免费播放| 男人插女人下面免费视频| 夜夜精品视频一区二区| 天堂а√在线资源在线| 久久国产精品一区二区三区| 国产一区视频网站| 狠狠人妻久久久久久综合|