2011-05-24 34 views
40

que tienen la siguiente estructura en mi solicitud:Expand div contenedor con la anchura del contenido

<div id="container"> 
    <div id="child_container"> 
    <div class="child"></div> 
    <div class="child"></div> 
    ... 
    <div class="child"></div> 
    </div> 
</div> 

Cada div niño tiene una anchura fija conocida, pero la aplicación permite que más de ellos para ser insertado en el div child_container.

Lo que trato de hacer es hacer que el contenedor div se expanda horizontalmente cuando sea necesario, dado el ancho total del contenedor secundario.

Esto es lo que ocurre actualmente:

+------ container -------+ 
+--- child_container ----+ 
| child1 child2 child3 | 
| child4     | 
+------------------------+ 

Si fijo el ancho child_container div a un valor fijo, puedo conseguir que se expanda horizontalmente por delante del div contenedor, que funciona a pesar de ser un poco feo:

+------ container -------+ 
+------ child_container -+----+ 
| child1 child2 child3 child4 | 
+------------------------+----+ 

Sin embargo, eso requiere recalcularlo cuando se agrega un nuevo elemento secundario.

¿Hay una manera de hacer esto sin necesidad de utilizar anchos fijos de contenedor secundario, de tal manera que el resultado final es

+--------- container ---------+ 
+------ child_container ------+ 
| child1 child2 child3 child4 | 
+-----------------------------+ 

Gracias.

+0

Sírvanse proporcionar algo de código. En un violín es aún mejor. – Andre

+1

Aquí está: http://jsfiddle.net/8XGqs/ – Andre

+0

http://jsfiddle.net/8XGqs/1/ ilustra mejor el arte ascii anterior, creo. Ancho agregado: 100% a #container. – Andre

Respuesta

26

Algo como esto debería funcionar:

#container, #child_container, .child { 
    position: relative; 
    float: left; 
} 
+1

¿Por qué 'position: relative'? – thirtydot

+3

@thirtydot debido a la forma en que algunos navegadores representan el html. sin decirle la posición, algunos navegadores no usarán los tamaños de elementos 'secundarios' para aumentar el tamaño de los contenedores – wajiw

+1

Esto es bueno ... aunque es posible que no necesite la 'posición: relativa;' –

2

Si flota todo lo que queda incluido el contenido de divs, funcionará.

28

Aún más fácil:

<style> 
    #container{ display: inline-block; } 
</style> 
+0

Solo deseo, IE7 no arrojó un ataque cada vez que se utiliza esa declaración ... – dkroy

+3

Fácil de manejar por este [respuesta] (http://stackoverflow.com/questions/ 6544852/ie7-problem-with-display-inline-block) –

-7

acaba de establecer la anchura de la matriz al 120% y hecho =)

+2

Eso permitirá algunos elementos más, ¿qué tal si entran más cosas? –

11

El contenedor primario ganaron' t crecer cuando se agrega un elemento secundario.

+------ container -------+ 
+--- child_container ----+ 
| child1 child2 child3 | 
| child4     | 
+------------------------+ 

pero podemos evitar la prestación de uno nuevo en la siguiente línea mediante el uso de la caja de la flexión CSS3. La muestra se coloca por debajo de la mencionada path

.products{ 
      display: -webkit-flex; 
      -webkit-flex-flow: row; 
      /*-webkit-justify-content: center;*/ 
     } 
     .products > div{ 
      padding: 0 4em; 
     } 

El resultado se verá así:

+--- child_container ----+| 
| child1 child2 child3 ch|ild4 child5 
|       | 
+------------------------+ 
Cuestiones relacionadas