當我從柔性箱中取出物品時,其餘物品會立即「捕捉」到其新位置,而不是動畫。是否可以爲flexbox插入和移除動畫?
從概念上講,由於項目正在改變他們的立場,我希望過渡適用。
我已經設置了過渡性質的所有相關要素(Flexbox,就和孩子)
有什麼辦法動畫編輯(添加&刪除)到Flexbox的?這實際上是對我而言的一個炫耀者,也是對flexbox缺少的一部分。
當我從柔性箱中取出物品時,其餘物品會立即「捕捉」到其新位置,而不是動畫。是否可以爲flexbox插入和移除動畫?
從概念上講,由於項目正在改變他們的立場,我希望過渡適用。
我已經設置了過渡性質的所有相關要素(Flexbox,就和孩子)
有什麼辦法動畫編輯(添加&刪除)到Flexbox的?這實際上是對我而言的一個炫耀者,也是對flexbox缺少的一部分。
請記住,柔性盒模型和網格佈局規格不斷變化,即使是屬性和有效值。瀏覽器的實現也遠沒有完成。也就是說,您可以在flex
屬性上進行轉換,以便元素順利轉換,然後只需偵聽TransitionEnd
以最終從DOM樹中刪除該節點。
下面是一個例子的jsfiddle,在Chrome 21上運行:http://jsfiddle.net/5kJjM/(點擊中間的div)
var node = document.querySelector('#remove-me');
node.addEventListener('click', function(evt) {
this.classList.add('clicked');
}, false);
node.addEventListener('webkitTransitionEnd', function(evt) {
document.querySelector('#flexbox').removeChild(this);
}, false);
#flexbox {
display: -webkit-flex;
-webkit-flex-flow: row;
}
.flexed {
border: 1px solid black;
height: 100px;
-webkit-flex: 1 0 auto;
-webkit-transition: -webkit-flex 250ms linear;
}
.clicked {
-webkit-flex: 0 0 auto;
}
<div id="flexbox">
<div class="flexed"></div>
<div class="flexed" id="remove-me"></div>
<div class="flexed"></div>
</div>
編輯: 爲了進一步澄清,當你刪除一個節點,你應該將它的flex設置爲0,然後從DOM中刪除它。添加節點時,將其添加到flex:0,然後將其轉換爲flex:1
你的中間div裏面有內容,這個效果並不理想 – Jason
你可以很容易地將內容封裝起來,並設置溢出在轉換過程中隱藏起來,以便它很好地工作。 – skyline3000
我無法在演示中找到任何轉換...它的工作原理與普通flex一樣...並且演示中的transitionEnd處理程序不會觸發,這意味着沒有應用轉換... –
我已經修復了@ skyline3000的示例,該示例基於此示例從Treehouse。不知道這是否會再次突破,如果瀏覽器的改變,但這似乎是動畫柔性大小的變化預期的方式:
而且我用jQuery的,但它在技術上不是必需的。
.flexed {
background: grey;
/* The border seems to cause drawing artifacts on transition. Probably a browser bug. */
/* border: 1px solid black; */
margin: 5px;
height: 100px;
flex-grow: 1;
transition: flex-grow 1000ms linear;
}
.removed {
/* Setting this to zero breaks the transition */
flex-grow: 0.00001;
}
有一點要注意對CSS是你不能過渡到零flex-grow
,它不會轉換會就此消失。你只需要放一個非常小的值。此外,在繪製邊框時,似乎還存在人爲錯誤,所以在此情況下我使用了背景。
如何做動畫合理化 - 從中心到靈活啓動的內容 –
我不完全相信我明白你的意思,你可以發表一個例子嗎? –
是否可以使用垂直佈局來做到這一點?即flex-flow:列; – andrei
你能發佈一個能夠再現你的問題的演示嗎?無論是[JS Fiddle](http://jsfiddle.net/),[JS Bin](http://jsbin.com/)或類似的東西都不錯,讓我們看看代碼中發生了什麼,而無需構建我們自己的測試。 –
嘗試(for chrome)-webkit-transition:寬度2s;我認爲這可能是當盒子被移除時動畫的寬度。 – ppsreejith