Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    CSS Float e layout complessi.

    Ho cominciato da un po' ad interessarmi ai css per per la realizzazioni di strutture tableless visto che tutti lo consigliano.

    Per ora sto realizzando il tutto su FF, poi dedicherò il mio tempo ad aggirare gli infiniti bug di IE e magari quelli di Opera.

    Quello che vorrei realizzare è una struttura fluida di questo tipo:
    codice:
       |   |   
     1 | 2 | 3
    ---+---+---
     4 | 5 | 6 
    ---+---+---
     7 | 8 | 9
       |   |
    La cella 1,3,7,9 sono di altezza e larghezza fisse.
    4 e 6 hanno altezza variabile, ma larghezza fissa.
    2 e 8 hanno altezza fissa e larghezza variabile.
    5 ha altezza e larghezza variabili.

    In pratica la solita tabella con i bordi grafici che può essere ridimensionata a piacere.

    per le celle 1,2,3 ho risolto usando il trucco di mettere 1 float:left, 3 float: right e impostare i margini laterali di 2 pari alla larghezza di 1 e 3.

    Il problema è con le celle 4,5,6, se uso il sistema precedente le celle 4 e 6 non si adattano automaticamente all'altezza della cella 5 e quindi il giochetto fallisce.

    Come posso risolvere il problema?

    P.S. una volta realizzata la cosa i div che metterò all'interno della cella 5 saranno indipendenti dalle altre per quanto riguarda allineamento e dimensioni?

    Grazie a chi mi risponderà.

  2. #2
    Il trucco non funziona sulle celle centrali perché è la "logica" che c'è sotto a "pensare" a questa struttura come se si trattasse effettivamente di una tabella. Con le tabelle infatti è "automatico" che una cella sia alta come tutte le altre sulla stessa riga. Con i CSS, i div (che non sono celle) sono indipendenti tra loro. Con i box 1, 2 e 3, la cosa funziona perché hanno un'altezza impostata forzatamente da CSS, mentre i box centrali hanno altezza variabile e quindi devono adattarsi ai loro contenuti. E' chiaro che se i contenuti di tali box non sono alti uguali, anche i box non lo saranno tra di loro.

    Quello che devi fare è dare "l'illusione" che i tre box 4, 5 e 6 siano alti uguali, anche se non lo sono. Per farlo devi racchiudere questi tre box dentro altri 2 box che faranno da contenitori (uno dentro l'altro e attribuire a questi box un'immagine di sfondo che "simuli" una delle 2 colonne (cioè un'immagine, alta anche 1px, di un colore che indentifichi lo sfondo di una delle colonne laterali, e ripetuta verticalmente). Il box 5, avendo entrambe le dimensioni variabili, devi impostarlo come il box 2 in larghezza e in altezza usare l'hack della min-height (IE non la interpreta!) per assegnare cmq un'altezza minima di default. Questo perché, essendo il box 5 posizionato in modo statico, ti serve per influire sull'altezza dei box 4 e 6 che sono flottanti (se i due box che inserisci come contenitori degli sfondi contenessero solo box flottanti, avrebbero altezza nulla). Nel dettaglio, eccotiun codice di esempio:

    codice:
    Codice XHTML:
    
    <div id="cella1">...</div>
    <div id="cella2">...</div>
    <div id="cella3">...</div>
    
    <div id="sfondocolonnasx">
    <div id="sfondocolonnadx">
    
    <div id="cella4">...</div>
    <div id="cella5">...</div>
    <div id="cella6">...</div>
    
    </div>
    </div>
    
    <div id="cella7">...</div>
    <div id="cella8">...</div>
    <div id="cella9">...</div>
    
    
    Codice CSS per i box "contenitori" e i box 4, 5 e 6:
    
    #sfondocolonnasx {
    background-image: url(IMMAGINE DI SFONDO COLONNA SX);
    background-repeat: repeat-y;
    background-position: top left;
    }
    
    #sfondocolonnadx {
    background-image: url(IMMAGINE DI SFONDO COLONNA DX);
    background-repeat: repeat-y;
    background-position: top right;
    }
    
    #cella4 {
    width: XXpx;
    float: left;
    }
    
    #cella5 {
    min-height: YYpx;
    height: auto !important;
    height: YYpx;
    margin: 0 XXpx 0 XXpx;
    }
    
    #cella6 {
    width: XXpx;
    float: right;
    }
    Questo codice fa sì che sia il box 5 (l'unico box statico dei tre centrali) a determinare l'altezza dei due box "contenitori" sfondocolonnasx e sfondocolonnasx. Ovviamente, la misura di min-height deve essere tale da poter sempre "contenere" completamente le due colonne 4 e 6, che altrimenti fuoriuscirebbero (non su IE naturalmente... ) dai box contenitori che danno l'illusione delle 2 colonne laterali. Dovrebbe funzionare così.

  3. #3
    Ti ringrazio, ora provo.
    Radian Studios - Your Future, Our Present

    Orgoglioso sviluppatore di Php-stats dal 2004

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.