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

CSS 如何讓auto height完美支持過渡動畫?

開發 前端
通常是借助 JS 動態去獲取元素的高度(還有些麻煩的,需要渲染后才能知道高度)。其實CSS 也有一個巧用max-height適配動態高度的解決方案。

眾所周知,高度在設置成auto?關鍵詞時是不會觸發transition過渡動畫的,下面是偽代碼。

div{
height: 0;
transition: 1s
}
.wrap:hover div{
height: auto
}

效果如下:

圖片

如果希望展開時有過渡動畫,例如這樣。

圖片

Kapture 2023-01-31 at 19.21.02通常是借助 JS 動態去獲取元素的高度(還有些麻煩的,需要渲染后才能知道高度)。其實CSS 也有一個巧用max-height適配動態高度的解決方案,下面是偽代碼。

div{
max-height: 0;
transition: 1s
}
.wrap :hover div{
max-height: 800px /*大概的值,需要超過元素高度*/
}

有興趣的可以參考這篇文章:CSS 奇技淫巧:動態高度過渡動畫[1],但是有一個局限性,高度差異越大,過渡效果越糟糕,假設元素真實高度只有 100px?,如果 max-height為800px?,那只有前1/8有動畫,就像這樣。

圖片

那么,有沒有更好的方式來解決這個問題呢?

當然也是有的,這次就來介紹一個全新的方式來實現動態高度過渡,一起看看吧

一、grid 布局中的 fr 單位

grid?布局中有一個全新的fr?單位,用于定義網格軌道大小的彈性系數。grid?布局比較復雜,三言兩語不可能說清楚,有興趣的可以參考grid相關教程,例如

  • 張鑫旭老師的寫給自己看的display: grid布局教程[2]。
  • 大漠老師的現代 Web 布局[3]?。

這里簡單介紹一下fr單位的用途,比如有這樣一個布局。

<div class="grid">
<span class="item">1fr</span>
<span class="item">1fr</span>
<span class="item">1fr</span>
</div>

關鍵樣式如下:

.grid{
display: grid;
grid-template-columns: repeat(3, 1fr);
}

可以得到這樣的效果:

圖片

這里的repeat(3, 1fr)其實就是1fr 1fr 1fr的簡寫,表示 3 等分剩余空間。還可以設置在垂直方向上。

.grid{
grid-template-rows: repeat(3, 1fr);
}

效果如下:

圖片

也可以改變各自的分配比例。

.grid{
grid-template-rows: 1fr 2fr 1fr;
}

效果如下:

圖片

現在來看一種特殊情況,還可以將分配比例設置為0fr。

.grid{
grid-template-rows: 0fr 2fr 1fr;
}

效果如下:

圖片

是不是有點奇怪,0fr怎么和1fr占比相同呢?

其實這是由grid的最小尺寸規則決定的,此時的最小高度是min-content,也就是由內部文本決定的。如果沒有文字,0fr自然就不占空間了,下面是去除文字后的效果。

圖片

如果想保留文字并且不占空間怎么辦呢?可以直接手動設置最小尺寸。

span{
min-height: 0
}

這樣0fr也會不占空間。

圖片

還可以借助超出隱藏,徹底隱藏子內容。

.grid{
overflow: hidden;
}
span{
min-height: 0
}

效果如下:

圖片

應該還是比較容易理解吧,那么和動畫有啥關系呢?接著往下看

二、grid 中的過渡動畫

有同學可能納悶了,為啥要折騰這個0fr呢?下面就來揭曉。

如果重新設置1fr,子內容又會重新出現。

.grid{
grid-template-rows: 1fr 2fr 1fr;
}

圖片

下面重點來了,grid中的fr單位也是支持過渡動畫的(0fr=>1fr )。

.grid{
grid-template-rows: 1fr 2fr 1fr;
transition: .3s
}

效果如下:

? 圖片 ?

由于高度是由內部文本撐開的,也就是高度不確定,而0fr到1fr的過渡變化,相當于實現了 高度不固定的過渡動畫。

