Foros del Web » Creando para Internet » CSS »

Problema con margin-top con elementos flotantes en FF

Estas en el tema de Problema con margin-top con elementos flotantes en FF en el foro de CSS en Foros del Web. Hola. En FF me pasa que si pongo dos divs, llamados "A" y "B", con elementos flotantes en su interior y a "B" le asigno ...
  #1 (permalink)  
Antiguo 27/03/2012, 15:21
Avatar de hshadow  
Fecha de Ingreso: abril-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Problema con margin-top con elementos flotantes en FF

Hola.

En FF me pasa que si pongo dos divs, llamados "A" y "B", con elementos flotantes en su interior y a "B" le asigno un margen top para que se separe de "A", "A" "imita" dicho margen y también se separa de lo que tenga arriba.

Pongo abajo el código con el problema en cuestión aislado (Sólo se presenta con el margin-top):

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
<style type="text/css">
body{
margin:0px;
padding:0px;}

.contenedor{
background-color:#000066;}

.contenedor_indiferente{
background-color:#CC0033;}

.contenedor_indiferente_left_1{
float:left;}

.contenedor_indiferente_left_2{
float:right;}

.contenedor_flotadores{
background-color:#999999}

.contenedor_flotadores_left{
float:left;}

.contenedor_flotadores_right{
float:left;}

.clear{
clear:both;}
</style>
</head>

<body>
<div class="contenedor">
	<div class="contenedor_indiferente">
       	<div class="contenedor_indiferente_left_1">
            Elemento Left 1
        </div>
       	<div class="contenedor_indiferente_left_2">
            Elemento Left 2
        </div>
        <div class="clear"></div>
    </div>
    <div class="contenedor_flotadores" style="margin-top: 10px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div>
</div>
</body>
</html> 
Dado que este problema sólo está presente en FF pueden ayudarse con el FireBug para alterar el margen que puse por defecto. Verán que "A" alterará su margen "fantasma" acorde al cambio que hagan en el margen de "B".

Por cierto, si agregan mas divs "contenedor_flotadores" y cambian su margin top a una mayor cantidad, "A" imitará al mayor.

Código HTML:
 <div class="contenedor_flotadores" style="margin-top: 10px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div>
    <div class="contenedor_flotadores" style="margin-top: 15px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div>
    <div class="contenedor_flotadores" style="margin-top: 20px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div> 
Hasta ahora vine zafando con absolutes y en muy contadas veces con paddings, pero quisiera conocer la solución / corrección... si es que las hay.

A mi me huele a bug de FF. Alguna idea?

Saludos.
  #2 (permalink)  
Antiguo 28/03/2012, 01:05
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Problema con margin-top con elementos flotantes en FF

La solución pasa por darle overflow: auto a los divs, con un pequeño reset lo arreglas

Además te puse margenes adicionales para que veas que se pueden manejar a voluntad, e hice coincidir tus floats con las descripciones

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin t&iacute;tulo</title>
  5. <style type="text/css">
  6. html, body , div{
  7. margin:0px;
  8. padding:0px;
  9. border: none;
  10. overflow: auto;
  11. }
  12.  
  13. .contenedor{
  14. background-color:#000066; margin-top: 50px;}
  15.  
  16. .contenedor_indiferente{
  17. background-color:#CC0033; margin-top: 10px;}
  18.  
  19. .contenedor_indiferente_left_1{
  20. float:left;}
  21.  
  22. .contenedor_indiferente_left_2{
  23. float:right;}
  24.  
  25. .contenedor_flotadores{
  26. background-color:#999999}
  27.  
  28. .contenedor_flotadores_left{
  29. float:left;}
  30.  
  31. .contenedor_flotadores_right{
  32. float:right;}
  33.  
  34. .clear{
  35. clear:both;}
  36. </head>
  37.  
  38. <div class="contenedor">
  39.     <div class="contenedor_indiferente">
  40.         <div class="contenedor_indiferente_left_1">
  41.             Elemento Left en A
  42.         </div>
  43.         <div class="contenedor_indiferente_left_2">
  44.             Elemento right en A
  45.         </div>
  46.         <div class="clear"></div>
  47.     </div>
  48.     <div class="contenedor_flotadores" style="margin-top: 10px;">
  49.         <div class="contenedor_flotadores_left">
  50.             Flotador Left en B
  51.         </div>
  52.         <div class="contenedor_flotadores_right">
  53.             Flotador Right en B
  54.         </div>
  55.         <div class="clear"></div>
  56.     </div>
  57. </div>
  58. </body>
  59. </html>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 28/03/2012, 08:23
Avatar de hshadow  
Fecha de Ingreso: abril-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Problema con margin-top con elementos flotantes en FF

Gracias.

Lo arreglé poniendo un div con line-height:0px arriba del div que debía tener el margin-top. No se por que pero tiene que ver con que en FF un elemento no puede marginarse desde arriba simplemente con el borde de aquello que lo contiene, por lo que hay que agregar algo "solido" arriba del mismo como para que ahí sí pueda distanciarse o bien usar padding-top. Esto que digo se nota si al div contenedor le pones un fondo de color. Verás que el margen no se torna de ese color sino blanco (color de fondo del body por default) marginándose, sí, pero no desde el borde sino desde lo que tenga arriba.

Dejo abajo el código con mi solución.

Igualmente gracias por tu respuesta. Ya le daré un par de intentos también.

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
<style type="text/css">
body{
margin:0px;
padding:0px;}

.contenedor{
background-color:#000066;}

.contenedor_indiferente{
background-color:#CC0033;}

.contenedor_indiferente_left_1{
float:left;}

.contenedor_indiferente_left_2{
float:right;}

.contenedor_flotadores{
background-color:#999999}

.contenedor_flotadores_left{
float:left;}

.contenedor_flotadores_right{
float:left;}

.clear{
clear:both;}
</style>
</head>

<body>
<div class="contenedor">
	<div class="contenedor_indiferente">
       	<div class="contenedor_indiferente_left_1">
            Elemento Left 1
        </div>
       	<div class="contenedor_indiferente_left_2">
            Elemento Left 2
        </div>
        <div class="clear"></div>
    </div>
    <div style="line-height:0px">&nbsp;</div>
    <div class="contenedor_flotadores" style="margin-top: 10px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div>
    <div class="contenedor_flotadores" style="margin-top: 15px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div>
    <div class="contenedor_flotadores" style="margin-top: 20px;">
        <div class="contenedor_flotadores_left">
        	Flotador Left
        </div>
        <div class="contenedor_flotadores_right">
        	Flotador Right
        </div>
        <div class="clear"></div>
    </div>
</div>
</body>
</html> 
Saludos.

Etiquetas: divs, elementos, flotantes, html, margin-top, fondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:47.