2017-10-11 1 views
1

Betrachten Sie das folgende Layout:Inline-flex Behälterbreite nicht wachsen

<div class="div"> 
    <span class="span1">test</span> 
    <span class="span2">test test test test test</span> 
</div> 

und die CSS:

.div{ 
    display:inline-flex; 
    background-color:lightgray; 
} 
.span1{ 
    flex:0 0 100px; 
} 
.span2{ 
    white-space:nowrap; 
} 

Warum ist nicht die div gestreckt breit genug, um die beiden Spannweiten zu decken? Dies geschieht in FF und Chrome. Hier ist die Geige https://jsfiddle.net/p18h0jxt/

PS In IE 11/Kanten funktioniert es (zu arbeiten, wie ich es erwarten würde): Es funktioniert überall, wenn ich die folgende Art verwendet:

.span1{ 
    flex:0 0 auto; 
    width:100px; 
} 

Dank.

Antwort

2

Von this SO answer:

Bug alle gängigen Browser zu beeinflussen, außer IE 11 & Rand:

So wie Sie gesagt haben - offenbar flex-basis nicht in einem verschachtelten flex Container eingehalten werden.

So kann Ihre 100px Flex-Basis von flex: 0 0 100px; nicht richtig funktionieren (außer ironisch in IE 11 & Edge).

Die Abhilfemaßnahme (erwähnt here auch) ist width statt flex-basis wie so zu verwenden:

.div { 
 
    display: inline-flex; 
 
    background-color: lightgray; 
 
} 
 

 
.span1 { 
 
    width: 100px; 
 
} 
 

 
.span2 { 
 
    white-space: nowrap; 
 
}
<div class="div"> 
 
    <span class="span1">test</span> 
 
    <span class="span2">test test test test test</span> 
 
</div>

Sie flex statt inline-flex verwenden könnte, aber dann wird Ihr div wie gemacht werden ein Blockelement, dh es wird die volle verfügbare Breite einnehmen, anstatt auf Ihren Inhalt beschränkt zu sein.

Ich nehme an, Sie verwenden inline-flex, so dass der Hintergrund auf den Inhalt beschränkt bleibt.

+2

Danke! Ich dachte der Fehler war in IE. In der Tat ist es ironisch, dass IE hier richtig ist. lol –

+0

Kein Problem :) Ich wusste nie über diesen Fehler, bis Sie es erwähnt, also danke dafür! –

+0

Obwohl das Problem scheint, ein Fehler zu sein, bin ich mir nicht sicher, dass Ihr Bug-Verweis gilt. In dieser Referenz tritt das Problem in * verschachtelten Flex-Containern * auf. Der Flex-Container ist in diesem Fall nicht verschachtelt. Es ist der primäre und einzige Container. –

0

Die 100px beziehen Sie sich in Ihrem aktuellen Beispiel bezieht sich auf flex-basis nicht die Elementbreite.

+0

Ich weiß, aber Flex-Basis wird als Breite während der anfänglichen Breite Berechnung verwendet (wenn Flex-Richtung ist Zeile). –

+0

Ja, aber das Setzen Ihres Elternteils 'div' als' inline-flex' negiert das –

Verwandte Themen