2011-03-20 12 views
6

¿Cómo hago un div automáticamente lo suficientemente amplio como para dar cabida a sus niños flotantes?¿Cómo hago un div automáticamente lo suficientemente amplio para acomodar a sus hijos flotantes?

<div class="Parent"> <!-- 3 Children, should be 450px wide--> 
    <div class="Child"></div> 
    <div class="Child"></div> 
    <div class="Child"></div> 
</div> 
<div class="Parent"> <!-- 2 children, should be 300px wide--> 
    <div class="Child"></div> 
    <div class="Child"></div> 
</div> 

Las divs Child son todas "float: left" con anchos fijos. ¿Cómo hago que Parent div sea igual al ancho de sus hijos flotantes? El número de hijos en cada padre varía y se desconoce, pero los niños deben alinearse en una fila, sin envolver a una nueva línea.

Ejemplo: Si los tres hijos son 150px, el padre debe convertirse en 450px para que ninguno de los hijos se envuelva. Si hay dos hijos de 150 px, el padre debe convertirse en 300 px.

ACTUALIZACIÓN:

"violín" está muy bien. Aquí hay una demostración del problema: http://jsfiddle.net/AG3c9/6/

Al pasar el mouse sobre los animales, puede ver que las aves, los reptiles y los peces se apilan uno encima del otro. Deben mostrar uno al lado del otro.

Esto es lo que quiero que se vea como: http://jsfiddle.net/AG3c9/8/

lo tengo al obligar a los padres a ser un ancho fijo. Pero el padre debe variar según sus hijos y no tener un ancho fijo.

+0

¿Qué está pasando ahora? ¿se envuelven en una nueva línea? ¿has probado 'width: auto' en Parent? – moe

+0

Por favor, mira la actualización. – Nick

+0

¿en qué navegador estás probando esto? Estoy usando Chrome y ambos enlaces que pegas funcionan de la misma manera. Las aves, los reptiles y los peces están uno al lado del otro y no encima del otro. – moe

Respuesta

6

flotar el .Parentdiv s:

Live Demo

mi prueba de CSS:

.Parent { 
    float: left; 
    background: #ccc; 

    margin: 0 0 16px 0; 
    clear: both 
} 
.Child { 
    float: left; 
    width: 150px; 
    height: 50px; 
} 

Esto es lo que sucede cuando no float: left el div padre:

http://jsfiddle.net/thirtydot/AG3c9/1/

+0

Intenté su sugerencia, pero todavía insiste en apilar a los niños. (mi problema no se parece a tu segundo ejemplo "malo"). Hace que el padre divice el ancho de un div infantil y coloca los tres hijos verticalmente, uno debajo del siguiente. Supongo que lo que quiero es la forma en que debería funcionar, pero mi problema es algo completamente diferente. Agregaré más código arriba. – Nick

+2

Tienes razón: la pregunta que hiciste y tu problema real fueron bestias completamente diferentes. Solucioné tu problema real haciendo uso de 'display: inline-block'. Probé mi solución en IE7, IE8 y versiones recientes de Firefox, Chrome, Safari, Opera. Aquí está: http://jsfiddle.net/AG3c9/16/ - CTRL + F para '/ * NEW * /' para ver las dos partes nuevas. También eliminé 'float: left' de un par de lugares. – thirtydot

+0

¡Gracias por ir más allá! Voy a adivinar que esto no funcionará en IE6, pero no estoy seguro de que me importe. ¡En algún momento las personas solo necesitan actualizar sus navegadores! ¡Gracias de nuevo! – Nick

Cuestiones relacionadas