2009-08-07 9 views
8

EDIT: Questo accade solo in IE8, funziona benissimo in IE7, Firefox, Opera eccIE8 - Contenitore con margin-top: 10px non ha alcun margine di

Prima di tutto, ecco un quadro che ho fatto in photoshop per dimostrare il mio problema: http://richardknop.com/pict.jpg

Ora dovresti avere un'idea del mio problema. Ecco una versione semplificata di markup che sto utilizzando (ho tralasciato contenuti più irrilevante):

<div class="left"> 
    <div class="box"> 
     // box content 
    </div> 
    <div class="box"> 
     // box content 
    </div> 
    <div class="box"> 
     // box content 
    </div> 
</div> 
<div class="right"> 
    <div class="box"> 
     // box content 
    </div> 
    <div class="box"> 
     // box content 
    </div> 
    <div class="box"> 
     // box content 
    </div> 
</div> 
<div class="clear"></div> 
<div class="box"> 
    // 
    // NOW THIS BOX HAS NO TOP MARGIN 
    // 
</div> 
<div class="box"> 
    // box content 
</div> 

E gli stili CSS andare in questo modo:

.clear { 
    clear: both; 
} 
.left { 
    float: left; 
} 
.right { 
    float: right; 
} 
.box { 
    overflow: auto; 
    margin-top: 10px; 
} 

Ovviamente ho lasciato fuori tutti gli stili irreevant come bordi, colori di sfondo e immagini, dimensioni dei caratteri ecc. Ho tenuto solo cose importanti.

Qualche idea di dove potrebbe essere il problema?

+0

Hai un set DOCTYPE (ad esempio, stai utilizzando la modalità standard IE8 o stranezze?) – scunliffe

+0

Sì, ho:

+0

Non ho esaminato il problema in dettaglio, ma mi chiedo se potrebbe essere causato da margini che collassano ad es. http://www.andybudd.com/archives/2003/11/no_margin_for_error/ – ChrisW

risposta

9

Vedere se padding-top: 10px funziona. Potrebbe essere che il margine stia cercando di andare dalla parte superiore della pagina.

+0

Non riesco a usare padding-top: 10px perché le caselle hanno già il colore di sfondo e hanno già il padding: 10px quindi il contenuto al loro interno –

+6

Prova ad aggiungere un filler come " " al div chiaro. Ricordo che c'era un bug in alcune versioni precedenti che necessitava di contenuti come questo – Justin

+0

L'aggiunta di   risolveva il problema :) Dovevo solo aggiungere anche altezza: 0 ; alla classe .clear. –

1

Prova a chiudere il tuo clear div.

<div class="clear"></div> 
+0

Questo è un problema, ma non il problema. Aggiungendo la classe 'clear' al div box, si cancellerà comunque qualsiasi cosa prima. – Justin

+0

Ho appena dimenticato di chiuderlo qui, è chiuso nel codice sorgente. Ho modificato il mio post. –

1

Non ho proprio questo approccio. È possibile avvolgere il gruppo <div> con la classe destra e sinistra in un altro <div> e applicare overflow: hidden, width: 100% in modo che gli elementi sotto elementi flottanti vengano visualizzati correttamente.

+0

Sì, ma preferisco avere il markup minimo e usare solo tanti div che sono assolutamente necessari. Ciò aggiungerebbe semplicemente un altro elemento privo di significato semantico che non è nemmeno necessario per lo stile. –

+1

@Richard, direi che

 
è esattamente lo stesso. E personalmente sceglierei la soluzione di overflow, dal momento che l'HTML sembra migliore. Ma sono io. – dalizard

1

enter code here Provare a utilizzare un contenitore con una larghezza con overflow: nascosto attorno ai div floated e rimuovere il div eliminato.

<div id="container"> 
     <div class="left">  
      <div class="box">  // box content </div>  
      <div class="box">  // box content </div>  
      <div class="box">  // box content </div> 
     </div> 
     <div class="right">  
      <div class="box">  // box content right </div>  
      <div class="box">  // box content </div>  
      <div class="box">  // box content </div> 
     </div> 
    </div> 
    <div class="box"> // // NOW THIS BOX HAS NO TOP MARGIN //</div> 
<div class="box"> // box content</div> 

E il CSS

#container { width: 100%; overflow: hidden; } 

(scusate, ho lasciato IE7 sulla mia macchina di lavoro per le prove, quindi non posso verificare)

+0

e aggiungi overflow: nascosto e funzionerà :-) – dalizard

+0

giusto, mi ha appena catturato nel processo di farlo! – ScottE

6

Penso che questo sia un bug di IE8. Si riferisce a un elemento fratello di un div flottante a sinistra e a destra. Con o senza un div di compensazione, l'ultimo elemento unfloated perde il suo margine superiore in IE8.

Abbiamo testato questo, e solo IE8 sbaglia:

http://www.inventpartners.com/content/ie8_margin_top_bug

Abbiamo inoltre si avvicinò con 3 soluzioni.

+0

Buona ricerca. L'argomento difficile è i margini crollati con la compensazione all'interno. Tutti e 3 i margini superiori dei div non fluttanti sono compressi nel tuo esempio, quindi il margine superiore del terzo non viene perso; è crollato con il primo. Senza una chiara proprietà, il comportamento di IE8 è sicuramente corretto e gli altri browser sono d'accordo. Ciò che l'aggiunta di proprietà chiare dovrebbe fare non è chiaro. Scopri il comportamento di Opera. A proposito, non hai bisogno di due galleggianti per la tua dimostrazione. –

+0

Interessante. Non ci avevo pensato in quel modo. IE8 è chiaramente molto più severo sul crollo dei margini rispetto a Gecko. Ho già scritto in precedenza su un altro problema di collasso del margine con display: tabella in gecko che è resa migliore (in modo diverso) in IE8 Sospetto che ci saranno molte altre incoerenze di collasso del margine che faranno scattare gli sviluppatori HTML in i prossimi mesi! –

+0

Ciao buti-oxa - Ho aggiunto una nota a piè di pagina al mio articolo che descrive la tua analisi di questo problema. Spero che sia ok. Fammi sapere se vuoi che lo cambi affatto. –

0

Non ho IE8 con me ... ma hai provato ad aggiungere chiaro: sia al div bottom che all'aggiunta di un margine inferiore a uno dei primi float? Sono abbastanza sicuro che otterrebbe lo stesso effetto senza alcuna div extra.

1

Ho problemi simili e le soluzioni fornite da Matt Bradley non hanno funzionato per me (ma grazie per averlo postato comunque!). Volevo avere margin-top: 10px su un elemento h1.

La soluzione che ho trovato è stata aggiungendo la posizione: relativa, superiore: 10px e margin-top: 0px all'elemento h1.

Problemi correlati