2012-01-26 11 views
34

Estoy intentando colocar 2 divs lado a lado dentro de otro div, de modo que pueda tener 2 columnas de texto y el div exterior dibujar un borde alrededor de dos de ellos:CSS: Flotante divs tienen 0 altura

HTML

<div id="outer"> 
    <div id="left"> 
     ... 
    <div id="right"> 
</div> 

CSS

#outer{ 
    background-color:rgba(255,255,255,.5); 
    width:800px; 
} 

#left{ 
    float:left; 
} 

#right{ 
    width:500px; 
    float:right; 
} 

sin embargo, el div exterior registra una altura de 0px y así la frontera no gira alrededor de los otros divs. ¿Cómo hago para que el div externo reconozca las alturas de las cosas dentro de él?

+0

https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=containing + flotadores –

+0

Este fue mi segundo resultado encontrado en google. –

Respuesta

78

No es porque los divs flotantes no tengan una altura, es porque los divs flotantes no afectan el tamaño del elemento principal.

Usted puede utilizar el estilo overflow para hacer que el elemento padre toma los elementos que flotan en consideración:

#outer { overflow: auto; } 
+6

+1 para explicar por qué sucede esto exactamente. Para obtener información técnica, esto hace que el elemento externo [establezca un nuevo contexto de formato de bloque] (http://www.w3.org/TR/CSS2/visuren.html#block-formatting) para sus flotantes, por lo que puede expandirse para contenerlos. – BoltClock

+3

@airo: puedes probar 'overflow: hidden;' en su lugar. Normalmente no importa qué modo de desbordamiento use siempre que la altura no esté definida para el elemento circundante, pero algunos navegadores pueden actuar en algunos casos, dependiendo del modo de reproducción y los elementos circundantes. – Guffa

+0

WOW ¡Esto realmente funciona! (y ni siquiera sé por qué funciona esto porque el valor predeterminado de 'overflow' ya es' auto' y simplemente lo está volviendo a configurar de nuevo ...) –

2

Puede despejar el flotador insertando un elemento después de los elementos flotados que tiene una propiedad clear aplicada porque los elementos secundarios flotantes hacen que el elemento primario tenga 0 alto ya que no toman en consideración la altura de los elementos flotantes .

<div id="outer"> 
    <div id="left"> 
     ... 
    <div id="right"> 
    <div class="clear"></div> 
</div> 

#outer{ 
    background-color:rgba(255,255,255,.5); 
    width:800px; 
} 

#left{ 
    float:left; 
} 

#right{ 
    width:500px; 
    float:right; 
} 
.clear{ clear: both; } 
+1

No, él no * necesita * para. Hay más de una manera de despellejar a un gato ... – Guffa

+0

Guffa, de acuerdo, redactado de nuevo. –

1

Prueba esto:

<div id="outer"> 
    <div id="left"> 
     ... 
    <div id="right"> 
    <div style="clear:both"></div> 
</div> 
1

desbordamiento complemento: hidden; a la div principal.

<style type="text/css"> 
#outer{ 
    background-color:rgba(255,255,255,.5); 
    width:800px; 
overflow: hidden; 
border: 1px solid green; 
} 

#left{ 
    float:left; 
border: 1px solid red; 
} 

#right{ 
    width:500px; 
    float:right; 
border: 1px solid yellow; 
} 
</style> 
4

Hay un par de soluciones a este problema:

#outer: overflow: hidden; 

o añadir algún contenido no se presentan a la div externa que viene después de los divs flotados que a continuación, añadir una clara: tanto el estilo gobernar a.

También puede agregar, through css, el: después del pseudo-elemento para insertar contenido después de esos divs que luego se aplican claros: ambos a - esto tiene la ventaja de que no requieren marcado adicional.

Mi preferencia es la primera.

+0

+1 por mencionar el uso de pseudo elementos. – iurii

1

También debe flotar el div exterior. Las divisiones que contienen floatet div y que no flotan se colapsan.

#outer{ 
    background-color:rgba(255,255,255,.5); 
    width:800px; 
    float:left; 
} 

#left{ 
    float:left; 
    width:300px; 
} 

#right{ 
    width:500px; 
    float:right; 
} 
0

¿Cómo combate la siguiente manera:

<style type="text/css"> 
#outer{ 
    background-color:rgba(255,255,255,.5); 
    width:800px; 
    border:thin solid #000000; 
    height:300px; 
    margin:5px; 
    padding:10px; 
} 

#left{ 
    float:left; 
    border:thin dashed #000000; 
    width:385px; 
    height:100px; 
    margin:5px; 
} 

#right{ 
    width:385px; 
    float:left; 
    border:thin dashed #000000; 
    height:100px; 
    margin:5px; 
} 
</style> 

<div id="outer"> 
    <div id="left"> 
    </div> 
     ... 
    <div id="right"> 
</div> 
</div> 
0

si div dentro de una matriz se flota que ya no forma parte de la div padre: comprobarlo mediante la inspección de element.no padre para arreglar el problema hay dos métodos: 1) hacen un div vacío al extremo interior de la clase padre como .blank todos siguiendo css

.blank:after{ 
     content: ""; 
     clear:both; 
     display:block; 
    } 

O 2) dar a los padres una clase.clara-fix y añadir CSS

.clearfix:after { 
content: ""; 
clear: both; 
display: block; 

} que dará a los padres una altura igual a contenidos

Cuestiones relacionadas