2010-04-26 12 views
16

Ho un html generato dal server come:UL + CSS per il layout a griglia

<ul> 
    <li><!-- few nested elements that form a block --></li> 
    <li><!-- few nested elements that form anaother block --></li> 
    <li><!-- etc, X times --></li> 
</ul> 

Tutti i blocchi hanno conosciuto la larghezza e l'altezza 200px sconosciuta. Voglio <li> ad essere concordati in tavola come la moda in questo modo:

alt text

Quello che ho per ora sta seguendo css:

li { 
    display: block; 
    width: 200px; 
    float: left; 
    margin: 10px; 
} 

Tutto è bene, tranne che le colonne non si ottiene uguale altezza. E nell'esempio precedente blocco # 4 “strappare” al # 1 e il risultato non è quello che sto cercando di realizzare:

alt text

Esiste un puro-CSS modo cross-browser che permetterà di griglia layout Voglio e non imporrà il cambiamento del markup?

risposta

22

Inline blocks potrebbe forse essere utile qui.

+0

+1, ma mente IE7, che consente solo il blocco in linea per elementi inline naturalmente. – ANeves

+1

Ottimo collegamento! Esattamente quello di cui ho bisogno. – nkrkv

+0

Molto probabilmente si verificheranno problemi con lo spazio bianco incorporato. In questo caso, guarda questo thread su doctype.com: http://doctype.com/csss-inlineblock-white-space-between-items – Boldewyn

0

Opzione 1: Dare loro altezze esplicite

Opzioni 2: Utilizzare nth-child (che ha un supporto limitato)

4

Nel tuo esempio ti sembra di voler dare ogni riga della stessa altezza del più grande li in quel riga. Se questa altezza è variabile ciò che si vuole è possibile solo con nth-child:

li:nth-child(3n+0) { clear: left; }