進一步精簡一下,可以實現這樣的效果。

圖片

這就是高度不固定動畫的雛形了,換個文本多一點也完美支持。

圖片

Kapture 2023-01-31 at 19.48.37

完整 demo可以查看以下任意鏈接

  • CSS auto height transition (juejin.cn)[4]
  • CSS auto height transition (codepen.io)[5]
  • CSS auto height transition (runjs.work)[6]

三、自適應高度動畫的兩個實例

現在根據上面的原理來實現兩個實例。

首先來看文章最開頭的示例,HTML 結構是這樣的。

<div class="wrap">
<button class="trigger">鼠標放上來試試</button>
<div class="grid">
<div><p>歡迎關注前端偵探,這里有一些有趣的、你可能不知道的HTMLCSSJS小技巧技巧,比如這篇文章,如何讓 auto height 支持過渡動畫?一起看看吧</p></div>
</div>
</div>

簡單修飾一下,應該比較容易,可以得到這樣的效果:

圖片

然后通過上面的技巧將下拉內容隱藏起來,關鍵樣式如下:

.grid{
display: grid;
grid-template-rows: 0fr;
transition: .3s;
overflow: hidden;
}
.grid>div{
min-height: 0;
}

然后通過hover觸發顯示,也就是改變grid-template-rows。

.wrap:hover .grid{
grid-template-rows: 1fr;
}

這樣就實現了不定高度的過渡動畫。

圖片

完整 demo可以查看以下任意鏈接:

  • CSS auto height drop (juejin.cn)[7]
  • CSS auto height drop (codepen.io)[8]
  • CSS auto height drop (runjs.work)[9]

如果僅僅是懸浮窗口,由于是絕對定位,不會影響其他布局,其實是可以用transform scale 進行縮放的,再來看另外一個更加實用的例子,常見的菜單展開收起效果,就像這樣。

圖片

可以看到,在展開的同時,下方的元素也被擠壓下去了,這樣效果更加自然,也是transform實現不了的,這里的切換是通過:checked實現的,關鍵代碼如下:

<input hidden type="checkbox" id="s1" checked />
<label for="s1">工作臺</label>
<div class="sub">
<ul>
<li>項目列表</li>
<li>數據配置器</li>
</ul>
</div>
ul{
min-height: 0;
}
.sub {
display: grid;
grid-template-rows: 0fr;
transition: 0.3s;
overflow: hidden;
}
:checked ~ .sub {
grid-template-rows: 1fr;
}

完整 demo可以查看以下任意鏈接:

  • CSS auto height menu (juejin.cn)[10]
  • CSS auto height menu (codepen.io)[11]
  • CSS auto height menu (runjs.work)[12]

四、注意事項和一些局限性

下面是一些注意事項。

這里的動畫源于grid-template-rows?的變化,也就是0fr?到1fr。

注意,注意,注意,這里的0fr?必須是0fr?,不能是0?或者0px?,必須是fr單位。

圖片

下面是改為40px的效果(動畫丟失)。

圖片

再者,0fr也不支持calc計算,直接被認為不合法。

圖片

這意味著,例如你希望默認有一個固定高度(非0),然后展開到自適應高度,這種方法是無法實現過渡動畫的,略遺憾??

五、最后總結一下

最后再來回顧一下實現關鍵過程。

.grid{
display: grid;
grid-template-rows: 0fr;
transition: .3s;
overflow: hidden;
}
.grid>div{
min-height: 0;
}
.wrap:hover .grid{
grid-template-rows: 1fr;
}

主要是利用了grid彈性布局可以實現過渡動畫的特點,下面總結一些實現要點

  1. 高度在設置成auto關鍵詞時不會觸發transition過渡動畫。
  2. grid布局中的fr單位,可以用于定義網格軌道大小的彈性系數。
  3. grid布局的尺寸計算規則是由最小高度決定的,默認是min-content,也就是由內部文本決定的,可以通過手動設置min-height來實現0fr。
  4. grid布局也支持過渡動畫(0fr=>1fr ),這樣就實現高度不固定的過渡動畫。
  5. 要使過渡動畫生效,必須是fr單位,其他單位不行,也不能通過calc計算。
  6. 這種方法只能實現初始高度為0到自適應高度的過渡變化,略微遺憾。

