2012-06-19 16 views
29

Bir öğeyi bir esnek kutudan kaldırdığımda, kalan öğeler, animasyon yerine, yeni konumlarına hemen "yapışır". Kavramsal olarak, öğeler pozisyonlarını değiştirdiğinden, geçişlerin uygulanmasını beklerim.flexbox eklentilerini hareketlendirmek ve kaldırmak mümkün mü?

Bir flexbox'a ilgili tüm unsurları (flexbox'a ve çocuklar)

düzenlemeleri animasyon uygulamak için herhangi bir yolu (& siler ekler) var mı üzerinde geçiş özelliğini ayarlamış? Bu aslında benim için bir showtopper ve flexbox'lı bir eksik parça.

+1

Sorununuzu yeniden üreten bir demo gönderebiliyor musunuz? Yapmak zorunda kalmadan kodunuzda neler olduğunu görmek için [JS Fiddle] (http://jsfiddle.net/), [JS Bin] (http://jsbin.com/) veya benzeri iyi olurdu. kendi testlerimiz. –

+0

(krom için) -webkit geçişini deneyin: genişlik 2s; Kutunun çıkarıldığı sırada animasyon yapan genişlik olabileceğini düşünüyorum. – ppsreejith

cevap

10

Esnek Kutu Modeli ve Izgara Düzeni belirtimlerinin, özellikler ve geçerli değerler olsa bile sürekli değiştiğini unutmayın. Tarayıcı uygulamaları da eksiksiz değil. Bu söyleniyorsa, flex özelliğine geçiş yapabilirsiniz, böylece öğeler geçişi düzgün bir şekilde geçiş yaptıktan sonra nodu DOM ağacından sonlandırmak için sadece TransitionEnd dinleyiniz. , Bir düğüm kaldırdığınızda ayrıca, netleştirmek için: (ortadaki div tıklayın)

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>

Düzenlemehttp://jsfiddle.net/5kJjM/: Burada

Chrome 21'den çalışan, JSFiddle bir örnektir flexini 0 olarak ayarlamanız, daha sonra DOM'dan kaldırmanız gerekir. Bir düğüm eklerken, flex: 0 ile ekleyin ve sonra esmeye geçiş yapın: 1

+0

Burada orta divinizde içerik var, bu da pek işe yaramıyor. – Jason

+0

İçeriği kolayca örtebilir ve geçiş sırasında gizlenecek taşmaları ayarlayabilirsiniz, böylece güzel çalışır. – skyline3000

+2

Demoda herhangi bir geçiş bulamıyorum ... sadece normal flex gibi çalışıyor ... ve demodaki 'transitionEnd 'işleyicisi tetiklemiyor, yani geçişler uygulanmıyor demektir ... –

19

Bu örnekte, Treehouse numaralı telefondan @ skyline3000'nin tanıtımını düzelttim. Emin değilim tarayıcılar değiştirirseniz bu yine kıracak ama bu esnek boyut değişiklikleri animasyon amaçlanan yol olarak görünüyorsa:

http://jsfiddle.net/2gbPg/2/

Ayrıca jQuery kullanılan ancak teknik olarak gerekli değildir. CSS konusunda dikkat edilmesi gereken

.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; 
} 

Bir şey sıfır flex-grow geçiş olamaz, o sadece kaybolur geçiş olmayacaktır. Çok küçük bir değer koymanız gerekiyor. Ayrıca, sınırları çizerken yapay bir hata var gibi görünüyor, bu yüzden bu durumda bir arka plan kullandım.

+0

Ne Animate için Yasaklama-İçerik Ortadan esnek çalışmaya başlıyor –

+0

Tam olarak ne demek istediğimi anladığımdan emin değilim, bir örnek verebilir misiniz? –

+0

dikey bir düzende bunu yapmak mümkün mü? diğer bir deyişleesnek akış: sütun; – andrei