2011-03-18 23 views
40
<div id="wrapper" style="width:90%;height:100px;background-color:Gray;"> 
    <div id="one" style="height:100px;background-color:Green;float:left;"></div> 
    <div id="two" style="height:100px;background-color:blue;float:left;"></div> 
    <div id="three" style="height:100px;background-color:Red;float:left;"></div> 
</div> 

Tengo un div principal que contendrá 2 o 3 divs secundarios. Quiero que los divs hijos tomen el mismo ancho automáticamente.CSS lado a lado anchos iguales del div

Gracias

+4

por lo que no quiero specifiy un 'width' para el niño-divs? imposible con solo CSS. Su solución más cercana sería darles 'ancho: 33.33%'. Vea aquí: http://jsfiddle.net/wBv5r/ – Bazzz

Respuesta

83

No es imposible. Ni siquiera es particularmente difícil, con el uso de display: table.

Esta solución will work en los navegadores modernos. No funcionará en IE7.

http://jsfiddle.net/g4dGz/(tres div s)
http://jsfiddle.net/g4dGz/1/(dos div s)

CSS:

#wrapper { 
    display: table; 
    table-layout: fixed; 

    width:90%; 
    height:100px; 
    background-color:Gray; 
} 
#wrapper div { 
    display: table-cell; 
    height:100px; 
} 

HTML:

<div id="wrapper"> 
    <div id="one">one one one one one one one one one one one one one one one one one one one one one</div> 
    <div id="two">two two two two two two</div> 
    <div id="three">three</div> 
</div> 
+0

¿Cómo obligarías a esto a trabajar en IE7?Estoy interesado en saber Excelente solución Treinta! – Chris

+0

@Chris: No puedo pensar en una solución de CSS pura para IE7, pero hay una solución de JavaScript: http://tanalin.com/en/projects/display-table-htc/ – thirtydot

+2

¿Cómo se ve este método en las mejores prácticas? ? ¿Está bien usar 'display: table' cuando el contenido no es tabular? – Rikki

1

¿Ha intentado utilizar width:33%?

+3

La pregunta es sobre una cantidad variable de hijos. No exactamente 3. –

+1

@ jakob.j verdadero, pero puede agregar clases al contenedor como contains_1 contains_2, contains_3 si tiene alguna información de back-end y sabe que hay un límite superior en el número de divs. Ejemplo: .wrapper.contains_4> div {width: 25%} –

0
.wrapper > div { 
    width: 33.3%; 
} 

Esto no funciona en IE < = 6, por lo que añadiría mejor algunos de clase común a divs niño y crear una regla CSS para ello.

+3

La pregunta es sobre un número variable de hijos. No exactamente 3. –

+0

@ jakob.j "Tengo un div principal que contendrá 2 o 3 divs secundarios" ... – kpower

25

en los navegadores modernos, puede utilizar flexbox

three divs ejemplo

two divs ejemplo

CSS:

#wrapper { 
display: flex;  
width:90%; 
height:100px; 
background-color:Gray; 
} 
#wrapper div { 
flex-basis: 100%; 
} 

HTML:

<div id="wrapper"> 
<div id="one">one one one one one one one one one one one one one one one one one one one one one</div> 
<div id="two">two two two two two two</div> 

+0

¡Muchas gracias! Esto fue especialmente útil cuando se usa 'display: table' y no hubo opción debido a las diferentes alturas de los divs individuales para niños. – icke

+0

Para mí funcionó mejor que la publicación "marcado como respuesta". ¡Gracias! – Andrei

1

Aquí hay una solución que funciona.

html:

<div id="parent"> 
    <div></div> 
    <div></div> 
    <div></div> 
</div> 

css:

#parent{ 
    height: 200px; 
    background: #f00; 
} 
#parent > div{ 
    width: calc(100%/3); 
    height: 100%; 
    background: #fff; 
    float: left; 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
} 
#parent > div:nth-child(1){ 
    border-right: 30px solid #f00; 
} 
#parent > div:nth-child(2){ 
    border-right: 15px solid #f00; 
    border-left: 15px solid #f00; 
} 
#parent > div:nth-child(3){ 
    border-left: 30px solid #f00; 
} 
Cuestiones relacionadas