css3怎麼實現高度從固定到自動的過渡動畫?
.box{
height: 120px;
overflow: hidden;
transition: height ease 0.2s;
}
.box:hover{
height: auto;
}
簡單講,目前是不行的。
當然有很多trick,比如設置max-height的動畫(從固定值到一個肯定比auto大的值),或者更複雜的(引入腳本算computed value)方式。
之所以不能直接transition從auto到固定值,有一些深層次的原因。比如auto的實際值取決於layout,而按照現在的css spec,computed value是不包含layout計算的,而transition是針對computed value的。
有一些proposal希望解決這個問題,比如允許transition從固定值到calc(auto)【目前calc是不支持auto關鍵字的】,但在css工作組的任務里這個case還處於低優先順序,並且目前也沒有聽說有瀏覽器有計劃嘗試實現。.box{
max-height: 120px;
overflow: hidden;
transition: height ease 0.2s;
}
.box:hover{
max-height: 100vh;
}
用 height 是不行的。
不過,用 max-height 和 min-height 可以實現同等效果。
.box{
max-height: 120px;
min-height: 120px;
overflow: hidden;
transition: max-height ease-out 0.2s;
}
.box:hover{
max-height: 500px;
transition: max-height ease-in 0.2s;
}
如上所示,只要下段的 max-height 是一個實際內容不會達到的高度,那就相當於是 auto 了。
——————————————————————————
當然,如果只是要效果,用 JS 實現也可以。
前一陣剛好在做關於height的過渡,簡單說一下我的方法。
我是套了兩層div,給外層div加transition樣式:overflow: hidden;height:0px; transition: height 0.5s;
然後想要設置height:auto時,直接把內層div的height賦給外層div。基本上實現了這個過渡效果。如果有人有更好的方法,希望指出。
我說一種基於負邊距的 slide 實現。
外層套個div,overflow:hidden,內層負值margin-top,加上過渡。同樣需要js計算高度來設置負邊距。Demo:Edit fiddle - JSFiddle推薦閱讀:
※一個前端開發工程師,什麼最重要?
※Web前端崗位面試題有哪些?
※如何評價阿當的文章《當我說前端基礎時,我在說什麼》?
※研三通信女生,現在轉前端晚嗎?
※前端開發工程師如何給自己取個高大上的Title?
TAG:前端開發 | CSS | JavaScript | CSS3 | 前端工程師 |