精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本在线不卡一区二区| 一级全黄肉体裸体全过程| 国产午夜性春猛交ⅹxxx| 欧美女优在线视频| 欧美亚州韩日在线看免费版国语版| 天堂资源在线亚洲视频| 99久久夜色精品国产亚洲| 99国产精品久久久久久久| 亚洲新中文字幕| 奇米777在线| 中文字幕高清在线播放| 一区在线中文字幕| 久久久久网址| av网站在线免费看| 天堂精品中文字幕在线| 欧美日本在线视频中文字字幕| 亚洲成人黄色av| 91在线一区| 欧美日韩三级视频| 欧美日韩在线中文| 免费在线中文字幕| 国产精品久久99| 欧美精品一区二区视频| xxxwww在线观看| 麻豆精品一区二区av白丝在线| 韩国视频理论视频久久| 午夜三级在线观看| 精品日韩一区| 亚洲精品大尺度| 男人的天堂免费| 久草综合在线| 91福利视频在线| 97久久国产亚洲精品超碰热| 日本视频在线播放| 欧美激情中文不卡| 欧美凹凸一区二区三区视频| 内射后入在线观看一区| 国产成人午夜视频| 成人激情视频在线播放| 探花国产精品一区二区| 免费一区视频| 69影院欧美专区视频| 亚洲精品午夜久久久久久久| 欧美另类专区| 精品中文字幕在线2019| 日本中文字幕免费在线观看| 色一区二区三区四区| 国产一区二区三区四区福利| 三上悠亚影音先锋| 国产精品三级| 亚洲一级片在线看| 91激情视频在线观看| 国产传媒欧美日韩成人精品大片| 日韩成人在线观看| 国产肉体xxxx裸体784大胆| 激情视频极品美女日韩| 亚洲国产日韩欧美在线99| 日本人妻一区二区三区| 91麻豆精品国产91久久久久推荐资源| 日韩一级高清毛片| 制服.丝袜.亚洲.中文.综合懂| 国产一区二区高清在线| 欧美一级国产精品| 天堂在线一区二区三区| 国产精品一级在线观看| 日韩欧美一二三四区| 91精品人妻一区二区三区四区| 中文一区二区三区四区| 精品久久久三级丝袜| 9.1在线观看免费| 农村少妇一区二区三区四区五区| 亚洲欧美成人网| a级在线免费观看| 久久成人综合| 久久成人综合视频| 午夜免费激情视频| 极品中文字幕一区| 日本精品久久久久影院| 免费在线不卡av| 国产精品一区二区黑丝| 国内精品久久久久久久果冻传媒| 嫩草研究院在线| 国产精品美女久久久久久久久久久| 91社在线播放| 1024在线看片你懂得| 色综合中文字幕| 亚欧激情乱码久久久久久久久| 精品91福利视频| 亚洲国产精品999| 国产7777777| 午夜日本精品| 国产成人在线一区二区| 99热这里只有精| 久久精品这里都是精品| 性做爰过程免费播放| 妞干网免费在线视频| 欧美日韩色一区| 亚洲自拍偷拍精品| 色琪琪久久se色| 国产69精品久久久| 中文字幕在线播放日韩| 成人午夜在线免费| 日本一区二区三区视频在线播放 | 你懂的一区二区三区| 日韩午夜在线视频| 国产www在线| 国产成人精品影视| 亚洲成色最大综合在线| 丁香高清在线观看完整电影视频| 欧美亚洲丝袜传媒另类| 国产白袜脚足j棉袜在线观看| 日韩中文首页| 欧美最近摘花xxxx摘花| www天堂在线| 国产精品传媒在线| 日韩中文字幕免费在线| 红杏视频成人| 久久成人精品电影| 在线观看免费视频一区| 久久久蜜桃精品| 国产真人做爰毛片视频直播| 中文字幕日韩亚洲| 国产午夜精品视频| 制服.丝袜.亚洲.中文.综合懂色| 黑人巨大精品欧美一区| 色播五月综合| 亚洲欧美韩国| 日韩欧美国产精品一区| 三级黄色在线观看| 日韩av中文字幕一区二区| 精品国产免费久久久久久尖叫| av毛片在线| 欧美一区二区三区影视| 在线日韩国产网站| 麻豆国产精品一区二区三区| 色姑娘综合网| 韩国女主播一区二区| 亚洲欧美制服另类日韩| wwwwww国产| 99久久精品国产导航| 国产精品www在线观看| 99久久人爽人人添人人澡| 久久的精品视频| 国内精品国产成人国产三级| 亚洲三级在线看| 亚洲制服在线观看| 综合精品一区| 亚洲最大福利视频网| 好操啊在线观看免费视频| 欧美日韩免费观看一区三区| 成人免费视频入口| 六月婷婷色综合| 亚洲人一区二区| 超碰国产精品一区二页| 久久久av电影| 国产视频www| 樱花草国产18久久久久| a级大片免费看| 国内精品久久久久久久影视蜜臀| 成人片在线免费看| 性欧美18~19sex高清播放| 亚洲美女性视频| 久久久久精彩视频| 中文字幕中文乱码欧美一区二区| 中文字幕丰满乱码| 黄色免费成人| 欧美12av| 成人在线日韩| 欧美激情欧美激情| 五月婷婷免费视频| 欧美综合久久久| 国产男女猛烈无遮挡在线喷水| 国产精品一区久久久久| 欧美深夜福利视频| 国产一区二区三区电影在线观看 | 韩国视频理论视频久久| 免费毛片在线| 在线不卡免费av| 日本中文字幕网| 久久久久久99久久久精品网站| 91欧美视频在线| 欧美日韩一区二区高清| 明星裸体视频一区二区| 日韩毛片免费视频一级特黄| 欧美夫妻性生活视频| 免费在线国产| 日韩午夜在线播放| 在线观看污污网站| 亚洲综合久久av| 美女被到爽高潮视频| 国产一区二区美女诱惑| 奇米精品一区二区三区| 天天综合一区| 久久久久se| 精品久久久久久久久久岛国gif| 亚州国产精品久久久| 日本综合在线| 日韩电影中文字幕在线观看| 国产乱人乱偷精品视频| 欧美性xxxxx极品娇小| 黄色a级片在线观看| 久久亚洲精品国产精品紫薇| 奇米777在线| 青草av.久久免费一区| 欧美国产综合在线| 五月久久久综合一区二区小说| 精品亚洲一区二区三区四区五区高| 欧美一级做a| 欧美一级淫片aaaaaaa视频| 丝袜在线观看| 色偷偷偷亚洲综合网另类| 日韩精品123| 日韩欧美综合在线| 一本色道久久综合无码人妻| 粉嫩老牛aⅴ一区二区三区| 久久r这里只有精品| 国产区在线观看成人精品| 久久精品女同亚洲女同13| 国内成人免费视频| 欧美伦理片在线观看| 99国产精品久久久久久久| av在线免费观看国产| 91久久电影| 亚洲欧洲久久| 怕怕欧美视频免费大全| 国产综合18久久久久久| 中文字幕日韩在线| 亚洲free性xxxx护士hd| 国产资源一区| 国产精品偷伦免费视频观看的| 在线毛片观看| 亚洲 日韩 国产第一| 激情av在线播放| 欧美黑人又粗大| 亚洲国产精品精华素| 欧美精品一区二区三区国产精品 | 1000精品久久久久久久久| 手机看片福利视频| 国产情人综合久久777777| 免费看污黄网站在线观看| 91视频精品在这里| 国产极品一区二区| 99精品黄色片免费大全| 国产不卡一二三| 99精品欧美一区二区三区小说| 亚洲精品乱码久久久久久蜜桃欧美| 国产福利视频一区二区三区| 91精产国品一二三| 成人性生交大片免费看中文| 国产chinesehd精品露脸| 成人精品小蝌蚪| 亚洲欧美日韩偷拍| 97久久人人超碰| 一区二区三区久久久久| 国产农村妇女毛片精品久久麻豆 | 屁屁影院国产第一页| 99久久婷婷国产| 青青草视频成人| 久久久五月婷婷| 日本黄区免费视频观看| 136国产福利精品导航| 免费在线观看黄视频| 欧美日韩一区免费| 欧美国产一级片| 欧美妇女性影城| 丰满大乳国产精品| 国产午夜精品久久久| 8888四色奇米在线观看| 欧美成人精品影院| 高清精品在线| 国产精品免费一区| 亚洲精品在线国产| 欧美三日本三级少妇三99| 日韩欧美字幕| 真实国产乱子伦对白视频| 国产精品久久久久久久免费软件| 丁香婷婷激情网| 国产精品影音先锋| 国产精品无码久久久久一区二区| 1000精品久久久久久久久| 日本熟妇毛耸耸xxxxxx| 在线观看欧美黄色| 国产国语亲子伦亲子| 日韩高清a**址| 黄色片免费在线观看| 91精品国产乱码久久久久久蜜臀| 91另类视频| 国产精品三区www17con| 精品美女视频| 精品无码一区二区三区在线| 免费久久精品视频| a级片在线观看视频| 欧美韩国日本一区| 国产精品99re| 欧美精品乱码久久久久久按摩| 天天干天天爽天天操| 日韩亚洲欧美中文在线| 黄色在线免费观看网站| 亚洲xxxxx| 激情婷婷综合| 国产 日韩 欧美在线| 久久99国内精品| 亚洲国产果冻传媒av在线观看| 亚洲婷婷综合色高清在线| 国产日产精品一区二区三区| 日韩精品一区在线观看| 在线a人片免费观看视频| 57pao精品| 99ri日韩精品视频| 亚洲AV无码成人精品一区| 久久性天堂网| 美国黄色a级片| 亚洲高清久久久| av高清一区二区| 最好看的2019年中文视频| 三级中文字幕在线观看| ts人妖另类在线| 91精品国产自产在线观看永久∴ | aa级大片欧美| 国产在线一卡二卡| 欧美日韩亚洲综合在线 | 国产精品色视频| 要久久电视剧全集免费 | 日本成人在线一区| 在线精品视频播放| 亚洲激情男女视频| 99国产在线播放| 色综久久综合桃花网| 欧美性片在线观看| 欧美下载看逼逼| 性伦欧美刺激片在线观看| 国产麻豆剧传媒精品国产av| 亚洲综合视频在线| www.成人在线观看| 九九精品视频在线| 亚洲国产欧美国产第一区| 久久久久久久久久久久久国产| 激情综合色播五月| 最新av电影网站| 欧美一区永久视频免费观看| 国产在线观看91| 亚洲影影院av| 欧美成人久久| 中国男女全黄大片| 亚洲美女视频在线观看| 精品人妻av一区二区三区| 欧美巨乳在线观看| 91精品国产自产精品男人的天堂| 久久久久久av无码免费网站下载| 国产成人综合在线观看| 久热精品在线观看| 亚洲第一偷拍网| 无码小电影在线观看网站免费 | 五月天久久网站| 日韩精品视频网址| 亚洲综合丝袜美腿| 亚洲色图另类小说| 国产91久久婷婷一区二区| 欧洲grand老妇人| 182午夜视频| 亚洲综合视频网| 青青久在线视频免费观看| 国产成人精品视频在线观看| 日韩欧美不卡| 少妇性l交大片7724com| 午夜精品福利久久久| 久久精品a一级国产免视看成人 | 激情五月开心婷婷| 欧美经典三级视频一区二区三区| 一级片免费网站| 久久青草精品视频免费观看| 天堂网av成人| 天天干天天玩天天操| 一区二区欧美精品| 国产一区电影| 91免费看网站| 三级在线观看一区二区| 色哟哟一一国产精品| 亚洲国产精品久久久久秋霞蜜臀| 欧美va在线| 色哟哟免费网站| 久久女同互慰一区二区三区| 国产又爽又黄免费软件| 97精品久久久中文字幕免费| 波多野结衣在线观看一区二区三区| 国产黄色一区二区三区| 欧美性生交xxxxx久久久| 国产一二区在线观看| 蜜桃999成人看片在线观看| 久久66热偷产精品| 国产美女激情视频| 欧美猛少妇色xxxxx| 欧州一区二区| 性久久久久久久久久久| 欧美久久久久久久久中文字幕| 欧美gv在线观看| 三级网在线观看| 国产视频一区二区在线观看| 不卡视频免费在线观看| 国产精品自产拍在线观看中文|