Sto creando una pagina con un menu verticale utilizzando display: flex;
. Voglio che la larghezza del menu si adatti perfettamente ad alcuni pulsanti, senza dover usare una larghezza fissa.Elemento flex forzato per non crescere in direzione dell'asse trasversale
Tuttavia, desidero anche che la casella del menu abbia un messaggio di stato, che può avere un testo piuttosto lungo. Mi piacerebbe che questo status-div avesse la larghezza del menu, senza forzare il contenitore del menu a ingrandirlo. Invece, lo status-div dovrebbe aumentare la sua altezza e avvolgere il testo.
Spiegando a parole è molto difficile, quindi vi suggerisco di verifica questo violino: http://jsfiddle.net/bXL3q/
Nota la differenza quando si imposta .statusmessage
-display: none;
.
Qualche idea, o è quello che sto cercando di fare non fattibile? ..dovrebbe essere?
Quello che ho provato:
width: 100%
fallisce, ovviamente solo assume la larghezza genitorewidth: -webkit-min-content
sorta di opere, ma rende l'elemento troppo strettaflex-basis
eflex-grow
influenzare l'altezza dell'elemento e non fare nulla per influenzare la larghezzaposition: absolute
sol ho problemi di larghezza, ma ora non ho modo di definire l'altezza dello status-div .. (allo scopo di forzare una barra di scorrimento in finestre con altezza ridotta - invece scorrerà semplicemente sugli elementi del pulsante)
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
display: flex;
flex-flow: row nowrap;
align-items: stretch;
}
.page {
flex-grow: 1;
background-color: yellow;
}
.menu {
background-color: red;
height: 100%;
display: flex;
flex-flow: column nowrap;
}
.somechildren {
white-space: nowrap;
background-color: green;
border: 1px solid black;
}
.menu>* {
flex-shrink: 0;
}
.separate {
flex-grow: 1;
}
.statusmessage {
background-color: magenta;
align-self: flex-end;
/*display: none;*/
}
<div class=menu>
<div class=somechildren>I'd like the menu's</div>
<div class=somechildren>width to fit nicely</div>
<div class=somechildren>around these children</div>
<div class=separate></div>
<div class=statusmessage>
While forcing this status message to wrap and grow its height, without affecting the width of the container.
</div>
</div>
<div class=page>
The page
</div>
Ecco ... sorprendente: P La larghezza del messaggio di stato viene utilizzata per calcolare la larghezza del genitore e successivamente viene applicata la larghezza minima del 100%. In effetti, la larghezza agisce come larghezza minima nel caso in cui gli altri elementi siano piccoli e la proprietà di larghezza minima definisce la larghezza "reale". – Thoronwen
Chrome 36, Firefox 31 e IE 11 stanno giocando a palla. Saluti! – Thoronwen
Derp, il nostro amico speciale IE11 non sta giocando a pallone dopotutto. I'll max-width per IE in particolare. – Thoronwen