2011-11-02 16 views
51

Benim flexbox'ımın 2 çocuğunun her biri box-flex: 1 tarzında verilir. Anladığım kadarıyla, genişlikleri (her ikisi de % 50 ebeveynsel esnekliklerinin toplam genişliğini kaplıyor) olmalıdır. Ancak içerik çocuklara eklendiğinde, genişlikleri değişir (içeriğin ne olduğuna ve doldurulmasına bağlı olarak)! Bu neden oluyor?CSS Flexbox sorunu: Flexchildren'in genişliği neden içeriklerinden etkileniyor?

CSS:

.hasFlex { 
    display: box; 
    display: -webkit-box; 
    display: -moz-box; 
    -webkit-box-align: start; 
    -moz-box-align: start; 
    box-align: start;} 
.box0 { 
    -webkit-box-flex: 0; 
    -moz-box-flex: 0; 
    box-flex: 0;} 
.box1 { 
    -webkit-box-flex: 1; 
    -moz-box-flex: 1; 
    box-flex: 1;} 
.box2 { 
    -webkit-box-flex: 2; 
    -moz-box-flex: 2; 
    box-flex: 2;} 
.box3 { 
    -webkit-box-flex: 3; 
    -moz-box-flex: 3; 
    box-flex: 3;} 
.container { 
margin-bottom: 10px; 
} 

HTML: Bunun

<div class="container hasFlex"> 
<div id="main" role="main" class="box1"> 
    <div class="innerBG"> 
     a bunch of stuff (divs, text, etc) go here 
    </div> 
</div> 
<div id="sidebar" class="box1"> 
    <div class="innerBG"> 
     a bunch more stuff (divs, text, etc.) go here 
    </div> 
</div> 
</div> 
+0

http://stackoverflow.com/q/36247140/3597276 –

cevap

77

geçici çözüm .box1 öğelere width: 0 eklemektir.

Bkz:http://jsfiddle.net/thirtydot/fPfvN/

Ben burada kendime öğrendim düşünüyorum: http://oli.jp/2011/css3-flexbox/

metin içeriğine sahip bir kutu elemanı çocuğun tercih genişliği şu anda satır sonları olmadan metin olduğunu çok kasıtsız genişlik ve esnek hesaplamalar için lider → bir kutu sözcüğü üzerinde bir genişlik ifade etmek birkaç kelime ile (her zaman neden flexbox demoları tüm “1,2,3 olduğunu merak ediyorum “) Durumunuza, bu display: table + table-layout: fixed kullanımı çok daha kolay görünüyor

Not:? http://jsfiddle.net/thirtydot/fPfvN/1/

Bu daha tarayıcılar çalışacaktır.

+1

Herhangi bir genişlik yapacaktır. Degradability uğruna durumdaki '% 50' de yapabilir. – Barney

+1

Yüzde genişlikleri, geçici çözümü mutlak genişliklerle aynı şekilde zorlamaz. (Webkit'te, chrome v27) – Jonathon

+6

Sadece şunu söylemeyi istedim: 'width: 0' çocuklarda, 'haklı-içerik: aralıklı-arasında;' ebeveynte ve -webkit-flex-yönünün birleşimi : satır-'' '' webkit-flex-wrap: wrap; 'Ayrıca ebeveyn, ben uzun aralıklarla eşit aralıklı ve uzun metin için bir sonraki satıra kırılmış, gerçekten güzel, iyi davrandım. İdeal davranışımı elde etmek için pek çok SO yanıtı buldum ve 'width: 0' son parçayı çözmeme yardımcı oldu! –