2011-11-02 8 views
51

I 2 figli del mio flexbox hanno uno stile box-flex: 1. La mia comprensione è che le loro larghezze dovrebbero quindi essere uguali l'una all'altra (entrambe occupano 50% della larghezza totale della propria casella flessibile padre). Ma quando il contenuto viene aggiunto ai bambini, la loro larghezza cambia (a seconda del contenuto e del riempimento)! Perché succede?Problema CSS Flexbox: perché la larghezza dei miei flexchildren è influenzata dal loro contenuto?

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:

<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 –

risposta

77

La soluzione per questo è di aggiungere width: 0 agli .box1 elementi.

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

penso che ho trovato che per me stesso qui: http://oli.jp/2011/css3-flexbox/

La larghezza preferita di un bambino elemento scatola contenente il contenuto del testo è attualmente il testo senza interruzioni di riga, portando a intuitivi calcoli della larghezza e della flessibilità di → dichiara una larghezza su un elemento della scatola figlio con più di poche parole (chiedersi perché mai le demo di Flexbox sono tutte "1,2,3 “)

Si noti che per la vostra situazione, sembra molto più facile da usare display: table + table-layout: fixed:? http://jsfiddle.net/thirtydot/fPfvN/1/

Questo funziona anche in altri browser.

+1

Qualsiasi larghezza andrà bene. Può anche renderlo '50%' nella situazione per motivi di degradabilità. – Barney

+1

Le larghezze percentuali non impongono la soluzione alternativa allo stesso modo delle larghezze assolute. (in Webkit, chrome v27) – Jonathon

+6

Volevo solo dire che usando 'width: 0' nei child,' justify-content: spaced-between; 'nel parent e la combo di' -webkit-flex-direction : row; 'con' -webkit-flex-wrap: wrap; 'anche nel genitore, ho ottenuto delle scatole davvero carine, ben educate che sono equamente distanziate e interrompono la riga successiva per il testo lungo. Ho ricevuto molte risposte SO per ottenere il mio comportamento ideale e 'width: 0' mi ha aiutato a risolvere il pezzo finale! –