參考資料

[1]CSS 奇技淫巧:動態高度過渡動畫: https://github.com/chokcoco/iCSS/issues/91?。

[2]寫給自己看的display: grid布局教程: https://www.zhangxinxu.com/wordpress/2018/11/display-grid-css-css3/?。

[3]現代 Web 布局: https://juejin.cn/book/7161370789680250917/section?。

[4]CSS auto height transition (juejin.cn): https://code.juejin.cn/pen/7196535838593777667?。

[5]CSS auto height transition (codepen.io): https://codepen.io/xboxyan/pen/wvxOMeQ?。

[6]CSS auto height transition (runjs.work): https://runjs.work/projects/7649b0bf6a514ad2?。

[7]CSS auto height drop (juejin.cn): https://code.juejin.cn/pen/7196535123288784957?。

[8]CSS auto height drop (codepen.io): https://codepen.io/xboxyan/pen/JjBzGJE?。

[9]CSS auto height drop (runjs.work): https://runjs.work/projects/421934cd37da4d1c?。

[10]CSS auto height menu (juejin.cn): https://code.juejin.cn/pen/7196534760661844026?。

[11]CSS auto height menu (codepen.io): https://codepen.io/xboxyan/pen/jOpJWmo?。

[12]CSS auto height menu (runjs.work): https://runjs.work/projects/2b6cb36b8eb549a5?。

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

2024-09-23 09:20:02

calc-sizeCSS前端

2020-10-22 08:50:04

Cascading S

2025-05-30 03:20:00

2022-08-29 19:51:58

CSS計數器

2024-03-28 09:11:24

CSS3TransitionCSS屬性

2023-07-24 09:11:43

CSS滾動驅動動畫

2021-05-21 07:41:15

Vue 過渡動畫

2022-08-22 20:10:59

自定義計數器CSS

2024-02-04 09:02:29

RocketMQ項目處理器

2025-03-10 03:00:00

CSSline字體

2013-01-30 15:59:29

adobeCSS3HTML5

2021-07-15 07:23:25

React動畫頁面

2024-03-20 09:40:27

動畫技巧CSS逐幀動畫

2010-09-01 15:28:11

CSSexpression

2010-09-10 15:23:54

CSS匹配CSS

2010-08-24 12:40:23

DIVCSSmin-height

2023-10-24 07:48:14

CSSobject-fit

2015-08-03 11:42:27

Swift漢堡式過度動畫

2011-07-29 14:55:25

iPhone開發 動畫過渡

2011-08-24 10:24:54

EditPlusLUA
點贊
收藏

51CTO技術棧公眾號

