2012-05-23 9 views
13

Si se echa un vistazo en este violín en Chrome: http://jsfiddle.net/up4Fa/acolchado inferior no está trabajando en elemento de desbordamiento en los navegadores sin cromo

Usted verá un elemento desbordante que tiene 20 píxeles de acolchado en su interior! Todo bien y trabajando como se esperaba.

Sin embargo, si se ejecuta la misma prueba en IE9 o Firefox el texto en la parte inferior toca el borde del recipiente y el relleno inferior está siendo ignorado ...

Si hago el relleno en una div interior se ¿Será el problema, PERO prefiero solucionarlo con un div y no puedo entender por qué tanto Firefox como IE tienen problemas pero no Chrome?

EDITAR: ¡El texto no es la razón por la que alguien se estaba preguntando! Hará lo mismo con el cuadro rojo si elimino el texto.

Gracias

+1

Esto también me ha desconcertado, aunque añadiendo margin-bottom: 20px; al elemento rojo funciona .... –

+1

Informé de esta incompatibilidad en sentido ascendente al grupo de trabajo de CSS: https://github.com/w3c/csswg-drafts/issues/129#issue-156060453 –

+0

@BenCreasy ¿Sigue siendo un problema? en algunos navegadores? No mirado esto por unos años. – Cameron

Respuesta

17

Parece que a medida que se está configurando las dimensiones del contenedor div indirectamente por el posicionamiento, los navegadores no pueden predecir la altura del div y hacer el relleno correctamente. Un truco rápido y sucio de solucionar este problema es quitar el relleno de fondo del recipiente:

div.container { 
    ... 
    padding: 20px 20px 0 20px; 
    ... 
} 

y añadir un margen inferior a su último hijo:

div.container > *:last-child { 
    margin-bottom: 20px; 
} 

http://jsfiddle.net/xa9qF/

+1

¡Excelente solución! Aún molesto porque otros navegadores que Chrome pueden manejar algo tan simple como esto ... especialmente Firefox O_o – Cameron

+0

Terminé con la misma solución. Firefox e IE no hacen el relleno de fondo correctamente en elementos posicionados de altura fija, pero Chrome funciona bien. El problema puede estar en combinación con 'border-box'. – elclanrs

+0

Tenga en cuenta que esto no funciona si el último elemento secundario es una tabla. –

0

Una mejor enfoque, en mi opinión, está utilizando :after selector

div.container:after{ 
    content:""; 
    display:block; 
    height:20px; /* Which is the padding of div.container */ 
} 

http://jsfiddle.net/up4Fa/23/

Cuestiones relacionadas