2013-02-05 9 views
6

Supponiamo di avere il seguente codice:I margini CSS si sommano o sono combinati?

<div style="margin-bottom:100px;">test</div> 
<div style="margin-top:100px;">test</div> 

ho notato che a volte crea 100px di margine tra gli elementi e qualche volta è 200px (quando usiamo alcune impostazioni che non sono a conoscenza). Non riesco a trovare alcuna informazione a riguardo nelle specifiche. Da cosa dipende?

Se disponiamo di h1 e p in un documento vuoto, il margine di h1 verrà combinato con il margine di p. Non si sommano. Verrà utilizzato quello che è più grande.

+0

sembrano uguali a me: http://jsfiddle.net/s7bWq/ – ashley

+0

Sono un po 'confuso su questo, ma penso che sia ciò che i browser dovrebbero fare. Cioè, usa il più grande dei due margini. Potrebbe essere specifico per il browser, ma non sono sicuro ... –

+0

I DIV creeranno sempre 200 px di margine. Ma 'h1' +' p' li combinerà a 100px. Questo deve essere testato in un documento vuoto. – Atadj

risposta

12

Questo sta accadendo perché i margini possono crollare. Certi margini possono sovrapporsi (per lo più elementi di blocco) e formare un margine combinato definito dal più grande dei due valori definiti nelle regole di stile degli elementi calcolati - questo è ciò che sta accadendo qui. This section dal documento CSS Box Model lo spiega in dettaglio.

Edit: Come punto di interesse, è possibile aggirare questo senza rompere le cose in un paio di modi

  • Rendere gli elementi (cioè rompere i margini comprimibili.) (molto?) width: 100%; display: inline-block
  • Inserire un blocco height: 0; width: 0; overflow: hidden tra gli elementi e inserire un punto o qualcosa in esso.

I biforcuta ashley fiddle da dimostrare. Ci sono probabilmente altri metodi, ma questi sono un modo veloce per aggirare i margini collassabili se necessario.

+1

Qualcosa che spesso si perde nei grandi siti è l'altezza della linea. Se lo imposti su qualcosa che è inferiore all'altezza di rendering dell'elemento puoi perdere anche alcuni pixel dei margini in questo modo – DMTintner

+0

Questo è esattamente quello che stavo cercando :) È più complesso di una semplice proprietà standard che lo rende possibile forse è per questo che è stato difficile trovarlo. – Atadj

Problemi correlati