2009-12-10 18 views
20

Necesito dos div s consecutivos (con fondos) para tocar sin problemas, uno debajo del otro. Sin embargo, este diseño se rompe cuando coloco un elemento p secundario en la parte inferior div. Los márgenes del elemento p fuerzan un espacio en blanco entre ambos div s. Este es un comportamiento extraño, ya que estoy esperando que el margen del p permanezca dentro del área de contenido y fondo del div. Se representa de la misma manera en Firefox, Chrome e IE 8.Elementos secundarios con márgenes dentro de los DIV

<div style="background: #ccccff">Top Div</div> 
<div style="background: #ffcccc"><p>Bottom Div</p></div> 

Esto es lo que parece.

Image showing the top div (in blue), then a white gap, then the bottom div (in pink). The white gap should not be present.

pude solucionar este problema cambiando los márgenes de los acolchados para el elemento p, pero entonces yo también tendría que hacer esto con elementos de encabezado, elementos de la lista, y cualquier otro elemento que quiero usar en el comienzo de un div. Eso no es deseable

Podría alguien aclararme: ¿qué advertencia del modelo de caja me falta? ¿Hay una manera fácil de arreglar esto, preferentemente modificando el estilo del div?

Respuesta

11

Esa es la expected behavior *. Hay algunas formas de evitarlo. Si coloca los divs, estos contendrán los márgenes de los elementos secundarios y evitarán el colapso de los márgenes. Otro enfoque es agregar un borde o relleno a los divs.

* Los márgenes del div y la p "se combinan para formar un solo margen", aunque estén anidados, porque tienen márgenes adyacentes sin margen o borde entre ellos.

+0

Sí, parece que colapsa los bordes. Sin embargo, todavía lo encuentro un poco peculiar. Gracias por el aviso. – myffical

+14

El comportamiento esperado en los navegadores es muy a menudo inesperado –

23

Añadir overflow: hidden o overflow: auto a la div

+0

Funciona perfectamente. ¡Gracias! – myffical

+0

No funciona cuando parent tiene otro menú desplegable, como en mi caso ( – ruruskyi

1

Configuración de un acolchado positivo, y un margen negativo correspondiente en el elemento div parece solucionar el problema, aunque no sé por qué.

<div style="background: #ccccff">Top Div</div> 
<div style="background: #ffcccc; padding: 1px; margin: -1px"><p>Bottom Div</p></div> 
8

Solución 1

Agregar overflow: hidden/auto en el div que contiene para evitar el colapso del margen.

Solución 2

agregar relleno positiva a la div que contiene e igual margen negativo al elemento interno

nueva solución

agregar relleno de 0.01px a la div que contiene, esta evitará que se colapse el margen, pero no necesitará ningún margen negativo en el elemento interno.

+0

En Chrome 0.01px el trabajo más denso para mí, pero 0.1px lo hace. Puedo ver el atractivo de esta solución sobre el uso del desbordamiento, pero ¿alguien lo ha probado extensamente en el navegador? – Evans

+0

Para uso en Chrome: relleno superior: 0.02px; –

Cuestiones relacionadas