任意高度元素的展開收起動畫技術(shù)

注:此方法出自前端技術(shù)專家@張鑫旭所著《CSS世界》

“展開收起”效果是網(wǎng)頁中比較常見的一種交互方式,通常的做法是控制display屬性值在none和其它值之間切換,雖說功能可以實(shí)現(xiàn),但是效果略顯生硬,所以會有這樣的需求——希望元素展開收起能具有平滑的效果。傳統(tǒng)實(shí)現(xiàn)可以使用JQuery的slideUp()/slideDown()方法,但是,在移動端,由于CSS3動畫支持良好,所以移動端的JavaScript框架都是沒有動畫模塊的。此時(shí),使用CSS實(shí)現(xiàn)動畫成為了最佳的技術(shù)選型:

我們的第一反應(yīng)可能是考慮使用height+overflow:hidden+transition的方案,如下:

.element {
    height: 0;
    overflow: hidden;
    transition: height .25s;
}

.element:hover {
    height: auto;     /* 沒有transition效果,僅僅生硬地隱藏/展開 */ 
}

但是結(jié)果可能并不會是我們所預(yù)期的那樣;原因是我們將要展開的元素內(nèi)容是動態(tài)的,即高度值不確定,因此,height使用的值是默認(rèn)的auto,從0px到auto是無法計(jì)算的,因此無法形成過渡或動畫效果。

為了解決這個(gè)問題,可以使用max-height代替,如:

.element {
    max-height: 0;
    overflow: hidden;
    transition: max-height .25s;
}

.element:hover {
    max-height: 666px;     /* 一個(gè)足夠大的值*/ 
}

其中展開后的max-height值,只需要設(shè)定為保證比展開內(nèi)容高度大的值即可,在max-height值比height值大的情況下,元素仍會默認(rèn)采用自身的高度值,即auto;如此一來,一個(gè)高度不定的元素展開收起動畫效果就實(shí)現(xiàn)了。

然而在使用本方法時(shí),需要注意一點(diǎn):雖然從適用范圍上說,max-height值越大可供使用的場景越多,但是如果max-height值太大,在元素收起的時(shí)候?qū)a(chǎn)生延遲的效果,這是因?yàn)樵谑掌饡r(shí),max-height從設(shè)定的特別大的值,到元素自身高度值的變化過程將占用較多時(shí)間,此時(shí)畫面表現(xiàn)則會產(chǎn)生延遲的效果。

因此,建議將max-height值設(shè)置為足夠安全的最小值,這樣在收起時(shí)即使有略微延遲,也會因?yàn)闀r(shí)間很短,難以被用戶感知,將不會影響體驗(yàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,818評論 1 45
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,155評論 1 92
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,205評論 3 119
  • 舌頭是負(fù)責(zé)嘗試味道的,卻不是決定味道的,決定味道的是心態(tài),是注意力的方向。 今天我吃柚子時(shí)就有了深刻的體...
    張光輝歲月如歌閱讀 488評論 0 0
  • ?今日三件事(計(jì)劃) 1.讀書&筆記 2.床頭墻壁丙烯畫 3.手繪視頻學(xué)習(xí) ?今日完成事項(xiàng)(總結(jié)) 1.17100...
    水若_小水囈夢閱讀 431評論 0 1

友情鏈接更多精彩內(nèi)容