亚洲综合第一页| 欧美激情一区二区三区不卡 | 极品粉嫩美女露脸啪啪| 国产又大又黄的视频| 夜间精品视频| 日韩精品在线电影| 日本在线播放一区二区| wwwww亚洲| 国产精品视频线看| 国产精品麻豆免费版| 国产一级片av| 欧美午夜不卡影院在线观看完整版免费| 亚洲精品91美女久久久久久久| 伊人久久大香线蕉成人综合网| caoporn国产| 91久久久精品国产| 国产视频在线观看一区二区| 在线观看日本www| 男人最爱成人网| 亚洲主播在线观看| 亚洲午夜激情| 神马久久高清| 亚洲免费网址| 欧美大奶子在线| 久久视频一区二区三区| 日韩手机在线| 精品免费国产一区二区三区四区| 男人插女人下面免费视频| av女在线播放| 亚洲一区中文在线| 成人9ⅰ免费影视网站| 自拍偷拍精品视频| 久久久久久夜| 97视频在线观看成人| 人妖粗暴刺激videos呻吟| 午夜av在线播放| 国产精品嫩草99a| 欧美性bbwbbwbbwhd| 人妻少妇精品无码专区久久| 国模大尺度一区二区三区| 国产精品第3页| www.伊人久久| 99香蕉国产精品偷在线观看 | 波多野结衣久久久久| 激情欧美一区二区三区黑长吊| 亚洲高清在线精品| av在线免费观看国产| а天堂中文在线官网| 国产精品国产馆在线真实露脸| 欧美一区二视频在线免费观看| 无码精品在线观看| 99久久国产综合色|国产精品| 中文字幕在线一区二区三区| 欧美亚男人的天堂| 欧美视频免费播放| 亚洲精品mv| 欧美丝袜第一区| 欧美爱爱视频免费看| 日本韩国免费观看| 丁香啪啪综合成人亚洲小说| 亚洲一区二区三区乱码aⅴ| 这里只有久久精品视频| 日韩av一区二区三区| 国产精品高潮呻吟久久av野狼| 国产成人一级片| 久久精品卡一| 国产精品久久久久久影视| 久久国产黄色片| 久久伊人亚洲| 国产美女精彩久久| 国产精品欧美久久久久天天影视| 国内精品在线播放| 俄罗斯精品一区二区| 久久99精品波多结衣一区| 亚洲精选在线| 奇门遁甲1982国语版免费观看高清| 性无码专区无码| 奇米影视一区二区三区| 成人高h视频在线| 精品国产va久久久久久久| 先锋影音久久久| 国产精品成人一区| 国产农村老头老太视频| 成人亚洲一区二区一| 久久精品综合一区| 色网站在线看| 久久一区二区视频| 亚洲精品日韩成人| 午夜成年人在线免费视频| 欧美日韩国产丝袜美女| 九九视频精品在线观看| 清纯唯美激情亚洲| 欧美精品精品一区| 最新中文字幕日本| 国产91精品对白在线播放| 精品久久久999| 四虎永久在线精品| 蜜桃久久久久久久| 国产精品久久精品视| 自拍视频在线免费观看| 亚洲国产一区视频| 久热精品在线观看视频| 国产欧美三级电影| xxxx欧美18另类的高清| 日本黄色片视频| 激情伊人五月天久久综合| 国产在线精品一区二区三区》 | 天天综合在线观看| 精品国产伦一区二区三区免费| 超薄肉色丝袜一二三| 精品国产影院| 中文字幕在线看视频国产欧美在线看完整 | 欧美 日韩 国产一区| 色综合一区二区日本韩国亚洲| 亚洲电影av在线| 国产三级精品三级观看| 国产精品日韩| 97超碰在线播放| 国产高清视频免费最新在线| 亚洲国产毛片aaaaa无费看| 亚洲黄色小视频在线观看| 欧美男人操女人视频| 欧美成人午夜视频| 亚洲天堂网视频| 久久久综合视频| 久久视频这里有精品| 精品视频一区二区三区| 3d成人h动漫网站入口| 一出一进一爽一粗一大视频| 西瓜成人精品人成网站| 久久亚洲影音av资源网 | 久久精品magnetxturnbtih| 91香蕉在线观看| 欧美美女bb生活片| 国产黄色录像视频| 日韩va欧美va亚洲va久久| 久久久一本精品99久久精品66| 日本理论片午伦夜理片在线观看| 91精品综合久久久久久| 国产在线免费av| 日产国产高清一区二区三区| 日本精品一区二区| 欧美18—19sex性hd| 亚洲精品国产福利| 日干夜干天天干| 99精品一区二区三区| 精品视频在线观看一区| 加勒比中文字幕精品| 性欧美长视频免费观看不卡| 国产1区在线观看| 亚洲国产va精品久久久不卡综合 | 久久精品亚洲一区二区三区浴池| 久久国产成人精品国产成人亚洲| 伦理一区二区三区| 26uuu国产精品视频| 飘雪影院手机免费高清版在线观看| 91网站在线观看视频| 亚洲 自拍 另类小说综合图区| 国产美女撒尿一区二区| 91超碰caoporn97人人| 婷婷丁香花五月天| 欧美国产日本韩| 久久综合伊人77777麻豆最新章节| 欧美人与拘性视交免费看| 日韩av电影国产| 国内在线免费高清视频| 精品视频在线看| 久久久久久久久久97| 韩国欧美一区二区| 国产欧美精品aaaaaa片| 国产精品对白久久久久粗| 日本sm极度另类视频| 国产三级视频在线播放线观看| 欧洲av一区二区嗯嗯嗯啊| a一级免费视频| 国产精品性做久久久久久| 丰满少妇大力进入| 九九热线有精品视频99| 成人国产精品久久久| xxx性欧美| 亚洲深夜福利在线| 中文在线观看免费网站| 久久综合九色综合97_久久久| 日韩中文字幕免费在线| 久久久久国产精品| 国产伦视频一区二区三区| 亚洲第一影院| 久久综合88中文色鬼| 午夜小视频在线播放| 欧美日韩精品久久久| 久久久久久久久久久久久久久久久 | 日本老师69xxx| av电影在线观看| 精品国产一区二区亚洲人成毛片| 国产免费av一区| 亚洲婷婷综合久久一本伊一区| a级一a一级在线观看| 奇米四色…亚洲| 国产天堂视频在线观看| 大片网站久久| 国产在线一区二| av在线国产精品| 日本精品一区二区三区在线| 在线中文字幕第一页| 亚洲欧美在线x视频| 国产超碰人人模人人爽人人添| 色婷婷久久久综合中文字幕 | 欧美在线高清| 日韩一本精品| 欧美日韩精品一区二区三区在线观看| 国产精品丝袜白浆摸在线| 美女的胸无遮挡在线观看| 久久久精品美女| 成在在线免费视频| 色综合久久久久网| 青青草原国产视频| 国产精品乱码一区二区三区软件 | 亚洲精品精品亚洲| 亚洲天堂岛国片| 91丨porny丨国产入口| 91人妻一区二区三区| 欧美国产高潮xxxx1819| 视频在线观看成人| 亚洲精品**不卡在线播he| 999国内精品视频在线| 草民电影神马电影一区二区| 51精品国产黑色丝袜高跟鞋| 久草在线资源站资源站| 俺去亚洲欧洲欧美日韩| 欧美精品少妇| 日韩精品中文字幕有码专区| 男人天堂手机在线观看| 日韩精品最新网址| 成人激情四射网| 欧美一区二区国产| 国产女人高潮的av毛片| 69堂成人精品免费视频| 亚洲综合精品国产一区二区三区 | av观看在线免费| 欧美日韩国产另类一区| 中日韩av在线| 欧美日韩你懂的| 中文字幕丰满人伦在线| 欧美色中文字幕| 特级西西444www高清大视频| 欧美伊人久久久久久午夜久久久久| 精品国产xxx| 色婷婷综合五月| 亚洲免费视频二区| 在线播放日韩导航| a毛片在线免费观看| 日韩欧美中文一区| 农村少妇久久久久久久| 亚洲激情第一页| 青青草免费在线| 国产一区二区三区中文| 亚洲成a人v欧美综合天堂麻豆| 色偷偷av亚洲男人的天堂| 色三级在线观看| 欧美成人网在线| а√天堂中文在线资源8| 久久免费少妇高潮久久精品99| 九色在线免费| 亚洲无线码在线一区观看| 岛国最新视频免费在线观看| 在线观看国产欧美| av软件在线观看| 亚洲18私人小影院| 国产 日韩 欧美一区| 国产欧美在线播放| 亚洲精品一区在线| 精品乱色一区二区中文字幕| 亚洲ww精品| 69堂成人精品视频免费| 国偷自产视频一区二区久| 免费看成人午夜电影| 老司机亚洲精品一区二区| 国产91亚洲精品一区二区三区| 精品国产午夜肉伦伦影院| 欧美精品一区二区三区久久| 成人黄色小视频| 欧美日韩dvd| 香蕉精品999视频一区二区| 在线观看亚洲色图| 成人午夜视频免费看| 偷拍夫妻性生活| 日韩理论在线观看| 国产一级做a爱片久久毛片a| 欧美男女性生活在线直播观看| 亚洲国产精品18久久久久久| 亚洲欧美三级伦理| 四虎影院观看视频在线观看| 热久久免费视频精品| 国产精品色婷婷在线观看| 久久久久久九九九九| 亚洲成人一区| 97在线免费公开视频| 国内成人免费视频| 法国空姐电影在线观看| 亚洲黄色av一区| 波多野结衣在线观看一区| 精品久久五月天| 自拍视频在线网| 青青草成人在线| 99精品国产一区二区三区2021| 日韩精品一区二区三区色偷偷 | 免费毛片小视频| 国产麻豆成人精品| 又色又爽的视频| 日韩欧中文字幕| 丰满人妻一区二区三区无码av | freexxx性亚洲精品| 91精品中文在线| 国内精品久久久久久久影视简单| 欧洲精品在线播放| 国内精品免费在线观看| 超薄肉色丝袜一二三| 一本大道久久a久久综合婷婷| 亚洲国产一二三区| 久久五月情影视| 88xx成人网| 欧美主播一区二区三区美女 久久精品人 | 成人毛片在线观看| 欧美一级片在线视频| 国产精品高潮呻吟| av毛片在线免费观看| 亚洲国产古装精品网站| 婷婷av在线| 91精品国产高清久久久久久91裸体 | 午夜激情电影在线播放| 99视频免费观看蜜桃视频| 99久久久久国产精品| 超碰在线公开97| 久久精品在线观看| aaa在线视频| 亚洲色图25p| 免费日韩电影| 日韩福利在线| 首页欧美精品中文字幕| 醉酒壮男gay强迫野外xx| 精品国产乱码久久久久酒店 | 国产wwwwxxxx| 欧美性受极品xxxx喷水| 国产精品一区在线看| 日韩暖暖在线视频| 欧美午夜精品一区二区三区电影| 久久久久久久久久福利| 久久久噜噜噜久久中文字幕色伊伊 | 欧美日韩国产成人精品| 韩国一区二区三区四区| 一区二区三区91| 亚洲AV午夜精品| 久久青草福利网站| 女同久久另类99精品国产| 69堂免费视频| 国产亚洲污的网站| 在线免费观看一区二区| 日韩专区中文字幕| 精品国模一区二区三区欧美 | 久久伊人一区| 老司机精品福利视频| 久久久久久国产免费a片| 欧美美女网站色| 牛牛精品在线| 久久久久久久久久久久久久久久av| 久久久成人网| 登山的目的在线| 欧美成人猛片aaaaaaa| 老司机深夜福利在线观看| 欧美日韩一区综合| 六月丁香婷婷色狠狠久久| 中文字幕精品久久久| 色综合视频在线观看| 91成人高清| 亚洲xxx视频| 亚洲欧美日韩国产一区| 九九热久久免费视频| 日韩视频在线观看一区二区| 蜜桃视频m3u8在线观看| 亚洲成人午夜在线| 国产激情一区二区三区| 国产三级aaa| 日韩欧美国产精品一区| 波多野结衣亚洲| 三年中文高清在线观看第6集| 成人免费高清视频在线观看| 高潮毛片又色又爽免费| 久久精品国产69国产精品亚洲| 成功精品影院| mm1313亚洲国产精品无码试看| 亚洲柠檬福利资源导航| 欧洲伦理片一区 二区 三区| 91在线观看免费高清| 国产精品视频久久一区| 日本少妇aaa| 日韩精品中文字幕在线观看| 成人在线分类| 男女视频一区二区三区| 亚洲成人av一区二区三区| 在线观看a视频|