2012-08-28 18 views
11

Tengo un diseño de dos columnas, barra lateral a la izquierda, contenido a la derecha.CSS child clearing parent float

Por lo tanto, hago flotar la barra lateral izquierda y le doy un margen al contenido de la derecha. Todo está bien y bien ...

Hasta que un elemento secundario del contenido tiene una clara aplicada a él, salta debajo de la barra lateral.

¿Hay alguna manera de hacer que los elementos de los niños floten y queden limpios dentro de su contenedor principal?

Como una imagen vale más que 1000 palabras, aquí hay un jsFiddle:

http://jsfiddle.net/qRYYm/1/

+0

http://jsfiddle.net/qRYYm/2/ – Peter

+0

@PeterSzymkowski - ¿verdad significa presionar 'Actualizar' en el jsfiddle primero? – ahren

+0

por supuesto, lo siento – Peter

Respuesta

26

Si agrega overflow:auto;-.content que debe ver tienes razon.

+0

Perfecto. ¿Podrías darnos un poco más de explicación sobre por qué funciona esto? – ahren

+3

El problema es que el contenido de DIV no se extenderá a la altura de los elementos más altos cuando contenga elementos flotantes. Agregar desbordamiento: automático (u oculto o desplazado) hará que se expanda. Más información aquí: http://www.quirksmode.org/css/clearing.html –

+0

Simplemente curioso, ¿cuál es el valor predeterminado de 'overflow' para un DIV? – Justin

0

Qué tal esto:

aside{ 
    position: absolute; 
    height: 300px; 
    width: 100px; 
} 

http://jsfiddle.net/qRYYm/2/

+0

Ese es el efecto que persigo, pero ¿es posible sin usar el posicionamiento absoluto? – ahren

0

Debe evitar el uso de borrar. Puede utilizar overflow: hidden con contenedor principal

<div class="content"> 
    <div class="one">One</div> 
    <div class="two">Two</div>  
</div> 

.content { float: left; overflow: hidden; width: 900px; } 
aside { float: left; width: 100px; } 

Además, no se debe utilizar el margen izquierdo: 100px para empujar el contenido fuera de la columna de la izquierda. Flota ambos a la izquierda. Encuentro que a las columnas les gusta estar en un contenedor principal. Es más acogedor de esa manera.

+0

flotando ambos a la izquierda no permite que la segunda columna ocupe el ancho restante ... es decir; se Flexible. – ahren

0

Puede hacerlo de esta manera también.

.left{float:left;} 
.right {float:right;} 
.clear{clear:both;} 

<div> 
    <div class="left">SideBar</div> 
    <div class="right"> 
      <div> 
       <div class="left">content 1</div> 
       <div class="left">content 2</div> 
       <div class="clear"></div> 
      </div> 
    </div> 
    <div class="clear"></div> 
</div> 

Al aplicar flotador en cualquier div (s), ponerlos en un div padre y claro en el div mismo padre

+0

esto no permitirá que '.right' se expanda para ocupar el ancho restante ... – ahren

Cuestiones relacionadas