2016-06-23 35 views
6

Desidero avere un div genitore che detenga due div alfine del 50% di larghezza che ridimensionano con il contenuto.Due div al 50% con spazi bianchi: elementi nowrap all'interno di un contenitore flessibile

Uno di questi ha uno h3 con white-space:nowrap; e questo fa aumentare il div oltre il 50%.

Posso forzare il div a tornare al 50% della larghezza utilizzando min-width:0; ma lo h3 ora è in overflow.

Quindi ho una larghezza diversa sui div dei bambini o un overflow dall'h3 all'interno di uno di essi.

È possibile farli avere lo stesso 50% di larghezza anche con elementi che hanno white-space:nowrap; all'interno?

Partenza il problema qui: http://codepen.io/anon/pen/VjPwLm?editors=1100

#parent { 
 
    background: whitesmoke; 
 
    display: inline-flex; 
 
} 
 
#left { 
 
    background: rgba(10, 200, 250, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
} 
 
#right { 
 
    background: rgba(250, 200, 10, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
    /*min-width:0;*/ 
 
    /* Turn this on to see the h3 overflow */ 
 
} 
 
h3 { 
 
    white-space: nowrap; 
 
}
<div id="parent"> 
 
    <div id="left">Captain Deadpool</div> 
 
    <div id="right"> 
 
    <h3>Very long title that does not entirelly fit into the div</h3> 
 
    </div> 
 
</div>

risposta

5

Se ho capito bene, si vuole l'elemento flessibile sinistra per essere largo quanto il titolo lungo.

Quindi, è possibile:

  • Usa min-width: 100% su entrambi i prodotti Flex per renderli largo come la concatenazione dei loro testi. Quindi, saranno ugualmente larghi.

  • Ma sono troppo larghi, poiché il testo del primo elemento flessibile è incluso. Utilizzare width: 0 per ignorarlo.

#parent { 
 
    background: whitesmoke; 
 
    display: inline-flex; 
 
} 
 
#left, #right { 
 
    min-width: 100%; 
 
} 
 
#left { 
 
    background: rgba(10,200,250,0.5); 
 
    width: 0; 
 
} 
 
#right { 
 
    background: rgba(250,200,10,0.5); 
 
    white-space: nowrap; 
 
}
<div id="parent"> 
 
    <div id="left">Captain Deadpool</div> 
 
    <div id="right"><h3>Very long title that does not entirelly fit into the div</h3></div> 
 
</div>

+0

intelligente. Un effetto collaterale dell'uso di 'width: 0;' sull'elemento flex sinistro è che il colore di sfondo e il bordo del contenitore flex ora hanno solo il 50% della sua larghezza corretta. C'è un modo per correggerlo? –

+0

@Amoguai Buon punto. Suppongo che tu possa usare 'min-width: 50%' sugli elementi flex, 'width: 200%' sul contenitore flex e avvolgerlo in un contenitore a livello interno. [Demo] (https://jsfiddle.net/610o1whg/). Ma ora il contenitore flessibile traboccherà l'involucro. Non riesco a pensare a nessun modo per sbarazzarmi del trabocco. – Oriol

+0

@Amoguai L'ho fatto con un margine destro. Ma si interrompe quando lo schermo è troppo stretto, perché dovrebbe essere ridimensionato utilizzando il contenuto massimo invece del contenuto di adattamento predefinito. Ma non tutti i browser supportano 'width: max-content'. [Demo] (https://jsfiddle.net/610o1whg/1/) – Oriol

0

Se ho capito adeguatamente la questione, si vuole maintian i 2 div in modo che abbiano una larghezza del 50%. Impostare il div genitore per avere una larghezza del 100% e quindi impostare il n. E il n. A larghezza minima: 50%; Aggiungi alla h3 in modo che l'overflow sia nascosto.

#parent { 
 
    background: whitesmoke; 
 
    display: inline-flex; 
 
} 
 
#left { 
 
    background: rgba(10, 200, 250, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
    min-width: 100%; 
 
} 
 
#right { 
 
    background: rgba(250, 200, 10, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
    min-width: 100%; 
 
} 
 
h3 { 
 
    white-space: nowrap; 
 
}
<div id="parent"> 
 
    <div id="left">Captain Deadpool</div> 
 
    <div id="right"> 
 
    <h3>Very long title that does not entirelly fit into the div</h3> 
 
    </div> 
 
</div>

+1

Desidero che le div genitore e figlio vengano ridimensionate con il loro contenuto anziché traboccare. Fondamentalmente voglio che il genitore div abbia il doppio della larghezza del div più grande bambino. –

+0

Non è molto importante perché posso usare le media query per riformattare il comportamento su schermi piccoli, ma idealmente si impilano come elementi fluttuanti. –