2010-02-10 5 views
5

Ho un problema con i CSS che non posso risolvere.Problema dell'altezza Flo Floated Div, nessuna soluzione semplice?

Ho effettuato a little diagram.

Diciamo che l'altezza della scatola rosa e quella verde sono determinate da quel contenuto. La scatola rosa potrebbe a volte essere la più piccola.

Quello che sto cercando di fare è che il riquadro più piccolo aggiusti la sua altezza rispetto al div contenente esterno, in modo che abbia la stessa altezza della scatola rosa (o viceversa).

Qualcuno ha qualche soluzione?

L'altezza minima delle caselle rosa e verde non funzionerà perché potrebbero superare tale altezza (anche senza supporto IE6).

L'altezza del 100% sulle caselle rosa e verde non funziona perché il div esterno non ha un'altezza fissa.

Un tavolo funzionerebbe, ma dai, un tavolo?

Potevo simulare sfondi e bordi sinistro-destro sulle caselle rosa e verde inserendole nello sfondo del div esterno. Ma sembra disordinato.

Al momento ho una soluzione js, ma ce ne deve essere una più semplice.

Cheers.

+1

No, che hai elencato le tecniche più popolari per questo (finte colonne, JavaScript) http://www.alistapart.com/articles/fauxcolumns/ Non v'è definitivamente alcun modo per fare questo con div in css ancora – davidosomething

+0

Cheers per le vostre risposte. Ho intenzione di andare con la mia soluzione js/jquery, con css come backup ma non fornendo il 100% del look desiderato. Lo posterò quando sarà finito e ha avuto un uso pesante. – Smickie

risposta

3

Utilizzare the Faux Columns technique per quello. Fondamentalmente, dovrai usare un'immagine di sfondo ripetuta sull'elemento genitore contenente entrambe le caselle.

+0

+1 Per la risposta. Le colonne Faux sono una soluzione valida e se salvate come PNG a 8 bit, il file normalmente è di circa 1 o 2K. –

+1

... o anche meno. Nella maggior parte dei casi in cui ho utilizzato questa tecnica, sono stato in grado di utilizzare immagini di sfondo ripetute con un'altezza di 1 pixel. A seconda della situazione, la dimensione del file potrebbe essere di poche centinaia di byte. –

4

A parte Javascript/Jquery o tabelle, l'unica cosa che mi viene in mente è una soluzione display: table-cell base (spiegazione here) - ma che non funziona in IE sia, e non c'è molta differenza di utilizzare un tavolo subito, c'è?

Direi che questo è uno dei rari casi in cui, a causa di caratteristiche CSS e/o implementazioni CSS, non c'è modo di aggirare un tavolo.

Modifica: Come altri rispondenti hanno sottolineato, ci sono soluzioni CSS ("colonne Faux") che funzioneranno nella maggior parte dei casi. Utilizzando "tabelle CSS" (usando le proprietà display: table) non ritengo ancora valide soluzioni, in quanto non sono supportate da IE6, un browser che ha ancora una quota di mercato considerevole.

+1

OHMYWORDTABLES :) In realtà, penso ancora che Faux Columns sia la risposta giusta. Le tabelle * in realtà * non sono un meccanismo di layout. Con Faux Columns puoi sempre disattivare l'immagine di sfondo e cambiare il layout nel CSS. Con le tabelle, è necessario modificare la tabella per modificare il layout. Solo i miei due centesimi. –

+0

Le tabelle CSS ** sono ** un meccanismo di layout e non richiedono elementi di tabella HTML. Non è più necessario modificare l'HTML quando le tabelle CSS vengono utilizzate per il layout, quindi è possibile utilizzare qualsiasi altro tipo di layout CSS (ad esempio, probabilmente sarà necessario modificare qualcosa per apportare modifiche significative). – Quentin

+1

@Doug true, ma non sempre funziona (quando hai bisogno che le colonne * fisicamente * abbiano la stessa altezza, ad es. Quando si posiziona qualcosa all'interno della colonna). Le colonne finte sono un o.k. soluzione se funzionano per la tua situazione (e sono perfettamente contento se sono le soluzioni al problema dell'OP), ma comunque, questa è una grossa lacuna di CSS di cui trovo orribile che non sia indirizzato in qualche modo. –

2

Questo è lo stesso problema con le colonne dell'altezza, vedere questo blog post per una soluzione.

+1

Bene, leggendo l'articolo che "nessun hack" nel titolo è piuttosto discutibile. –

0

che dire di questo:

.green { 
    display:block; 
    float: left; 
    background: green; 
    width: 200px; 
    height: 200px; 
    position: relative; 
} 

.outer { 
    position: relative; 
    background: yellow; 
    overflow: auto; 
} 

.pink { 
    left: 250px; 
    background: red; 
    height: 100%; 
    width: 100px; 
    position: absolute; 
} 

dovrebbe funzionare .. forse ho cambiato i colori, la scatola rosa è il con crescente uno! ;)

modifica ah ok, ho perso il galleggiante sulla seconda casella. Se questo è un must-have allora, come già detto, le colonne finte sono una buona tecnica, penso.

0

Che ne dici di un compromesso?

Se le colonne faux non possono aiutarti, non vuoi usare le tabelle e hai già una soluzione javascript, semplicemente userò css (display: table, display: table-cell) e inserirò il javascript commenti condizionali per IE6 e IE7.

È quindi possibile rimuovere facilmente il javascript quando è il momento giusto e, nel frattempo, i browser moderni non dovranno eseguirlo.