2012-03-19 10 views
16

Busco una solución CSS a lo siguiente: -Conjunto div a sus hermanos tienen un ancho

<div style="display:inline;"> 
 
    <div>The content of this div is dynamically created but will always be wider than 
 
       the below div. 
 
    </div> 
 
    <div> Need this div to have the same width as the above div. 
 
    </div> 
 
</div>

La envoltura div tiene una pantalla en línea y funciona como se espera, tanto para el niño divs tienen contenido generado dinámicamente. Necesito que el de abajo tome el ancho del hermano anterior.

Muchas gracias por cualquier sugerencia con anticipación.

+1

div es un elemento de bloque es que automáticamente toman su ancho de los padres. mira esto http://jsfiddle.net/qG7b8/ – sandeep

+0

Lo hace. El ancho de ambos divs internos se maximiza para adaptarse al ancho de sus padres. Tal vez no sea lo que quieres decir ... –

+0

Gracias por sus comentarios. Le he dado a la envoltura div una pantalla: propiedad en línea, lo que significa que toma el ancho de su hijo más ancho. Ahora lo que necesito es que el segundo div hijo tome el ancho del primer div hijo. – user1278456

Respuesta

-1

No estoy seguro si he entendido lo que está tratando de hacer, pero parece que el establecimiento de un ancho de 100% al último div debería funcionar:

<div style="width:100%;"> 

Por cierto, el estilo de la primera div no está bien definido, usted debe utilizar los dos puntos en lugar de un signo igual en la definición propiedades:

<div style="display:inline;"> 
+0

no hay necesidad de definir ancho: 100% porque div es un elemento de bloque & es ancho automático – sandeep

+0

Esto fuerza al divisor envoltorio a ocupar toda la pantalla en lugar de establecer el div hijo al 100% de la envoltura div ... Sí;) bien manchado. – user1278456

+0

Después de haber pasado mucho tiempo jugando con CSS, he decidido ahorrarme algo de tiempo y utilizar una tabla. medio minuto = trabajo hecho. http://jsfiddle.net/XdLku/1/ ¡Ahora no todos gritan y gritan a la vez! Gracias por las contribuciones – user1278456

4

Indica tu div a display:inline-block lugar, de esta manera el div se expandirá con el contenido dentro de ella.

http://jsfiddle.net/CpKDX/

+2

http://jsfiddle.net/CpKDX/5/ En el ejemplo anterior, quiero que el segundo div hijo tome el ancho del primer div secundario, es decir, es un hermano anterior. – user1278456

+0

@ user1278456 puede configurar su div contenedor a 'display: inline-block' en lugar de' display: inline' y obtiene esos resultados, http://jsfiddle.net/CpKDX/6/ –

+0

que no me da el resultado deseado. Lo que quiero es que el div inferior tome la altura del div superior que no aparece en el violín anterior. – user1278456

0

ACTUALIZACIÓN: Esto funciona conmigo, sólo he probado:

<div style="max-width:980px;border:1px solid red;"> 
    <div style="background:#EEE;float:left;"> 
    <div style="width:auto;border:1px solid blue;float:left;">If you use 100% here, it will fit to the width of the mother div automatically.</div> 
    <div style="border:1px solid green;"> The div will be 100% of the mother div too.</div> 
    </div> 
    <div style="clear:both;"></div> 
</div> 

¿Es esto lo que quieres? Los bordes y el fondo son sólo para mostrar los divs;)


Sólo ve así:

Digamos que usted quiere todo el divs sea máximo. 980px (de lo contrario simplemente dejar que fuera o reemplazar con un 100%) ...

<div style="max-width:980px;"> 
    <div style="width:100%;">If you use 100% here, it will fit to the width of the mother div automatically. 
    </div> 
    <div style="width:100%;"> The div will be 100% of the mother div too. 
    </div> 
</div> 

La segunda opción sería, para usar una más div ... o utiliza style="width:auto;" para la dinámica div ...

+0

Ahh, me temo que esto tampoco produce el efecto deseado. – user1278456

+0

porque es el 100% del div de la madre, ¿verdad? Si no es lo que quieres, usa width: auto para ambos divs internos ... ¿funciona de esta manera? – Chris

+0

@ user1278456: Lo acabo de actualizar, funciona para mí ... hágamelo saber si es lo que estaba buscando :) – Chris

10

Los flotadores y las tablas son tan 2000 y tardíos. Con los navegadores de hoy podemos hacer que los dos DIV hermanos se igualen entre sí, independientemente de cuál sea más grande o más pequeño.

He aquí una solución en forma Flexbox de 2016:

.wrapper { 
 
    display: inline-block; 
 
} 
 

 
.parent { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
/* For visualization */ 
 
.child { 
 
    border: 1px solid #0EA2E8; 
 
    margin: 2px; 
 
    padding: 1px 5px; 
 
}
<div class="wrapper"> 
 
    <div class="parent"> 
 
    <div class="child">Child number one</div> 
 
    <div class="child">Child #2</div> 
 
    </div> 
 
</div>

+0

Pero si no desea que el segundo hijo dicte el ancho (y es más largo que el primer hijo), esto no funcionará. El primer niño será tan ancho como el segundo niño. – Skitterm

+2

@Skitterm Cierto, pero la pregunta dice: * "Necesito que la inferior tome el ancho del hermano anterior" *. – pilau

+0

@pilau sí. Y como dijo skitterm, esta solución no funcionará si el niño de abajo tiene un contenido más grande que el hermano anterior. Ya sabes. Si no está escrito 'Niño # 2'. Puede ser un caso raro, pero ya sabes, en escenarios del mundo real, no escribes mucho Child # 2 en el contenido. Quiero decir, ¿no es tan obvio? – Toskan

0

si estás dispuesto a renunciar a un par de <div> s entonces tengo la solución para usted:

<div style=“display: inline-block;”> 
<table> 
<tr> 
<td>The table automatically makes its siblings the same width</td> 
</tr> 
<tr> 
<td>So this will be as wide</td> 
</tr> 
</table> 
</div> 

Recuerde establecer el div display:inline-block;

3

Aquí hay otra solución Flexbox que permite que el segundo niño se ajuste para que coincida con el ancho del hermano de altura variable.

.wrapper > div { 
 
    border: 1px solid; 
 
} 
 

 
.child { 
 
    display: flex; 
 
} 
 

 
.child div { 
 
    flex-grow: 1; 
 
    width: 0; 
 
} 
 

 
.wrapper { 
 
    display: inline-block; 
 
}
<div class="wrapper"> 
 
    <div>This div is dynamically sized based on its content</div> 
 
    <div class="child"><div>This div will always be the same width as the preceding div, even if its content is longer (or shorter too).</div></div> 
 
</div>

Cuestiones relacionadas