2011-09-03 14 views
24

Mi piacerebbe avere un layout composto da tre immersioni adiacenti. I div laterali hanno una larghezza statica (può cambiare via javascript) e il centro div riempie un'area rimanente. Quando le dimensioni della prima div cambiano, influisce solo su quella centrale. È simile alla tabella (con rendering dinamico) costituita da tre colonne.3 colonne, centrale con larghezza flessibile

Ok, ma dov'è il problema. Il problema è che se metto il div floating-left nella prima colonna, e blocco div nel secondo e terzo, i div divs si comportano in modo strano. Sono resi nella loro colonna al di sotto della variabile floating dalla prima colonna.

Un esempio. Nella prima e nella seconda colonna ho div floating e blocco div nella terza colonna. Il div del blocco viene spostato verso il basso all'altezza dei div fluttuanti. Div nella colonna centrale non è spostato nella sua posizione y solo che ha una proprietà flottante a sinistra.

Mi piacerebbe che ciascuna delle tre divisioni di layout fosse indipendente l'una dall'altra. Non ho idea del perché gli elementi nella terza colonna galleggiano div nelle prime due colonne (con la proprietà float).

CODICE:

<div style="margin: auto; display: table; width: 260px;"> 
     <div style="display: table-row;"> 
      <div style="display: table-cell; width: 100px;"> 

       <div style="float: left; width: 40px; height: 50px;">COL1</div> 

      </div> 
      <div style="display: table-cell;"> 

       <div style="float: left; height: 50px; width: 40px;">COL2</div> 

      </div style="display: table-cell; width: 100px;"> 
      <div class="sideContainer"> 

       <div>COL3</div> 

      </div> 
     </div> 
</div> 

e risultato: result

Come risolvere questo. Come rendere tutti i div di layouting (colonne) indipendenti l'uno dall'altro. Qualche idea?

+0

Hai un attributo su un clos e tab: '' – arnaud576875

+0

È un mio errore. Lo stile su una scheda chiudi dovrebbe essere invece di 'class =' ​​sideContainer '; Questo è ciò che viene visualizzato nel risultato link –

+0

Ma, penso di capire perché funziona in questo modo. Quindi, ad esempio: floating div nel centro layouting div è il primo figlio del suo genitore. Quindi, se ha attributo float, ma non ha nulla da fluttuare alla sua sinistra, fa galleggiare il fratello precedente genitore (primo div del layout). Per risolvere questo ho bisogno di inserire qualcosa (cioè div con larghezza uguale a 0) davanti al div floating. O se ho due div floating, il primo deve essere float: none e display: inline. –

risposta

55

È possibile farlo spostando col1 e col3 a sinistra e a destra, con una larghezza fissa.

Quindi aggiungere un margine sinistro e destro a col2 uguale alla larghezza di col1 e col3.

Questo ti dà tre colonne; col1 e col3 avente una larghezza fissa e col2 riempiendo la larghezza disponibile:

col2's content box in blue, and its margins in yellow
(casella contenuti col2 in blu, e suoi margini in giallo)

<div class='container'> 
    <div class='right'> 
     col3 
    </div> 
    <div class='left'> 
     col1 
    </div> 
    <div class='middle'> 
     col2 
    </div> 
</div> 



.container { 
    overflow: hidden; 
} 
.right { 
    float: right; 
    width: 100px; 
} 
.left { 
    float: left; 
    width: 100px; 
} 
.middle { 
    margin: 0 100px; 
} 

Prova qui: http://jsfiddle.net/22YBU/

BTW se avete bisogno di display: tabella, display: tabella-row e display: table-cell, usate un tavolo ;-)

+0

ohhh sì, questo è quello di cui ho bisogno. Punto per te arnaud576875. Grazie. –

+20

L'ordine dei div è importante e non intuitivo. –

+3

I float CSS non sono intuitivi :) – arnaud576875

Problemi correlati