Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199

    Problema di allineamento DIV generati dinamicamente

    Ciao a tutti!

    In primis: spero sia il posto giusto dove postare questo problema, perchè son quasi sicuro che con i CSS si possa risolvere.

    Cmq, vi spiego il problema: ho un div generale di 700 px. All'interno, tramite chiamate PHP, vengono a generarsi numero X div che hanno 330 px di larghezza e 400 di altezza. Avente float left, vengono ad accostarsi 2 a 2 scendendo di volta in volta di 400 px. E fin qui è perfetto. Però, mi è venuta la necessità di far si che alcuni di questi debbano essere di 450 px. Cosa accade? Mettiamo che abbiamo 4 div generati (il primo di 450, e gli altri di 400): il primo si mette in alto a sinistra, il secondo alla sua destra (tutto bene, fin'ora), ma il terzo si va ad infilare sotto il secondo, lasciando uno spazione sotto al primo, e il quarto si va a mettere sotto lo spazione vuoto generato dal terzo. Insomma una gran bel casino!!!
    Quali parametri dei CSS posso modificare affinchè mi continuino a incolonnarsi ordinatamente anche con altezze differenti?

    Grazie del vostra aiuto in anticipo, ciao!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5

    Prova così

    codice:
    div.container div:nth-child(odd) {
       clear:both;
    }
    Ciao, prova con il codice css che ti ho messo sopra, va applicato ad ogni div figlio del tuo div con classe container.

    Fammi sapere se ti funziona.
    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    Grazie della risposta!

    Aggiungendo

    clear:both

    non ne allinea neanche uno (in effetti gli si dice di pulire entrambi i lati).
    Tuttavia non ho mai visto quel (odd) applicato per i CSS e non so cosa sia, è forse quello che intendevi? Ho provato a metterlo, ma il risultato è che mi annulla il div.

    Delucidazioni?

    Grazie ancora!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5

    Codice completo

    codice:
    <html>
    	<meta></meta>
    	<head>
    		<style type="text/css">
    			div.container {
    				width:700px;
    				margin: 0 auto;
    				border: 1px solid black;
    			}
    
    			div.container:after {
    				content: "";
    				clear: both;
    				display: table;
    			}
    			div.container div {
    				height: 400px;
    				width: 330px;
    				border: 1px solid gray;
    				float: left;
    			}
    
    			div.container div:nth-child(odd) {
    				clear: both;
    			}
    
    			div.container div.first {
    				height: 450px;
    			}
    
    		</style>
    	</head>
    	<body>
    		<div class="container">
    			<div class="first">1</div>
    			<div class="">2</div>
    			<div class="">3</div>
    			<div class="">4</div>
    			<div class="first">5</div>
    			<div class="">6</div>
    			<div class="">7</div>
    
    		</div>
    	</body>
    </html>
    Ciao, scusa ma ero di fretta. odd serve per ogni elemento dispari.
    Ti ho postato il codice completo.
    Io ho usato CSS3 quindi funziona solo nei browser più moderni.
    Se vuoi fare una cosa ancora più bella sostituisci nth-child(odd) con
    codice:
    div.container div:nth-child(2n + 1) {
      clear: left;
    }
    Fammi sapere,
    Ciao ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    Grazie Micro!!!

    Ho provato il codice in una pagina in bianco e funziona perfettamente...ed è quello che vorrei raggiungere io.

    RIportandolo invece nel mio contesto funziona solo in parte. Praticamente accade che tutti i div vengono posizionati come se avessero 400 di altezza (tutti quanti) e i div con 450 di altezza hanno i 50 in più sovrapposti con quelli di sotto.
    Strano!!!
    Continuo a smanettarci sopra...se intanto ti viene in mente qualcosa mi troverai pronto a leggerti!!!

    Grazie ancora, ciao!

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5

    Soluzione definitiva (spero)

    Dato che credo tu abbia in mano anche il backend di questo sito, fai una cosa molto semplice così che ti funziona anche in IE8.

    Aggiungi ad ogni div, partendo dal primo (0) e successivamente ogni 2, una classe es. even

    <div class="even">0</div>
    <div class="odd">1</div>
    <div class="even">2</div>

    quindi aggiungi css facendo riferimento al seguente selettore

    codice:
    div.even {
      clear: left;
    }
    ed hai fatto!

    Ciao,
    Alby.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    Il problema dovrebbe essere che il contenuto non viene considerato come oggetto tale da modificare il div in altezza...lo, so, detto così non si capisce molto...provo a spiegarmi meglio: il container, il quale ha altezza=auto, in caso ci sia solo il div da 450, viene esteso in altezza solo fino ad un certo punto (che è lo stesso di quando ci sono anche tutti gli altri div, riprendendo l'esempio precedente a 400 di altezza). Questo significa che all'interno di questi div c'è qualcosa che non lo fa "vedere" come oggetto "solido" (non credo di essere riuscito a spiegarmi meglio ). Quando mi capitava una cosa del genere intervenivo su overflow=hidden e tutto tornava a posto, ma qui neanche questo sembra funzionare...continuo a provare!!!

    GRAZIE, GRAZIE, GRAZIE x provare ad aiutarmi!!!

    Ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    RISOLTO:

    Come? 'na botta de !!!

    Affranto dal non riuscire ad applicare il tuo metodo, ho cancellato tutto tornando alla situazione originaria...però, tra i vari tentativi che avevo fatto, un display:table era andato a finire dentro ai valori del DIV child...ed ecco che tutto sta al posto giusto!!!

    In ogni modo, grazie davvero tanto per la paziente collaborazione, e soprattutto grazie di avermi fatto ampliare le conoscenze sui selettori dei css3 che prima quasi ignoravo!

    Ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    5

    Bene

    figurati,
    Ciao Ciao.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199


    come non detto...PROBLEMA NON RISOLTO, quindi bambini, se avete lo stesso problema, non mettete display=table nella speranza di risolverlo, che tanto non serve!!!
    La stanchezza deve aver avuto il sopravvento...ma non sto qui a spiegare xk credevo di aver risolto

    Vabbè, riapro la discussione e rimango in attesa...

    ciao ciao!




    INUTILE DIRLO: ho risolto
    tornando indietro sui miei passi ho ripreso ciò che Alby mi ha suggerito, facendo stavolta direttamente copia e incolla cambiando il nome del mio div...e chissà perchè stavolta funziona!!! Avrò sbagliato qualcosa prima nel trascriverlo probabilmente.
    Grazie ancora Alby!!!
    Ciao


    PS: basta scrivere questo:

    div.container div:nth-child(odd) {
    clear: both;
    }

    ovvero la prima cosa che mi suggeristi!!! Meglio che cambio lavoro!!!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.