2012-03-19 9 views
16

Sto cercando una soluzione CSS a quanto segue: -Set div per avere suoi fratelli larghezza

<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>

Il wrapper div ha un display in linea e funziona come previsto, sia bambino le div hanno contenuto generato dinamicamente. Ho bisogno di quello inferiore per prendere la larghezza del fratello precedente.

Molte grazie per qualsiasi suggerimento in anticipo.

+1

div è un elemento di blocco è che prendono automaticamente la larghezza di genitore. controlla questo http://jsfiddle.net/qG7b8/ – sandeep

+0

Lo fa. La larghezza di entrambe le div interne è massimizzata per adattarsi alla larghezza del loro genitore. Forse non è quello che intendi ... –

+0

Grazie per i vostri commenti. Ho dato al wrapper div un display: proprietà inline che significa che prende la larghezza del suo figlio più largo. Ora quello di cui ho bisogno è che il secondo div child prenda la larghezza del primo div figlio. – user1278456

risposta

-1

Non sono sicuro se ho capito ciò che si sta cercando di fare, ma sembra che l'impostazione di larghezza 100% fino all'ultimo div dovrebbe funzionare:

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

BTW lo stile nel primo div non è ben definito, è necessario utilizzare i due punti invece di un segno di uguale nella definizione proprietà:

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

non c'è bisogno di definire la larghezza: 100% perché div è un elemento di blocco e è necessario larghezza automatica – sandeep

+0

Questo costringe il div wrapper a occupare l'intero schermo invece di impostare il div figlio al 100% del div ... Sì, ben individuato. – user1278456

+0

Dopo aver passato un sacco di tempo a scherzare con i CSS, ho deciso di risparmiarmi un po 'di tempo e usare un tavolo. mezzo minuto = lavoro fatto. http://jsfiddle.net/XdLku/1/ Ora non gridare e gridare tutti in una volta! Grazie per i contributi. – user1278456

4

impostare il proprio div a display:inline-block, invece, in questo modo il vostro div si espanderà con il contenuto all'interno di esso.

http://jsfiddle.net/CpKDX/

+2

http://jsfiddle.net/CpKDX/5/ nell'esempio precedente, voglio che il secondo div child prenda la larghezza della prima div child, cioè il fratello precedente. – user1278456

+0

@ user1278456 puoi impostare il tuo div contenitore per 'display: inline-block' invece di' display: inline' e ottieni quei risultati, http://jsfiddle.net/CpKDX/6/ –

+0

che non mi sta dando risultato desiderato. Quello che voglio è il div bottom per prendere l'altezza del div superiore che non fa il violino sopra. – user1278456

0

UPDATE: Questo funziona con me, ho appena provato:

<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> 

E 'questo quello che vuoi? I bordi e sfondo sono solo per mostrare i div;)


Basta andare in questo modo:

Diciamo che si desidera che l'intero div essere max. 980px (altrimenti solo lasciare che fuori o sostituire con il 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 seconda opzione sarebbe, per usare ancora una div ... o si utilizza style="width:auto;" per il div dinamica ...

+0

Ahh temo che questo non produca l'effetto desiderato neanche. – user1278456

+0

perché è il 100% del div della madre, giusto? Se non è quello che vuoi, usa width: auto per entrambe le div interne. Questo lavoro lo vuoi? – Chris

+0

@ user1278456: L'ho appena aggiornato, funziona per me ... per favore fatemi sapere se è quello che stavate cercando :) – Chris

10

Galleggianti e tavoli sono così 2000 e in ritardo. Con i browser di oggi possiamo fare in modo che i due DIV di pari livello si adattino a vicenda, indipendentemente dal più grande/più piccolo.

Ecco una soluzione adatta Flexbox per il 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

Ma se non volete che il secondo figlio detta la larghezza (ed è più lungo del primo figlio), questo non funzionerà. Il primo bambino diventerà largo quanto il secondo bambino. – Skitterm

+2

@Skitterm Vero, ma la domanda dice: * "Ho bisogno di quello inferiore per prendere la larghezza del fratello precedente" *. – pilau

+0

@pilau si. E come affermato da skitterm, questa soluzione non funzionerà se il bambino in basso ha un contenuto maggiore rispetto al fratello precedente. Sai. Se non è stato scritto 'Child # 2 '. Può essere un caso raro, ma sai, negli scenari del mondo reale, non scrivi molto Child # 2 nei contenuti. Voglio dire non è così ovvio? – Toskan

0

Se il vostro disposti a rinunciare a un paio di <div> s, allora ho la soluzione per voi:

<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> 

ricordarsi di impostare il div display:inline-block;

3

Ecco un'altra soluzione Flexbox che consente al secondo bambino di avvolgere per abbinare la larghezza del fratello di altezza variabile.

.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>

Problemi correlati