2009-04-30 11 views
83

Quiero el exterior div, que es negro para envolver su div s flotando dentro de él. No quiero usar style='height: 200px en el div con el ID outerdiv ya que quiero que sea automáticamente la altura de su contenido (por ejemplo, el div s flotante).Haga que el div externo sea automáticamente de la misma altura que su contenido flotante

<div id='outerdiv' style='border: 1px solid black;background-color: black;'> 
<div style='width=300px;border: red 1px dashed;float: left;'> 
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
</div> 

<div style='width=300px;border: red 1px dashed;float: right;'> 
    <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p> 
</div> 

¿Cómo lograr esto?

Respuesta

151

Es posible ajustar la CSS outerdiv 's a este

#outerdiv { 
    overflow: hidden; /* make sure this doesn't cause unexpected behaviour */ 
} 

También puede hacer esto mediante la adición de un elemento al final con clear: both. Esto se puede agregar normalmente, con JS (no es una buena solución) o con el pseudo elemento CSS :after (no ampliamente admitido en IEs anteriores).

El problema es que los contenedores no se expandirán de forma natural para incluir a los niños flotados. Tenga cuidado con el uso del primer ejemplo, si tiene elementos secundarios fuera del elemento principal, estarán ocultos. También puede usar 'auto' como el valor de propiedad, pero esto invocará barras de desplazamiento si algún elemento aparece afuera.

También puede intentar flotar el contenedor primario, pero esto puede ser imposible/difícil según su diseño.

+33

Desearía haber entendido la lógica de por qué desbordamiento: trabajos ocultos en este caso. – masteroleary

+2

Sí, esperaba que no fuera solo yo quien pensara que esto era contrario a la intuición. alex? – regularmike

+0

@regularmike Leí una explicación una vez, la estaré atento y la vincularé de nuevo si la encuentro. – alex

7

Es posible que desee probar los flotadores de cierre automático, como se detalla en http://www.sitepoint.com/simple-clearing-of-floats/

Así que tal vez intente cualquiera overflow: auto (por lo general funciona), o overflow: hidden, como dijo Alex.

+0

el trabajo oculto, pero tienes razón, el auto funciona mejor. Gracias. –

2

En primer lugar, no usa width=300px que es una configuración de atributo para la etiqueta, no CSS, use width: 300px; en su lugar.

Sugeriría aplicar la técnica clearfix en el #outerdiv. Clearfix es una solución general para borrar 2 divs flotantes por lo que el div principal se expandirá para acomodar los 2 divs flotantes.

<div id='outerdiv' class='clearfix' style='width:600px; background-color: black;'> 
    <div style='width:300px; float: left;'> 
     <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
    </div> 

    <div style='width:300px; float: left;'> 
     <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p> 
    </div> 
</div> 

Aquí es un example de su situación y lo hace Clearfix para resolverlo.

14

En primer lugar, le recomiendo que haga su estilo de CSS en un archivo CSS externo, en lugar de hacerlo en línea. Es mucho más fácil de mantener y puede ser más reutilizable usando clases.

Trabajar fuera la respuesta de Alex (& clearfix de Garret) de "añadir un elemento al final con claro: tanto", puede hacerlo de esta manera:

<div id='outerdiv' style='border: 1px solid black; background-color: black;'> 
     <div style='width: 300px; border: red 1px dashed; float: left;'> 
      <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
     </div> 

     <div style='width: 300px; border: red 1px dashed; float: right;'> 
      <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p> 
     </div> 
     <div style='clear:both;'></div> 
    </div> 

Esto funciona (pero como se puede ver en línea CSS no es tan bonito).

+0

¿Por qué me calificaron? Funciona, y con razón reconocí que no era una solución bonita. – Lycana

+1

No estoy seguro, hice +1 para volverte a 0 al menos. Tal vez te rechazaron porque no corrigió su CSS incorrecto ... es decir, usar el signo igual para establecer una propiedad CSS es incorrecto. – alex

+0

es suficiente. Aprecio el +1 alex. Pensé que era mi declaración fue justa. – Lycana

1

Uso de jQuery:

Set Parent Altura = offsetHeight Niño.

$(document).ready(function() { 
    $(parent).css("height", $(child).attr("offsetHeight")); 
} 
+2

Overkill, cuando puedes hacerlo solo con CSS. – alex

+1

Con mi respuesta, puede establecer la altura de los padres igual que la altura de los niños, pero al usar el desbordamiento no cambiaremos la altura de los padres, lo que creará algún problema si mostramos datos después del elemento principal. – Harpal

0

Uso clear: both;

Me pasé más de una semana tratando de resolver esto!

4

Sé que algunas personas me odiarán, pero he encontrado display:table-cell para ayudar en estos casos.

Es realmente más limpio.

Cuestiones relacionadas